Ruby for Newbies Déclarations et boucles conditionnelles

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


Rattraper

  • Partie 1: Installation de Ruby et prise en main
  • Partie 2: Variables, types de données et fichiers 
  • Partie 3: Travailler avec des classes
  • Partie 4: Conditions et boucles

Voir le Screencast


Condition 1: déclaration si

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.

elsif

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.

Déclarations vs. Expressions

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 en tant que modificateur

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?

Condition n ° 2: Sauf déclaration

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

Condition n ° 3: Déclaration de cas / quand

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

Briser les expressions

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

Boucle N ° 1: Boucle While

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]

Boucle n ° 2: Jusqu'à la boucle

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

Boucle n ° 3: pour la boucle

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

C'est tout!

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