Ruby for Newbies villkorliga uttalanden och loopar

Ruby är ett av de mest populära språk som används på webben. Vi har startat en ny screencast-serie här på Nettuts + som kommer att introducera dig till Ruby, liksom de stora ramar och verktyg som följer med Ruby-utvecklingen. I det här kapitlet ser vi på hur villkorade uttalanden och loopar fungerar i Ruby.


Komma ikapp

  • Del 1: Installera Ruby och Komma igång
  • Del 2: Variabler, datatyper och filer 
  • Del 3: Arbeta med klasser
  • Del 4: Conditionals och Loops

Visa skärmdump


Villkorlig # 1: Om uttalande

Om uttalandet är en av de första typerna av förgrening du lär dig när du programmerar. Du kan gissa vad det betyder: om det är sant, gör en sak; om inte, gör något annat. I Ruby är dessa ganska lätta att skriva:

namn = "Andrew" om namn == "Andrew" sätter "Hello Andrew" slutet om namnet == "Andrew" sätter "Hello Andrew" annars sätter "Hej någon annan" slutar

Efter sökordet om, kod i ditt villkorat uttalande. Därefter kommer koden att utföras om villkoret returneras sant. Du stänger uttalandet med slutet nyckelord. Om du vill kan du klämma en annan uttalande där inne, vilket förutsägbart kommer att utföras om villkoret är felaktigt.

elsif

Det är inte svårt att kontrollera efter flera villkor. Ställ bara så många elsif uttalanden som du vill ha mellan om och annan uttalanden. Ja det är elsif, ett äktenskap av annan och om.

order = : size => "medium" def make_medium_cofee sätter "making medium statement" avsluta #assume andra funktioner om order [: size] == "small" make_small_coffee; elsif order [: size] == "medium" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; annars make_coffee; slutet

Som jag nämnde kan du få så många elsif villkor och deras motsvarande kodblock som du vill.

Uttalanden mot uttryck

De flesta programmeringsspråk gör skillnad mellan uttalanden och uttryck. En uttalande är en kodkonstruktion som inte utvärderar till ett visst värde. Ett uttryck är en kodkonstruktion gör returnera ett värde. Till exempel kallar en funktion ett uttryck, eftersom det returnerar ett värde. Men om ett uttalande är exakt det, ett uttalande, eftersom det inte returnerar ett värde. Det betyder att du inte kan göra detta i JavaScript:

message = if (someTruthyValue) "detta är sant";  annars "detta är falskt"; 

Självklart kan du inte göra detta eftersom if-satsen inte returnerar ett värde som du kan tilldela meddelande.

Du kan dock göra detta med Ruby, eftersom uttalanden är egentligen uttryck, vilket betyder att de returnerar ett värde. Så vi kan göra det här

meddelande = om order [: size] == "small" "gör en liten" elsif order [: size] == "medium" "gör ett medium" annars "gör kaffe" slut

Vilket koden som helst exekveras blir värdet av meddelande.

Om som modifierare

Om du inte har något elsif eller annan klausuler, och ditt if-utlåtande har bara en rad, du kan använda den som modifierare till en "normal" linje.

sätter "gör kaffe" om customer.would_like_coffee?

Villkorlig # 2: Om inte uttalande

I de flesta programmeringsspråk vill vi vända tillbaka det betingade uttrycket, vi måste negera det, vanligtvis med banget (!) operatör.

engine_on = true if! engine_on # betyder "om inte engine_on" sätter "service engine" # should not be put, eftersom "inte engine_on" är falsk ände

Ruby har emellertid ett riktigt trevligt såvida inte operatör, som hindrar oss från att behöva göra det, samtidigt som vi ger oss mycket mer läsbar kod:

om inte engine_on # "såvida inte engine_on" är bättre än "om inte engine_on" "servicing engine" slutar

Precis som om, du kan använda såvida inte som modifierare:

sätter "service engine" såvida inte motor_on

Villkorlig # 3: Fall / När uttalande

Om du har många alternativ att arbeta igenom, använder du Om / elsif / annat kan vara något wordy. Prova ärendet.

timme = 15 fall när timme < 12 puts "Good Morning" when hour > 12 && timme < 17 puts "Good Afternoon" else puts "Good Evening" end

Det är kinda-sorta-kanske som a switch fallet uttalande i JavaScript (eller andra språk), förutom att det inte finns någon variabel du utvärderar. Inuti fall / slut nyckelord, du kan lägga så många när uttalanden som du skulle vilja. Följ det här när genom det villkorliga uttrycket, och sedan går kodens linjer efter det. Precis som if-uttalandet är fallet uttalandet verkligen ett uttryck, så du kan tilldela det ett uttryck och fånga ett returvärde.

timme = 15 meddelande = fall när timme < 12 "Good Morning" when hour > 12 && timme < 17 "Good Afternoon" else "Good Evening" end puts message

Bryta upp uttryck

Om du är bekant med JavaScript vet du att blocken av kod i ett if-uttalande är omgivna av lockiga hängslen. Vi gör det inte i Ruby, så det kan tyckas att Ruby är beroende av vittområdet. Ingenting kan vara längre från sanningen (ta det, pythonistas :)).

Om vi ​​vill skriva dina uttalanden som en-liners, måste du skilja de olika delarna av de uttalandena ... men hur? Tja, du kan använda halvkolonor:

om namnet == "Andrew"; some_code; annan; some_code; slutet

Om du inte gillar utseendet på det (vilket jag inte gör) kan du lägga sökordet sedan mellan de villkorliga uttrycken och kodens linje.

om namnet == "Andrew" då sode_code; slutet

Detta fungerar också för ett fallutlåtande.

fallet när x> 20; sätter "<20" when x < 20 then puts "<20" end

Loop # 1: While Loop

Så, det är villkorliga uttalanden (jag menar, uttryck). Vad sägs om loopar? Låt oss titta på medan slingorna först.

En stundslinga fortsätter att utföras tills det angivna tillståndet är falskt:

ar = ["John", "George", "Paul", "Ringo"] i = 0 medan arr [i] sätter ar [i] i + = 1 slutet

Här slingar vi över en matris; när arr [i] returnerar false (vilket betyder att det inte finns några objekt kvar i matrisen), kommer slingan sluta att köras. Inuti slingan skriver vi ut det aktuella objektet i matrisen, och de lägger till en till vår inkrementvariabel.

Du kan också använda medan som modifierare

ar = ["John", "George", "Paul", "Ringo"] i = -1 sätter ar [i + = 1] medan arr [i]

Loop # 2: Till Loop

Precis som såvida inte är motsatsen till om, fram tills är motsatsen till medan. Det fortsätter att slinga tills tillståndet är sant:

days_left = 7; tills days_left == 0 sätter "det finns fortfarande # days_left i veckan" days_left - = 1 end

Och det är självklart också en modifierare.

days_left = 8 sätter "det finns fortfarande # days_left - = 1 i veckan" tills days_left == 1

Loop # 3: För Loop

Ja Ruby har en för loop. Nej, det är inte som för loop på andra språk. Det verkar som en slinga för att slingra över värdena i en array eller hash:

ar = ["John", "George", "Paul", "Ringo"] för objekt i aren sätter punktänden

Om du loopar över en hash kan du använda två variabla namn, en för nyckeln och en för värdet:

joe = : name => "Joe",: ålder => 30,: jobb => "rörmokare" för nyckel, val i joe sätter "# key är # val" slutet

Det är allt!

Jag hoppas att du njuter av vår Ruby for Newbies Screencast-serie. Om det finns något du skulle vilja se, låt mig veta i kommentarerna! (Och om du inte tittar på videoklippen, borde du vara. Det finns bara en screencast-bonus i slutet av var och en.)