< Ruby
fin de la boite de navigation du chapitre

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

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.

Exemple
age = 17

if(age >= 18)
  then puts "vous êtes majeur"
  else puts "vous êtes mineur"
end
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 :

Exemple
age = 17

if(age < 18)
  then puts "vous êtes mineur"
end
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 :

Exemple
if(age >= 18) then puts "vous êtes majeur" # ici, then est obligatoire
  else puts "vous êtes mineur"
end

if(age >= 18) # retour à la ligne
  puts "vous êtes majeur" # ici, then est facultatif
  else puts "vous êtes mineur"
end
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 :

Exemple
estMajeur = false

if (estMajeur)
  then puts "Vous êtes majeur"
  else puts "Vous êtes mineur"
end
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 :

Exemple
puts "vous êtes majeur" if(estMajeur)
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

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

Exemple
a = 5 ; b = 4 ; c = 7

if (a < b) # false
 #
elsif (a < c) # true
 #
elsif (b < c) # true
 #
else
 #
end
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.
Propriété

Vous pouvez utiliser autant de elsif que vous voulez.


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

La condition unless

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

Exemple
unless 1>3 # condition fausse donc exécutée
 puts "ok"
end
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 :

Exemple
puts "vous êtes mineur" unless(estMajeur)
Fin de l'exemple


L'instruction case

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 :

Exemple
z = 4

case z
  when 1 # dans le cas où z = 1
   print "z = 1"
  when "maison" # dans le cas ou z contient la chaîne "maison"
   print "z = 'maison'"
  when z = 4
   print "z = 4"
end
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

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

condition ? (si vrai) : (sinon)

Un exemple :

Exemple
a = 4 ; b = 7

(a < b) ? (puts "a < b") : (puts "a >= b") # => a < b
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

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 :

Exemple
if(a < b)
  if(b > c)
    #
  end
end
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 :

Exemple
if(a < b && b > c)
  #
end
Fin de l'exemple


Propriété

(a < b && b > c) vaut true si (a < b) et (b > c) sont vraies en même temps.


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

Exemple
if(a < b || c > a)
  #
end
Fin de l'exemple


Propriété

Il suffit que (a < b) ou (c > a) soit vraie (ou les deux) pour que (a < b || c > a) soit vraie.


Propriété

Vous pouvez modifier l’ordre des priorités en regroupant certaines conditions entre parenthèses, comme pour les opérations arithmétiques.


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.

Exemple
if (a && b > c || (c && d && e))
 #
end
Fin de l'exemple


Cet article est issu de Wikiversity. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.