# Ruby/Conditions

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.
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 :
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 :
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 :
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 :
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).
* (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.
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 :
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 :

## 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 :
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 :
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 :
Il existe un moyen de simplifier ce genre de conditions multiples, on peut tester deux conditions (ou plus) à la fois de cette manière :
(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 :
Il suffit que (a < b) ou (c > a) soit vraie (ou les deux) pour que (a < b || c > a) soit vraie.
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.
| Méthodes | Tableaux et hachages |