Aller au contenu

Ruby/Conditions

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Conditions
Icône de la faculté
Chapitre no 6
Leçon : Ruby
Chap. préc. :Méthodes
Chap. suiv. :Tableaux et hachages
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Ruby : Conditions
Ruby/Conditions
 », n'a pu être restituée correctement ci-dessus.

Jusque-là, nos programmes étaient monotones, linéaires, ils fonctionnaient toujours de la même façon. Or, dans la plupart des cas, on a besoin d'adapter le déroulement du programme en fonction de certains paramètres (une action de l'utilisateur, etc.). Voilà pourquoi nous avons recours aux structures conditionnelles.

La condition if - else

[modifier | modifier le wikicode]

La structure en if - else est la plus simple des structures conditionnelles. Elle évalue une expression, si (if) cette condition est remplie, certaines instructions sont exécutées, sinon (else) on en exécute d'autres.

Début de l'exemple
Fin de l'exemple


Une structure conditionnelle se termine par le mot-clé end. Celui-ci se situe après la dernière condition. Nous ne sommes pas obligés de placer un else dans la condition ; par exemple, ceci fonctionne :

Début de l'exemple
Fin de l'exemple


Les parenthèses entre lesquelles se situe la condition sont facultatives.

Si la condition entre parenthèses est vérifiée, l'état true lui est assigné : le cas échéant, ce sera la valeur false. Comme nous l'avons déjà vu, vous pouvez aussi assigner ces valeurs booléennes à des variables.

Le mot-clé then est facultatif si la condition est suivie d'un retour à la ligne, mais il améliore la lisibilité de la condition :

Début de l'exemple
Fin de l'exemple


Afin de tester ce genre d'expression arithmétique, vous disposez des opérateurs suivants :

  • == vérifie l'égalité du premier terme par rapport au second (à ne pas confondre avec le symbole d'affectation : =)
  • < vérifie que le premier terme est strictement inférieur au second
  • > vérifie que le premier terme est strictement supérieur au second
  • <= vérifie que le premier terme est inférieur ou égal au second
  • >= vérifie que le premier terme est supérieur ou égal au second
  • != vérifie l'inégalité du premier terme par rapport au second

Considérons maintenant :

Début de l'exemple
Fin de l'exemple


La valeur true se déduit d'elle-même : vous n'avez pas besoin d'écrire if(estMajeur == true). Pour tester la valeur false, on aurait pu écrire if(estMajeur == false), mais ceci fonctionne aussi : if!(estMajeur).

Il existe une autre façon d’utiliser la condition if :

Début de l'exemple
Fin de l'exemple


Dans ce cas, l'instruction à exécuter doit être la seule ; on ne s'encombre pas d'un end final.

Condition alternative : elsif

[modifier | modifier le wikicode]

La condition vue précédemment peut être davantage enrichie, des choix intermédiaires peuvent être proposés, par test de plusieurs conditions successives (si... alors... sinon si... alors... sinon...). La première condition vérifiée comme étant vraie sera exécutée, les autres seront alors ignorées (même si elles sont vraies, elles aussi).

Début de l'exemple
Fin de l'exemple


  • (a < b) est fausse : les instructions suivant le if ne sont donc pas exécutées.
  • (a < c) est vraie : donc les instructions suivant le premier elsif sont exécutées, on sort ensuite de la structure conditionnelle.
  • Les instructions du second elsif et du else ne sont pas exécutées, même si (b < c) est vraie.


Les autres remarques faites précédemment sont encore valables ici.

La condition unless

[modifier | modifier le wikicode]

unless est la condition contraire de if. Elle exécute une instruction sauf si la condition est vérifiée. Par exemple :

Début de l'exemple
Fin de l'exemple


unless(estMajeur) effectue la même chose que if!(estMajeur), utilisez la condition que vous préférez.

Tout comme avec l'instruction if, il est possible d'écrire :

Début de l'exemple
Fin de l'exemple


L'instruction case

[modifier | modifier le wikicode]

Cette instruction teste une suite de conditions : elle évalue plusieurs cas et exécute certaines instructions en conséquence (la première condition vérifiée masque les autres, comme dans les structures en if). Voici comment l’utiliser :

Début de l'exemple
Fin de l'exemple


On teste ici différents cas en fonction de la valeur de z. when 1 équivaut implicitement à when z = 1. Cette structure case se termine là aussi par un end.

Condition ternaire

[modifier | modifier le wikicode]

Il existe encore une autre solution pour évaluer une expression booléenne, elle fonctionne suivant ce schéma :

condition ? (si vrai) : (sinon)

Un exemple :

Début de l'exemple
Fin de l'exemple


a est inférieur à b, donc (a < b) est vraie et l’expression à gauche des deux-points est exécutée ; si (a < b) avait eu la valeur false, on aurait exécuté l’expression à la droite des deux-points.

Associations de conditions

[modifier | modifier le wikicode]

Si votre programme a un comportement complexe basé sur des combinaisons de conditions, il se peut que vous ayez à écrire quelque chose de ce genre :

Début de l'exemple
Fin de l'exemple


Il existe un moyen de simplifier ce genre de conditions multiples, on peut tester deux conditions (ou plus) à la fois de cette manière :

Début de l'exemple
Fin de l'exemple



On peut aussi s'assurer qu'au moins une des conditions est vérifiée :

Début de l'exemple
Fin de l'exemple




Pour améliorer la lisibilité du code, il est possible de remplacer && par le mot-clé and et || par or.

Ici, nous n'avons considéré que deux conditions, mais vous pouvez en combiner autant que vous voulez.

Début de l'exemple
Fin de l'exemple