Ruby pentru începători Declarații condiționate și bucle

Ruby este una dintre cele mai populare limbi folosite pe web. Am inceput o noua serie de screencast-uri aici pe Nettuts +, care va va prezenta Ruby, precum si marile cadre si instrumente care merg impreuna cu dezvoltarea Ruby. În acest capitol, vom analiza modul în care afirmațiile condiționale și buclele funcționează în Ruby.


Ajunge din urmă

  • Partea 1: Instalarea Ruby și începutul
  • Partea 2: Variabile, tipuri de date și fișiere 
  • Partea 3: Lucrul cu clasele
  • Partea 4: Condiții și bucle

Vizualizați ecranul


Condiționarea # 1: Dacă declarația

Instrucțiunea if este unul dintre primele tipuri de ramificații pe care le învățați la programare. Puteți ghici ce înseamnă: dacă este adevărat, faceți un lucru; dacă nu este, faceți altceva. În Ruby, acestea sunt destul de ușor de scris:

nume = "Andrew" dacă numele == "Andrew" pune "Hello Andrew" sfârșit dacă numele == "Andrew" pune "Hello Andrew" altcineva pune "Hello someone else"

După cuvântul cheie dacă, cod în declarația dvs. condiționată. După aceasta vine codul care trebuie executat dacă condiția revine la adevărat. Închideți declarația cu Sfârșit cuvinte cheie. Dacă doriți, puteți stoarce un altfel declarație acolo, care va executa în mod previzibil dacă condiția este falsă.

elsif

Nu este greu să verifici condițiile multiple. Doar puneți la fel de multe elsif declarațiile pe care le doriți între dacă și altfel declarații. Da, asta e elsif, o căsătorie de altfel și dacă.

com = : size => "mediu" def make_medium_cofee pune "a face declarația medie" sfârșit #assume alte funcții dacă comanda [: size] == "small" make_small_coffee; elsif comanda [: size] == "mediu" make_medium_coffee; elsif comanda [: dimensiune] == "mare" make_large_coffee; altceva make_coffee; Sfârșit

După cum am menționat, puteți avea cât mai multe elsif condițiile și blocurile de cod corespunzătoare, după cum doriți.

Declarații vs. Expresii

Majoritatea limbajelor de programare fac distincția între declarații și expresii. O declarație este un construct de cod care nu evaluează la o anumită valoare. O expresie este un construct de cod face returnați o valoare. De exemplu, apelarea unei funcții este o expresie, deoarece returnează o valoare. Cu toate acestea, o instrucțiune if este exact acea, o instrucțiune, deoarece nu întoarce o valoare. Aceasta înseamnă că nu puteți face acest lucru în JavaScript:

message = if (someTruthyValue) "acest lucru este adevărat";  altceva "acesta este fals"; 

Evident, nu puteți face acest lucru, deoarece instrucțiunea if nu întoarce o valoare pe care o puteți atribui mesaj.

Cu toate acestea, puteți face acest lucru cu Ruby, deoarece declarațiile sunt de fapt expresii, ceea ce înseamnă că acestea oferă o valoare. Așa că putem face asta

mesaj = daca comanda [: dimensiune] == "mic" "a face un mic" comanda elsif [: size] == "medium" "a face un mediu"

Orice bloc de cod este executat va deveni valoarea lui mesaj.

Dacă este ca un Modificator

Dacă nu aveți niciunul elsif sau altfel clauzele și instrucțiunea dvs. dacă are doar o singură linie, o puteți folosi ca modificator la o linie "normală".

pune "a face cafea" dacă client.would_like_coffee?

Condiționarea # 2: cu excepția cazului în care declarația

În majoritatea limbajelor de programare, dorim să inversăm revenirea expresiei condiționale, trebuie să o negăm, de obicei cu bangul (!) operator.

engine_on = true dacă! motor_on # înseamnă "dacă nu motorul" pune "motor de service" # nu ar trebui pus, deoarece "motor_on" nu este sfârșitul fals

Cu toate acestea, Ruby are un foarte frumos dacă nu operator, care ne împiedică să facem acest lucru, oferindu-ne un cod mult mai ușor de citit:

cu excepția cazului în care motorul "#", cu excepția cazului în care motorul "este mai bun decât motorul de service" dacă nu este motor "

Ca și cum dacă, poți să folosești dacă nu ca modificator:

pune "motor de service", cu excepția cazului în care motorul

Condiționat # 3: Cauza / Când Declarație

Dacă aveți o mulțime de opțiuni pentru a lucra prin, folosind în cazul în care / elsif / altceva ar putea fi oarecum proeminent. Încercați declarația cazului.

oră = 15 caz în ceas < 12 puts "Good Morning" when hour > 12 && oră < 17 puts "Good Afternoon" else puts "Good Evening" end

Este cam sorta - poate ca o comutator / caz în JavaScript (sau în alte limbi), cu excepția faptului că nu există nici o variabilă pe care o evaluați. În interiorul caz / terminare cuvinte cheie, puteți pune cât mai multe cand declarații după cum doriți. Urmați asta cand de expresia condiționată și apoi liniile de cod merg după ea. La fel ca instrucțiunea if, instrucțiunea caz este într-adevăr o expresie, astfel încât să o puteți atribui unei expresii și să capturați o valoare returnată.

ora = 15 mesaj = cazul când ora < 12 "Good Morning" when hour > 12 && oră < 17 "Good Afternoon" else "Good Evening" end puts message

Breaking Expressions

Dacă sunteți familiarizat cu JavaScript, veți ști că blocurile de cod dintr-o instrucțiune if sunt înconjurate de bretele curbate. Nu facem asta în Ruby, așa că poate părea că Ruby depinde de spațiul alb. Nimic nu poate fi mai departe de adevăr (ia asta, pythonistas :)).

Dacă vrem să vă scrieți afirmațiile dvs. ca pe o singură linie, trebuie să separați diferitele părți ale declarațiilor ... dar cum? Poți folosi semi-colonii:

dacă numele == "Andrew"; some_code; altceva; some_code; Sfârșit

Dacă nu vă place aspectul de care (care nu am), puteți pune cuvântul cheie atunci între expresiile condiționate și linia de cod.

dacă numele == "Andrew" apoi sode_code; Sfârșit

Acest lucru funcționează și pentru o declarație de caz.

cazul în care x> 20; pune "<20" when x < 20 then puts "<20" end

Buclă # 1: în timp ce buclă

Deci, acestea sunt afirmații condiționate (adică expresii). Ce zici de bucle? Să ne uităm mai întâi la bucle.

O buclă în timp va continua să se execute până când condiția declarată este falsă:

arr = ["John", "George", "Paul", "Ringo"] i = 0 în timp ce arr [i]

Aici ne întoarcem peste o matrice; cand arr [i] returnează false (ceea ce înseamnă că nu există elemente rămase în matrice), bucla se va opri din execuție. În interiorul buclă, imprimăm elementul curent din matrice și le adăugăm la variabila noastră de incrementare.

Puteți utiliza, de asemenea in timp ce ca modificator

arr = ["John", "George", "Paul", "Ringo"] i = -1 pune arr [i + = 1]

Buclă # 2: până la buclă

Ca și cum dacă nu este opusul dacă, pana cand este opusul in timp ce. Acesta va continua să bucle până când condiția este adevărată:

days_left = 7; până când days_left == 0 pune "încă mai sunt # days_left în săptămână" days_left - = 1 end

Și, bineînțeles, este și un modificator.

days_left = 8 pune "încă mai există # days_left - = 1 în săptămână" până la days_left == 1

Buclă # 3: Pentru buclă

Da, Ruby are o buclă. Nu, nu este ca o buclă pentru alte limbi. Se comportă ca o buclă de foreach, pentru looping peste valorile într-o matrice sau hash:

arr = ["John", "George", "Paul", "Ringo"] pentru elementul din arr

Dacă introduceți buclă peste un hash, puteți utiliza două nume de variabile, una pentru cheie și una pentru valoare:

joe = : name => "Joe",: age => 30,: job => "plumber" pentru cheie, val în joe pune "# key is # val

Asta e!

Sper că vă bucurați de seria Ruby for Newbies Screencast. Dacă este ceva ce doriți să vedeți, spuneți-mi în comentariile! (Și dacă nu urmăriți videoclipurile, ar trebui să fiți. Există un bonus de screencast-only la sfârșitul fiecăruia.)

Cod