Tengo una gran aplicación ASP clásica que tengo que mantener, y en repetidas ocasiones me veo frustrado por la falta de capacidad de evaluación de cortocircuitos. Por ejemplo, VBScript no va a dejar pasar con:VBScript solución de cortocircuito condicional
if not isNull(Rs("myField")) and Rs("myField") <> 0 then
...
... porque si Rs ("myField") es nulo, se produce un error en la segunda condición, la comparación de nula a 0. Así que' Normalmente terminará haciendo esto en su lugar:
dim myField
if isNull(Rs("myField")) then
myField = 0
else
myField = Rs("myField")
end if
if myField <> 0 then
...
Obviamente, la verboseness es bastante atroz. Mirando alrededor de esta gran base de código, la mejor solución que he encontrado es usar una función que el programador original escribió, llamada TernaryOp, que básicamente se injerta en una funcionalidad ternaria similar a la del operador, pero todavía estoy atascado usando una variable temporal que no ser necesario en un lenguaje más completo. ¿Hay una mejor manera? ¿Alguna manera supersecreta de que el cortocircuito realmente exista en VBScript?
Classic VB tampoco tiene una función ternaria real, solo la función IIf() (inmediata si). Pero incluso eso sigue siendo una función, por lo que todos los argumentos de función deben evaluarse antes de pasar a la función. –