Ruby est l’un des langages les plus utilisés sur le Web. Nous avons lancé une nouvelle série de screencast ici sur Nettuts + qui vous présentera Ruby, ainsi que les formidables cadres et outils associés au développement de Ruby. Dans ce chapitre, nous verrons comment fonctionnent les instructions conditionnelles et les boucles dans Ruby..
L'instruction if est l'un des premiers types de branchement appris lors de la programmation. Vous pouvez deviner ce que cela signifie: si cela est vrai, faites une chose; si ce n'est pas le cas, faites autre chose. En Ruby, ceux-ci sont assez faciles à écrire:
name = "Andrew" si name == "Andrew" met "Hello Andrew" à la fin si name == "Andrew" met "Hello Andrew" à la place "Hello quelqu'un d'autre".
Après le mot clé si
, code dans votre déclaration conditionnelle. Ensuite vient le code à exécuter si la condition retourne true. Vous fermez la déclaration avec le fin
mot-clé. Si vous le souhaitez, vous pouvez presser un autre
déclaration à l'intérieur, qui s'exécutera de manière prévisible si la condition est fausse.
Il n'est pas difficile de vérifier plusieurs conditions. Il suffit de mettre autant elsif
déclarations que vous voudriez entre le si
et autre
déclarations. Oui cela est elsif
, un mariage de autre
et si
.
order = : size => "medium" def make_medium_cofee met "une déclaration moyenne" end #assume d'autres fonctions si order [: size] == "petit" make_small_coffee; elsif order [: size] == "moyen" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; sinon make_coffee; fin
Comme je l'ai mentionné, vous pouvez avoir autant de elsif
les conditions et les blocs de code correspondants que vous voulez.
La plupart des langages de programmation font une distinction entre les déclarations et les expressions. Une instruction est une construction de code qui ne s’évalue pas à une certaine valeur. Une expression est une construction de code Est-ce que renvoyer une valeur. Par exemple, l'appel d'une fonction est une expression, car elle renvoie une valeur. Cependant, une instruction if est exactement cela, une instruction, car elle ne renvoie pas de valeur. Cela signifie que vous ne pouvez pas faire cela dans votre JavaScript:
message = if (someTruthyValue) "ceci est vrai"; else "c'est faux";
De toute évidence, vous ne pouvez pas faire cela car l'instruction if ne renvoie pas une valeur que vous pouvez affecter à message
.
Cependant, vous pouvez le faire avec Ruby, car les instructions sont en fait des expressions, ce qui signifie qu'elles renvoient une valeur. Donc on peut faire ça
message = if order [: size] == "petit" "faire un petit" elsif order [: size] == "moyen" "faire un média" sinon "faire du café" fin
Le bloc de code exécuté deviendra la valeur de message
.
Si vous n'en avez pas elsif
ou autre
clauses, et votre instruction if n’a qu’une ligne, vous pouvez l’utiliser comme modificateur d’une ligne «normale».
met "faire du café" si client.would_like_coffee?
Dans la plupart des langages de programmation, nous voulons inverser le retour de l’expression conditionnelle, nous devons le nier, généralement avec le bang (!
) opérateur.
engine_on = true si! engine_on # signifie "sinon Engine_on" met "service de maintenance" # ne doit pas être mis, car "not engine_on" est une fausse fin
Cependant, Ruby a une très belle sauf si
opérateur, cela nous évite d’avoir à le faire, tout en nous donnant un code beaucoup plus lisible:
à moins que engine_on # "à moins que engine_on" soit meilleur que "sinon moteur_on" fin
Juste comme si
, vous pouvez utiliser sauf si
en tant que modificateur:
met "servicing engine" sauf si engine_on
Si vous avez plusieurs options à utiliser, utilisez si / elsif / else
pourrait être un peu verbeuse. Essayez la déclaration de cas.
heure = 15 cas où heure < 12 puts "Good Morning" when hour > 12 heures < 17 puts "Good Afternoon" else puts "Good Evening" end
C'est un peu comme une sorte commutateur / boîtier
déclaration en JavaScript (ou dans d’autres langues), sauf qu’il n’ya pas une variable que vous évaluez. À l'intérieur de cas / fin
mots-clés, vous pouvez mettre autant de quand
déclarations que vous voudriez. Suivre ça quand
par l'expression conditionnelle, puis les lignes de code vont après. Tout comme l'instruction if, l'instruction case est en réalité une expression. Vous pouvez donc l'affecter à une expression et capturer une valeur renvoyée..
heure = 15 message = cas où heure < 12 "Good Morning" when hour > 12 heures < 17 "Good Afternoon" else "Good Evening" end puts message
Si vous connaissez JavaScript, vous saurez que les blocs de code dans une instruction if sont entourés d'accolades. Nous ne faisons pas cela en Ruby, il peut donc sembler que Ruby est dépendant des espaces. Rien ne pourrait être plus éloigné de la vérité (prenez cela, pythonistas :)).
Si nous voulons écrire vos déclarations en une seule ligne, nous devons séparer les différentes parties des déclarations… mais comment? Eh bien, vous pouvez utiliser des points-virgules:
si nom == "Andrew"; some_code; autre; some_code; fin
Si vous n'aimez pas son look (ce que je n'aime pas), vous pouvez mettre le mot clé puis
entre les expressions conditionnelles et la ligne de code.
Si name == "Andrew", alors sode_code; fin
Cela fonctionne également pour une déclaration de cas.
cas où x> 20; met "<20" when x < 20 then puts "<20" end
Donc, ce sont des déclarations conditionnelles (je veux dire des expressions). Qu'en est-il des boucles? Regardons d'abord les boucles pendant.
Une boucle while continuera à s'exécuter jusqu'à ce que la condition indiquée soit fausse:
arr = ["John", "George", "Paul", "Ringo"] i = 0 alors qu'arr [i] met arr [i] i + = 1 end
Ici, nous passons en boucle sur un tableau; quand arr [i]
renvoie false (ce qui signifie qu'il ne reste aucun élément dans le tableau), la boucle cessera de s'exécuter. À l'intérieur de la boucle, nous imprimons l'élément en cours dans le tableau et les ajoutons à notre variable d'incrément..
Vous pouvez aussi utiliser tandis que
comme modificateur
arr = ["John", "George", "Paul", "Ringo"] i = -1 met arr [i + = 1] tant que arr [i]
Juste comme sauf si
est le contraire de si
, jusqu'à ce que
est le contraire de tandis que
. Il continuera à boucler jusqu'à ce que la condition soit vraie:
days_left = 7; jusqu’à days_left == 0 met "il y a encore # days_left dans la semaine" days_left - = 1 end
Et bien sûr, c'est aussi un modificateur.
days_left = 8 met "il y a encore # days_left - = 1 dans la semaine" jusqu'à days_left == 1
Oui, Ruby a une boucle pour. Non, ce n'est pas comme la boucle for dans d'autres langues. Il agit comme une boucle foreach, pour parcourir les valeurs d'un tableau ou d'un hachage:
arr = ["John", "George", "Paul", "Ringo"] pour l'article dans arr met item end
Si vous passez en boucle sur un hachage, vous pouvez utiliser deux noms de variable, un pour la clé et un pour la valeur:
joe = : name => "Joe",: age => 30,: job => "plombier" pour la clé, val dans joe met "# clé est # val" fin
J'espère que vous appréciez notre série Ruby for Newbies Screencast. Si vous souhaitez voir quelque chose, faites-le-moi savoir dans les commentaires! (Et si vous ne regardez pas les vidéos, vous devriez le faire. Il y a un bonus de lecture vidéo à la fin de chaque vidéo.)