Dans Ruby, il est possible d'effectuer plusieurs actions en fonction d'une série de conditions, en utilisant le mot magique if. Voici un exemple:
if ville == "Toronto" age_legal_alcool = 19 else age_legal_alcool = 21 end
Ce qui veut dire:
Ruby permet de distinguer deux états différents d'une expression:
vrai (true)
faux (false)
Le meilleur moyen d'illustrer cette théorie est d'expérimenter quelques exemples. Comme toujours, démarrez IRB et entrez les commandes suivantes:
L'instruction if évalue si une expression quelconque (par exemple, ville == "Toronto") est soit vraie (true), soit fausse (false) et ensuite agit en conséquence.
Avertissement | |
---|---|
Notez bien la différence entre les opérateurs = et ==:
|
Voici une liste regroupant la plupart des opérateurs conditionnels:
Tableau 2.1. Opérateurs conditionnels
Opérateur | Effet |
---|---|
== | égal à |
!= | n'est pas égal à |
> | est plus grand que |
< | est plus petit que |
>= | est plus grand ou égal à |
<= | est plus petit ou égal à |
Comment ces opérateurs se comportent-ils avec des chaînes de caractères? L'opérateur == vérifie si deux chaînes sont exactement identiques. Les autres opérateurs se basent sur la table ASCII pour produire et renvoyer un état de comparaison.
Note | |
---|---|
Qu'est-ce que cette table ASCII? Il s'agit d'une table contenant tous les caractères pouvant être générés par le clavier. Ces caractères sont triés dans cet ordre:
|
Note du traducteur | |
---|---|
ASCII: « American Standard Code for Information Interchange ». Ce code permet d'échanger des informations entre des ordinateurs construits par différentes entreprises. Il a été conçu pour la langue anglaise à la base. Néanmoins, il ne convient pas pour les autres langues utilisant des caractères spéciaux (comme le japonais, par exemple). Pour remédier à ce problème, Ruby utilise un système d'encodage nommé UTF8, qui permet de combiner des caractères ASCII (codés sur un octet) et des symboles spéciaux (codés sur deux octets). |
Maintenant, démarrez IRB et entrez ceci:
Astuce | |
---|---|
Avez-vous remarqué comment IRB peut clarifier les choses? Vous devriez vous habituer à essayer d'abord certaines idées dans IRB. C'est un outil génial, utilisez-le! |
L'instruction elsif vous permet de rajouter plus d'une condition dans votre expression. Prenez ceci par exemple:
if age >= 60 puts "Prix senior" elsif age >= 14 puts "Prix adulte" elsif age >= 2 puts "Prix enfant" else puts "Gratuit!" end
Essayons de comprendre ceci:
Ruby exécutera cette séquence de conditions une par une. Uniquement la première condition vraie sera exécutée. Vous pouvez rajouter autant de elsif que vous désirez.
Pour rendre les choses plus simple à comprendre, nous allons rajouter ces conditions dans un programme. Il devra demander l'age de l'utilisateur, et ensuite afficher le prix correspondant à cet age:
Ce programme devrait se comporter comme ceci:
Avertissement | |
---|---|
Soyez bien conscient de l'ordre dans lequel vous rajoutez vos conditions avec elsif. Seulement le code associé à la première condition évaluée comme étant «vraie» sera exécuté. Cet exemple illustre bien ce danger: age = 21 if age > 5 puts "Plus vieux que 5 ans" elsif age > 10 puts "Plus vieux que 10 ans" elsif age > 20 puts "Plus vieux que 20 ans" elsif age > 30 puts "Plus vieux que 30 ans" end
En lisant ce code rapidement, il semblerait logique que le programme affiche "Plus vieux que 20 ans" à l'écran. Il n'en est rien! Comme dit plus haut, seule la première condition valide remporte la mise. Le programme affichera "Plus vieux que 5 ans". Voici la bonne méthode à utiliser: age = 21 if age > 30 puts "Plus vieux que 30 ans" elsif age > 20 puts "Plus vieux que 20 ans" elsif age > 10 puts "Plus vieux que 10 ans" elsif age > 5 puts "Plus vieux que 5 ans" end
|
Triez ces caractères en utilisant l'ordre ASCII:
2, u, A, 4, w, f, R, y
Souvenez-vous, la table ASCII contient tous les caractères pouvant être générés par le clavier. Utilisez IRB pour déterminer ou se trouve le caractère «?» (point d'interrogation) ?
Avant 0 ?
Après 9 mais avant A ?
Après Z mais avant a ?
Après z ?
En se basant sur la question précédente, écrivez un programme Ruby qui accepte un caractère quelconque au clavier. Il devra afficher un des messages suivants:
x se situe avant 0
x se situe entre 9 et A
x se situe entre Z et a
x se situe après z