Kiepling avait presque tout écrit sur le "si".
Ce qui suit est idéal pour débuter, le lire une fois suffit. Juste pour savoir que ça existe.
Tous les cas de figure sont recensés ici, en 10 exemples concrets.
Après avoir présenté le classique if..then...else..end if, j'aborderai deux éléments
moins courants: le IIF et le #if...then...#Else...#End if.
Les explications entre guillemets ne sont pas de moi mais directement issus de l' aide Microsoft.
Souvent dans cet article, j' évoque les langages C, C++ et assembleur. C'est pas pour frimer ou casser les c...
juste pour situer VB parmi ses grands frères. En fait, VB est très puissant. Comme dit Jack l' essentiel c'est de
partager. Cottoyer du C et de l' assembleur en VB, c'est un plus parce qu' étudier un langage de programmation sans
savoir ce qui se passe au plus bas niveau c'est passer à côté deprincipes fondamentaux qui permet au programmeur de haut niveau deproduire un meilleur code.
Oki on y va!
*********************************************
Définition
*********************************************
If est une instruction qui effectue un test de condition sur une
expression afin d' exéctuer conditionnellement des instructions en fonction du résultat
de l' expression.
La condition est une expression qui prend la valeur True ou False.
Si l' argument est Null, il prend la valeur False.
*********************************************
IF...THEN
*********************************************
Exemple 1 - le cas le plus simple
if total > 100 then MsgBox "supérieur à 100"
Exemple 2 - l' exemple précédent se note aussi:
if total > 100 then
MsgBox "supérieur à 100"
End if
Exemple 3 - Passer à la ligne, avec un underscore:
if total > 100 then _
MsgBox "supérieur à 100"
Exemple 4 - plusieurs instructions à exécuter si la condition est vérifiée
if total > 100 then
MsgBox "supérieur à 100"
MsgBox "donc supérieur à 50"
debug.print "supérieur!"
end if
Exemple 5 - plusieurs instructions sur une seule ligne.
La syntaxe à une seule ligne est employée par commodité,
pour économiser des lignes et obtenir un code compact.
(pas forcément lisible mais là n'est pas la question!)
La notation se fait avec deux points.
If A > 10 Then A = A + 1 : B = B + A : C = C + B
*********************************************
IF...THEN...ELSE...END IF
*********************************************
Exemple 6 - Else (notation sur une seule ligne)
La clause Else est facultative.
if total > 100 then MsgBox "supérieur à 100" else Msgbox "Inférieur ou égal à 100"
Exemple 7 - syntaxe sur plusieurs lignes:
if total > 100 then
MsgBox "supérieur à 100"
Else
Msgbox "Inférieur ou égal à 100"
End if
Exemple 8 - Notation sur plusieurs lignes avec l' underscore
If total > 100 Then _
MsgBox "supérieur à 100" Else _
MsgBox "Inférieur ou égal à 100"
*********************************************
ELSEIF
*********************************************
Exemple 9 - ElseIf
La clause ElseIf est facultative, comme le Else.
"Un bloc If peut contenir autant de clauses Elself que vous le souhaitez,
mais aucune ne peut apparaître après une clause Else. N'importe quel bloc
d'instructions peut contenir des instructions If imbriquées."
"Lorsque vous exécutez une instruction If d'un bloc, la condition est testée. Si la
valeur de l'argument condition est True, les instructions qui suivent
Then sont exécutées. Si la valeur de l'argument condition est False, chacune des conditions
ElseIf (s'il y en a) sont évaluées l'une après l'autre. Quand une condition de valeur True
est trouvée, les instructions qui suivent le Then correspondant sont exécutées. Si aucune
des conditions Elself n'a pour valeur True, ou s'il n'y a pas de clause ElseIf, les
instructions qui suivent Else sont exécutées. Une fois que les instructions qui suivent
Then ou Else exécutées, l'exécution du programme se poursuit à partir de l'instruction
située après End If."
if A > 10 then
A = 10
Elseif A > 20 then
C = D
Elseif B > 20 then
C = D
End if
Exemple 10 - avec un Else final
Le Else permet de récupérer tout ce qui n'a pas été évalué comme True
par les ElseIf qui le précèdent:
if A > 10 then
A = 10
Elseif A > 20 then
C = D
Elseif B > 20 then
C = D
Else
B = B + 2
End if
Note: on a tendance à l' oublier mais le ElseIf se retrouve au plus bas
niveau, en assembleur. En fait l' instruction Select Case est un
if...elseif syntaxiquement déguisé, afin de rendre le code plus lisible et compréhensible par l' homme.
Quand on fait un Select Case en VB ou en C/C++, pendant la compilation le code est
transposé en assembleur et au plus bas niveau, c'est du elseif qu'on retrouve.
(Et puisqu'on aborde ce sujet, il en va de même pour l' horrible GOTO. Il est lui aussi
issu de l' assembleur. Pas zoli mais puissant).
Bill ajoute: "L'instruction Select Case peut s'avérer mieux adaptée à l'évaluation d'une
expression simple qui possède plusieurs actions possibles. Toutefois, la clause TypeOf
objectname Is objecttype ne peut pas être utilisée avec Select Case."
*********************************************
Consignes de compilation conditionnelle
*********************************************
Voilà tout est dit sur le if. Maintenant un mot sur une pratique peu courante en VB,
mais ultra courante en C/C++: la consigne de compilation conditionnelle de blocs
sélectionnés de code Visual Basic.
En C ça s' appelle une directive préprocesseur, cad que ce code est exécuté
pendant la compilation, son résultat est accessible par le programme compilé
mais le code ignoré n'est pas écrit dans l' exe.
Et comme en C, ça se note avec un dièse:
#if...then...#else...#end if
"La compilation conditionnelle est généralement utilisée pour compiler le même
programme sur différentes plates-formes. Elle est également utilisée pour éviter
que le code de débogage apparaisse dans un fichier exécutable. Le code exclu lors
d'une compilation conditionnelle est totalement absent du fichier exécutable final,
et n'a donc aucune incidence sur la taille de ce dernier ou sur les performances."
Et l' exemple de Bill:
' Si Mac prend la valeur true, exécute les instructions suivant le #If.
#If Mac Then
'. Placez uniquement des instructions Mac ici.
' S'il s'agit d'un programme Windows 32 bits, faites ceci:
#ElseIf Win32 Then
'. Placez uniquement des instructions Windows 32
' bits ici.
' Si votre programme n'est ni un programme Mac ni un
' programme Windows 32 bits, faites ceci:
#Else
'. Placez les instructions de la plate-forme appropriée ici.
#End If
*********************************************
IIF
*********************************************
IIF évalue une expression et retourne l' un ou l' autre des deux arguments
passés en paramètres.
Synopsis:
IIf(expr, truepart, falsepart)
Si expr est vraie, retourner truepart. Sinon retourner falsepart.
Cet exemple (source: Microsoft) utilise la fonction IIf pour évaluer le paramètre TestMe
de la procédure CheckIt et renvoie soit le mot "Grand" si le montant est supérieur à 1000
soit le mot "Petit" s'il est inférieur à 1000.
Function CheckIt (TestMe As Integer)
CheckIt = IIf(TestMe > 1000, "Grand", "Petit")
End Function
La notation équivalente avec la syntaxe classique serait:
if TestMe > 1000 then CheckIt = "Grand" else CheckIt = "Petit"
Note: le IIF est très lent: 6 fois plus long à exécuter que le if classique.
Donc à éviter si les performances doivent être au rendez-vous. Amusez-vous
à mesurer et comparer les temps d' exécution, avec un Timer haute précision.
En fait le IIF a été conservé pour sa syntaxe élégante. On retrouve le paradigme
du IIF en C/C++, mais avec une autre syntaxe ( expr ? truepart : falsepart ).