Les structures conditionnelles en Perl

Les structures conditionnelles en Perl

Messagede Devorg le Sam 12 Avr 2008 12:32

Qu'est-ce qu'une structure conditionnelle ?

On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent ĂȘtre associĂ©es Ă  des structures qui se rĂ©pĂštent suivant la rĂ©alisation de la condition, on appelle ces structures des structures de boucle

La notion de bloc


Une expression suivie d'un point-virgule est appelée instruction. Par exemple $a++; est une instruction.
Lorsque l'on veut regrouper plusieurs instructions, on peut créer ce que l'on appelle un bloc, c'est-à-dire un ensemble d'instructions (suivies respectivement par des point-virgules) et comprises entre les accolades { et }.

Les instructions if, while et for peuvent par exemple ĂȘtre suivies d'un bloc d'instructions Ă  exĂ©cuter...

L'instruction if


L'instruction if est la structure de test la plus basique, on la retrouve dans tous les langages (avec une syntaxe différente...). Elle permet d'exécuter une série d'instructions si jamais une condition est réalisée.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
if (condition réalisée) {

   liste d'instructions;

}

else {

     liste d'instructions;

}



Remarques:

la condition doit ĂȘtre entre des parenthĂšses
il est possible de définir plusieurs conditions à remplir avec les opérateurs ET et OU (&& et ||)
par exemple l'instruciton suivante teste si les deux conditions sont vraies
if ((condition1)&&(condition2))
L'instruction ci-dessous exécutera les instructions si l'une ou l'autre des deux conditions est vraie
if ((condition1)||(condition2))
les instructions situées dans le bloc qui suit else sont les instructions qui seront exécutées si la ou les conditions ne sont pas remplies
Contrairement au langage C, les parenthĂšses de bloc ne peuvent pas ĂȘtre omises lorsqu'il n'y a qu'une seule instruction!


L'instruction if ... else


L'instruction if dans sa forme basique ne permet de tester qu'une condition, or la plupart du temps on aimerait pouvoir choisir les instructions à exécuter en cas de non réalisation de la condition...
L'expression if ... else permet d'exécuter une autre série d'instructions en cas de non-réalisation de la condition.

La syntaxe de cette expression est la suivante:

Code: Tout sélectionner
if (condition réalisée) {

   liste d'instructions;

}

else {

     autre sĂ©rie d'instructions;

}



une façon plus courte de faire un test (opérateur ternaire)


Il est possible de faire un test avec une structure beaucoup moins lourde grùce à la structure suivante, appelée opérateur ternaire:


(condition) ? instruction si vrai : instruction si faux

Remarques:

la condition doit ĂȘtre entre des parenthĂšses
Lorsque la condition est vraie, l'instruction de gauche est exécutée
Lorsque la condition est fausse, l'instruction de droite est exécutée
L'instruction if ... elsif ... else


L'instruction if ... else ne permet de tester qu'une condition, or il est parfois nécessaire de tester plusieurs conditions de façon exclusive, c'est-à-dire que sur toutes les conditions une seule sera réalisée ...
L'expression if ... elsif ... else permet d'enchaßner une série d'instructions et évite d'avoir à imbriquer des instructions if.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
if (condition réalisée) {

   liste d'instructions;

}

elsif (autre condition réalisée) {

      autre sĂ©rie d'instructions;

}

...

else (derniÚre condition réalisée) {

     sĂ©rie d'instructions;

}


Perl ne contient pas d'instruction switch


L'instruction unless


Perl propose l'instruction unless, qui permet d'exécuter une instruction seulement si la condition associée est fausse.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
unless (condition non réalisée) {

       liste d'instructions

}



Les boucles


Les boucles sont des structures qui permettent d'exĂ©cuter plusieurs fois la mĂȘme sĂ©rie d'instructions jusqu'Ă  ce qu'une condition ne soit plus rĂ©alisĂ©e...
On appelle parfois ces structures instructions répétitives ou bien itérations.
La façon la plus commune de faire une boucle, est de crĂ©er un compteur (une variable qui s'incrĂ©mente, c'est-Ă -dire qui augmente de 1 Ă  chaque tour de boucle) et de faire arrĂȘter la boucle lorsque le compteur dĂ©passe une certaine valeur.

La boucle for


L'instruction for permet d'exĂ©cuter plusieurs fois la mĂȘme sĂ©rie d'instructions: c'est une boucle!

Dans sa syntaxe, il suffit de prĂ©ciser le nom de la variable qui sert de compteur (et Ă©ventuellement sa valeur de dĂ©part, la condition sur la variable pour laquelle la boucle s'arrĂȘte (basiquement une condition qui teste si la valeur du compteur dĂ©passe une limite) et enfin une instruction qui incrĂ©mente (ou dĂ©crĂ©mente) le compteur.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
for (compteur; condition; modification du compteur) {

    liste d'instructions

}



Par exemple:


Code: Tout sélectionner
for ($i=1; $i<6; $i++) {

    printf("%d", $i);

}




Cette boucle affiche 5 fois la valeur de i, c'est-Ă -dire 1,2,3,4,5
Elle commence à $i=1, vérifie que i est bien inférieur à 6, etc... jusqu'à atteindre la valeur i=6, pour laquelle la condition ne sera plus réalisée, la boucle s'interrompra et le programme continuera son cours.
D'autre part, le langage Perl autorise la dĂ©claration de la variable de boucle dans l'instruction for elle-mĂȘme!

Par exemple:


Code: Tout sélectionner
for ($i=0; $i<10; $i++) {

    printf("%d", $i);

}



il faudra toujours vérifier que la boucle a bien une condition de sortie (i.e le compteur s'incrémente correctement)
une instruction printf(); dans votre boucle est un bon moyen pour vérifier la valeur du compteur pas à pas en l'affichant!
il faut bien compter le nombre de fois que l'on veut faire exécuter la boucle:
for(i=0;i<10;i++) exécute 10 fois la boucle (i de 0 à 9)
for($i=0;$i<=10;$i++) exécute 11 fois la boucle ($i de 0 à 10)
for($i=1;$i<10;$i++) exécute 9 fois la boucle ($i de 1 à 9)
for($i=1;$i<=10;$i++) exécute 10 fois la boucle ($i de 1 à 10)



L'instruction while


L'instruction while reprĂ©sente un autre moyen d'exĂ©cuter plusieurs fois la mĂȘme sĂ©rie d'instructions.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
while (condition réalisée) {

      liste d'instructions

}



Cette instruction exĂ©cute la liste d'instructions tant que (while est un mot anglais qui signifie tant que) la condition est rĂ©alisĂ©e. La condition de sortie pouvant ĂȘtre n'importe quelle structure conditionnelle, les risques de boucle infinie (boucle dont la condition est toujours vraie) sont grands, c'est-Ă -dire qu'elle risque de provoquer un plantage du navigateur!


L'instruction until


L'instruction until est similaire à l'instruction while, à la différence prÚs que le test est inversé.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
until (condition non réalisée) {

      liste d'instructions

}



L'instruction foreach


L'instruction foreach permet d'effectuer une boucle qui parcourt une liste. A chaque tour de boucle, l'Ă©lĂ©ment de la liste est affectĂ© Ă  la variable $VAR. LISTE peut par exemple ĂȘtre un tableau, dont l'instruction foreach va parcourir les enregistrements.

La syntaxe de cette expression est la suivante:


Code: Tout sélectionner
foreach $VAR (LISTE) {

        liste d'instructions;

}



Saut inconditionnel


Il peut ĂȘtre nĂ©cessaire de faire sauter Ă  la boucle une ou plusieurs valeurs sans pour autant mettre fin Ă  celle-ci.

La syntaxe de cette expression est "next;" (cette instruction se place dans une boucle!), on l'associe généralement à une structure conditionnelle, sinon les lignes situées entre cette instruction et la fin de la boucle seraient obsolÚtes. Elle est trÚs proche de l'instruction continue du langage C.

Exemple: Imaginons que l'on veuille imprimer pour $x allant de 1 à 10 la valeur de 1/($x-7) ... il est évident que pour $x=7 il y aura une erreur. Heureusement, grùce à l'instruction nexte il est possible de traiter cette valeur à part puis de continuer la boucle!



Code: Tout sélectionner
#!/usr/local/bin/perl

$x=1;

while ($x<=10) {

   if ($x == 7) {

      printf("Division par zĂ©ro!\n");

      next;

   }

$a = 1/($x-7);

printf("%d", $a);

$x++;

}



Il y avait une erreur dans ce programme... peut-ĂȘtre ne l'avez-vous pas vue:
Lorsque $x est égal à 7, le compteur ne s'incrémente plus, il reste constamment à la valeur 7, il aurait fallu écrire:



Code: Tout sélectionner
#!/usr/local/bin/perl

$x=1;

while ($x<=10) {

   if ($x == 7) {

      printf("division par 0");

      $x++;

      next;

   }

$a = 1/($x-7);

printf("%d", $a);

$x++;

}



ArrĂȘt inconditionnel


A l'inverse, il peut ĂȘtre voulu d'arrĂȘter prĂ©maturĂ©ment la boucle, pour une autre conditon que celle prĂ©cisĂ© dans l'en-tĂšte de la boucle. L'instruction last permet d'arrĂȘter une boucle (for ou bien while). Il s'agit, tout comme newt, de l'associer Ă  une structure conditionnelle, sans laquelle la boucle ne ferait jamais plus d'un tour!

Dans l'exemple de tout Ă  l'heure, par exemple si l'on ne savait pas Ă  quel moment le dĂ©nominateur ($x-7) s'annule (bon...OK...pour des Ă©quations plus compliquĂ©es par exemple) il serait possible de faire arrĂȘter la boucle en cas d'annulation du dĂ©nominateur, pour Ă©viter une division par zĂ©ro!




Code: Tout sélectionner
for ($x=1; $x<=10; $x++) {

    a = $x-7;

    if ($a == 0) {

       printf("division par 0");

       last;

    }

    printf("%d", 1/$a);

}
Avatar de l’utilisateur
Devorg
Administrateur
Administrateur
 
Messages: 297
Inscription: Lun 7 Avr 2008 14:07

Retourner vers Languages du web

Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 0 invités

cron