begin process at 2008 08 22 02:34:15
1 229 759 membres
30 nouveaux aujourd'hui
14 267 membres club

Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum.
Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

[VB6] TOUT SUR LE IF


Information sur le tutorial

Catégorie :Tutoriaux Date de création : 04/06/2006 12:00:51 Vu : 10 415 fois

Note :
8,25 / 10 - par 4 personnes
8,25 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10

Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

Description

la description n' apparait pas?

Tutorial

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 ).
04 juin 2006 12:05:19 :
La présentation du tutorial n' apparait pas.
  • signaler à un administrateur
    Commentaire de Malkuth le 12/06/2006 16:56:36

    Salut

    Tutos sympa pour les débutants mais deux petites remaques :

    1- tu aurais put rappeller les mots clef ANDALSO et ORELSE, bien que n'étant pas le sujet de la tutos ils sont souvent moins connue que AND et OR.

    Ex : If not Obj Is nothing AndAlso ([Test sur l'objet]) then ...
    Dans ce cas [Test sur l'objet] ne sera tester que si Objet est défini je vous laisse trouver pour orelse

    2- Tu devrait être plus méchant avec IIF(,,)
    IIF est long et plus complex qu'il n'y parait exemple :

    Dim text as string = IIF(Obj Is nothing,"Objet non définie",Obj.Nom)

    ce code plantera a chaque fois que obj = nothing car dans tous les cas On évalura Obj.Nom

    if faut penser a IIF comme a une function(ce qu'il est!) équivalente à

    Public Function IIF(Test as boolean,Vrai as object,Faux as Object)As Object
    IF Test then Return Vrai
    Return Faux
    End Function

    Or Lors du passage des paramétre le programme va nous dire qu'il y'a une erreur sur le paramêtre FAUX (Normal Obj = Nothing)

    Bon je sais pas si s'est super clair mais d'une maniére général évité IIF a tout pris, et si vous l'utilisé essayer de ne faire intervenir que des constantes dans les paramêtres Vrai ou Faux.

    PS : je crois qu'en cela la construction [?:] du C/C++ réagi comme un vrai IF (disont inline!!) et pas comme une function.

  • signaler à un administrateur
    Commentaire de katsankat le 14/06/2006 13:08:39

    Salut :)
    Correct, bonne intervention!

    Le if(cond)?a:b; du C/C++ est un opérateur ternaire: un opérateur évolué qui réagit comme l' opéreateur d' incrémentation i++ ou ++n. Ce n'est donc ni une fonction, ni un if, ni une macro.

  • signaler à un administrateur
    Commentaire de claudiusse le 19/06/2006 22:32:34

    Je ne suis pas experimenté mais ceci ne devrai pas ce trouver dans un tuto

  • signaler à un administrateur
    Commentaire de nico1610 le 22/06/2006 04:20:01

    Comme le dit Malkuth le iif (à pas confondre avec l'IFF (c'est militaire comme terme)
    le problème est qu'il se comporte comme une fonction et dans un fonction en VB6, TOUTES les lignes sont verifié avant l'execution de la fonction, donc dans l'exemple donné par Malkuth ca veut dire que lors de la prélecture, si l'object = Nothing (en clair qu'il n'exsiste pas ) alors la fonction iif va quand même rechercher le nom de cette object, et que dire du nom d'un object qui n'exsiste pas ?? Bas vb il vous dit ca : ERROR !!
    Mais iif est un bon outil pour faire un truc du style :
    Public Sub Clacul(mix as integer)
    ...
    ...
    TexteSortie = "il y a "& str(mix) & "entrée" & iif(mix >1,"s","")
    ...
    ...
    End Sub
    Cette exemple bidon, montre juste que iif a fait économisé un temps considérable au codage et a la relecture c'est mieux qu'un
    If (mix>1) then
        TexteSortie = "il y a "& str(mix) & "entrées"
    Else
        TexteSortie = "il y a "& str(mix) & "entrée"
    End If
    ironie de la chose, vb est moin rapide dans le premier cas (comme quoi optimisation ne veut pas dire moins de ligne !)

    Enfin je vais pas m'étendre sur le sujet, DarkSidouis a pondu un exelent article sur la fonction IIF, si le coeur vout en dis, cherchez donc sur vbf.

    Sinon, bon tuto, plutot complet, en espérant que tout nous fasse pas toutes les fonctions de VB comme ca , ou la base de donné de VBF va surcharger !
    (Je met 9/10 car tres bonne recherche approfondie sur le sujet, mais manque de claireté sur iif, qui me semble être un point important pour un tuto avec comme theme IF !)

    PS : Comme quoi même des tres bon initié a vb6 regarde ce genre de tuto, qui n'apporte rien de neuf, mais quel plaisir de se replonger dans des truc "simple" quand on travail toutes ses nuit sur du ADO ou du DirectX ... enfin !

  • signaler à un administrateur
    Commentaire de karimvb120576 le 03/12/2006 20:56:54

    salut
    et pour un if sur le nom d'un fichier enregistré comment en fait ??

  • signaler à un administrateur
    Commentaire de exatex le 21/07/2007 08:33:59

    salut,

    il y a un probleme avec ton exemple 10:

    if A > 10 then
        A = 10
    Elseif A > 20 then
        C = D
    Elseif B > 20 then
        C = D
    Else
        B = B + 2
    End if

    Dans se cas la, "Elseif A > 20 then" ne sera jamais executé, car A > 20 => A > 10.

    a+

Ajouter un commentaire

Pub



Appels d'offres

CalendriCode

Août 2008
LMMJVSD
    123
45678910
11121314151617
18192021222324
25262728293031

VS Express FR Gratuit !

VS Express en français et 100% gratuit !

Boutique

Boutique de goodies CodeS-SourceS