[vb6] tout sur le if

[vb6] tout sur le if

Introduction

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 pieds, mais juste pour situer VB parmi ses grands frères. En fait, VB est très puissant. Comme dit Jack l' essentiel c'est de côtoyer 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é de principes fondamentaux qui permettent au programmeur de haut niveau de produire 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écuter 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, simple test

Syntaxe sur une ligne

Le cas le plus simple :

If total > 100 then MsgBox "supérieur à 100"

Syntaxe sur plusieurs lignes

L' exemple précédent se note aussi :

If total > 100 Then
    MsgBox "supérieur à 100"
End If

Syntaxe avec underscore

Passer à la ligne, avec un underscore :

If total > 100 Then _
    MsgBox "supérieur à 100"

Plusieurs instructions

Plusieurs instructions à exécuter si la condition est vérifiée

If total > 100 Then 
    MsgBox "supérieur à 100" 
    MsgBox "donc supérieur à 50" 
    Print "supérieur!"
End If 

Plusieurs instructions sur une ligne

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 - Else

La clause Else est facultative.

If Then Else en une ligne

Else, notation sur une seule ligne :

If Total > 100 Then MsgBox "supérieur à 100" Else MsgBox "Inférieur ou égal à 100"

Syntaxe sur plusieurs lignes

If Total > 100 Then
    MsgBox "supérieur à 100"
Else
    MsgBox "Inférieur ou égal à 100"
End If

Syntaxe avec l' underscore

Notation sur plusieurs lignes avec l' underscore :

If total > 100 Then _ 
    MsgBox "supérieur à 100" Else _ 
    MsgBox "Inférieur ou égal à 100" 

If - ElseIf

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

ElseIf + Else

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 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, c'est à dire 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"
End If 

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

A voir également
Ce document intitulé « [vb6] tout sur le if » issu de CodeS SourceS (codes-sources.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Rejoignez-nous