Dans Visual Basic, y a-t-il une différence de performances lorsque vous utilisez la fonction IIf au lieu de l’instruction If ?
Réponses
Trop de publicités?VB est la suivante If
déclaration à la question posée, je pense que:
' Usage 1
Dim result = If(a > 5, "World", "Hello")
' Usage 2
Dim foo = If(result, "Alternative")
La première est essentiellement de C#opérateur conditionnel ternaire et le second est son confluent de l'opérateur (retour result
moins d' Nothing
, auquel cas le retour "Alternative"
). If
a ainsi remplacé IIf
et le dernier est obsolète.
/EDIT: Comme en C#, VB conditionnelle If
opérateur est en court-circuit, de sorte que vous pouvez maintenant écrire le code suivant, qui n'est pas possible à l'aide de l' IIf
fonction de:
Dim len = If(text Is Nothing, 0, text.Length)
IIf() s’exécute aussi bien le code true et false. Pour des choses simples comme l’assignation numérique, ce n’est pas une grosse affaire. Mais pour le code qui requiert toute sorte de traitement, vous gaspillez cycles exécutant la condition qui ne correspond pas et pouvant provoquer des effets secondaires.
Illustration du code :
Sorties :
Aussi, un autre gros problème avec l'IIf est qu'il sera fait appel de toutes les fonctions qui sont dans les arguments [1], donc si vous avez une situation comme suit:
string results = IIf(Not oraData.IsDBNull(ndx), oraData.GetString(ndx), string.Empty)
Il va réellement lancer une exception, ce qui n'est pas la façon dont la plupart des gens pense que la fonction fonctionne la première fois qu'ils le voient. Cela peut aussi conduire à une certaine très dur à corriger des bugs dans une application.
[1] Fonction IIf - http://msdn.microsoft.com/en-us/library/27ydhh0d(SV.71).aspx
En plus de cela, la lisibilité devrait probablement être plus fortement préféré que les performances dans ce cas. Même si l'IIF a été plus efficace, c'est tout simplement le moins lisible pour le public cible (je suppose que si vous travaillez dans Visual Basic, vous voulez que d'autres programmeurs pour être en mesure de lire facilement votre code, ce qui est VB est plus grand boon... et qui est perdu avec des concepts comme IIF à mon avis).
Aussi, "IIF est une fonction, par rapport à SI faire partie de l'langues "syntaxe"... ce qui implique, pour moi, que, Si, en effet, serait plus rapide... si rien d'autre que l'instruction if peut être bouilli vers le bas directement à un petit ensemble de opcodes plutôt que d'avoir à aller à un autre espace dans la mémoire pour effectuer la logique trouvé dans ladite fonction. C'est un banal différence, peut-être, mais mérite d'être souligné.