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.
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ă.
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.
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ă 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?
Î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
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
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
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]
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
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
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.)