Si, IIf() y Si()
-
09-06-2019 - |
Pregunta
Hace poco hice una pregunta sobre ISi vs.Si y descubrí que hay otra función en VB llamada Si que básicamente hace lo mismo que si pero es un cortocircuito.
Haz esto Si función funciona mejor que la si ¿función?¿El Si declaración triunfa sobre Si y si funciones?
Solución
Maldita sea, realmente pensé que estabas hablando del operador todo el tiempo.;-) De todos modos …
¿Esta función If funciona mejor que la función IIf?
Definitivamente.Recuerde, está integrado en el idioma.Sólo es necesario evaluar uno de los dos argumentos condicionales, lo que podría ahorrar una operación costosa.
¿La declaración If triunfa sobre las funciones If e IIf?
Creo que no se pueden comparar los dos porque hacen cosas diferentes.Si su código realiza semánticamente una tarea, debe enfatizar esto, en lugar de la toma de decisiones.Utilizar el If
operador aquí en lugar de la declaración.Esto es especialmente cierto si puede usarlo en la inicialización de una variable porque, de lo contrario, la variable se inicializará de forma predeterminada, lo que resultará en un código más lento:
Dim result = If(a > 0, Math.Sqrt(a), -1.0)
' versus
Dim result As Double ' Redundant default initialization!
If a > 0 Then
result = Math.Sqrt(a)
Else
result = -1
End If
Otros consejos
Una distinción muy importante entre IIf()
y If()
es que con Option Infer On
el último convertirá implícitamente los resultados al mismo tipo de datos en ciertos casos, como cuando IIf
regresará Object
.
Ejemplo:
Dim val As Integer = -1
Dim iifVal As Object, ifVal As Object
iifVal = IIf(val >= 0, val, Nothing)
ifVal = If(val >= 0, val, Nothing)
Producción:
iifVal
tiene valor de Nada y tipo de Objeto
ifVal
tiene un valor de 0 y tipo de Entero, b/c está convirtiendo implícitamente Nada en un Entero.