97 votes

IIf() vs If

Dans Visual Basic, y a-t-il une différence de performances lorsque vous utilisez la fonction IIf au lieu de l’instruction If ?

140voto

Konrad Rudolph Points 231505

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)

64voto

Thomas G. Mayfield Points 5208

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 :

13voto

rjzii Points 8979

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

7voto

Larry Points 6257

Mieux utiliser si au lieu de IIf pour bien utiliser le mécanisme d’inférence de type (Option Infer On)

Dans cet exemple, les mots-clés est reconnue comme une chaîne lorsque j’utilise si :

Dans le cas contraire, elle est reconnue comme un objet :

6voto

EdgarVerona Points 1038

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é.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X