Aparentemente, su pregunta no se trata de que el cortocircuito sea bueno o malo en general, sino de por qué VB.NET proporciona operadores con y sin él. Con esto en mente, la respuesta a
¿Cuándo es mala la evaluación de cortocircuito?
es simplemente: cuando viola la compatibilidad con versiones anteriores .
Bien, ahora puede decir que VB.NET no es muy compatible con versiones anteriores de VB6 o VBA, sin embargo, al menos ciertas partes del lenguaje lo son. La decisión de Microsoft de mantener la antigua semántica AND y OR (sin cortocircuito) hizo que fuera menos probable que ocurriera una gran categoría de errores al portar viejos programas VB a VB.NET.
Por otro lado, los diseñadores de lenguaje VB.NET probablemente compartieron su opinión sobre los cortocircuitos como algo bueno. Cuando recuerdo correctamente, las primeras versiones preliminares de VB.NET proporcionaron operadores AND u OR con cortocircuito, pero los comentarios del desarrollador deben haber sido tan malos que MS retiró esta decisión antes de que apareciera VB.NET 1.0. Entonces, los diseñadores decidieron implementarlo en términos de nuevas palabras clave ANDALSO
y ORELSE
como una compensación entre la compatibilidad y la utilidad hacia atrás.
En mi humilde opinión, fue una buena decisión. Tuve que portar varios programas antiguos en la última década, y no tener que hacer un análisis de impacto pesado para cada expresión lógica, incluyendo AND y / u OR (juego de palabras) hizo que esa tarea fuera mucho más fácil y más económica. Por otro lado, cada vez que tengo que escribir una nueva expresión lógica en VB.NET, mi elección predeterminada para los operadores son las formas de cortocircuito, que es a lo que estoy acostumbrado desde C, C ++, C #, etc., y permite yo escribir varios modismos en forma más concisa (incluso si ANDALSO necesita 4 caracteres más para escribir).
Si no está convencido, le recomiendo leer el excelente artículo de Joel Spolsky sobre los auriculares marcianos , que explica por qué las primeras decisiones de diseño en el desarrollo de software no se pueden revocar fácilmente después de que el componente o lenguaje o API en juego haya alcanzado una base de usuarios de cierto tamaño .