Ruby er et av de mest populære språkene som brukes på nettet. Vi har startet en ny screencast-serie her på Nettuts + som vil introdusere deg til Ruby, samt de flotte rammene og verktøyene som følger med Ruby-utviklingen. I dette kapitlet ser vi på hvordan betingede utsagn og looper virker i Ruby.
If-setningen er en av de første typer forgrening du lærer når du programmerer. Du kan gjette hva det betyr: hvis dette er sant, gjør en ting; hvis ikke, gjør noe annet. I Ruby er disse ganske enkle å skrive:
navn = "Andrew" hvis navnet == "Andrew" setter "Hello Andrew" slutten hvis navnet == "Andrew" setter "Hello Andrew" ellers setter "Hei noen andre" slutter
Etter søkeordet hvis
, kode i betinget utsagn. Etter det kommer koden til å utføres hvis tilstanden returnerer sann. Du lukker uttalelsen med slutt
søkeord. Hvis du vil, kan du klemme en ellers
uttalelse der inne, som vil forutsigbart utføre hvis tilstanden er feil.
Det er ikke vanskelig å se etter flere forhold. Bare sett så mange elsif
uttalelser som du vil ha mellom hvis
og ellers
uttalelser. Ja, det er det elsif
, et ekteskap av ellers
og hvis
.
ordre = : size => "medium" def make_medium_cofee setter "making medium statement" end #assume andre funksjoner hvis rekkefølge [: size] == "small" make_small_coffee; elsif rekkefølge [: size] == "medium" make_medium_coffee; elsif rekkefølge [: size] == "large" make_large_coffee; ellers make_coffee; slutt
Som jeg nevnte, kan du få så mange elsif
forhold og deres tilsvarende kodeblokker som du vil.
De fleste programmeringsspråk skiller mellom setninger og uttrykk. Et utsagn er en kodekonstruksjon som ikke vurderer til en viss verdi. Et uttrykk er en kode konstruksjon gjør returnere en verdi. For eksempel kalles en funksjon et uttrykk, fordi det returnerer en verdi. Imidlertid er en hvis erklæring akkurat det, en erklæring, fordi den ikke returnerer en verdi. Dette betyr at du ikke kan gjøre dette i JavaScript:
message = if (someTruthyValue) "dette er sant"; ellers "dette er falskt";
Åpenbart kan du ikke gjøre dette fordi if-setningen ikke returnerer en verdi du kan tilordne budskap
.
Du kan imidlertid gjøre dette med Ruby, fordi setninger er faktisk uttrykk, noe som betyr at de returnerer en verdi. Så vi kan gjøre dette
beskjed = hvis rekkefølge [: størrelse] == "liten" "lage en liten" elsif-ordre [: size] == "medium" "lage et medium" annet "lage kaffe" slutten
Uansett hvilken koden som kjøres, blir verdien av budskap
.
Hvis du ikke har noen elsif
eller ellers
klausuler, og hvis setningen har bare en linje, kan du bruke den som en modifikator til en "normal" linje.
setter "å lage kaffe" hvis kunde?
I de fleste programmeringsspråk vil vi vende tilbake det betingede uttrykket, vi må negere det, vanligvis med banget (!
) operatør.
engine_on = true hvis! engine_on # betyr "hvis ikke engine_on" setter "service engine" #should ikke bli satt, fordi "ikke engine_on" er falsk ende
Imidlertid har Ruby en veldig fin med mindre
operatør, som holder oss fra å måtte gjøre det, samtidig som vi gir oss mye mer lesbar kode:
med mindre engine_on # "med mindre engine_on" er bedre enn "hvis ikke engine_on" "service engine" slutter
Akkurat som hvis
, du kan bruke med mindre
som modifikator:
setter "service engine" med mindre motor_on
Hvis du har mange muligheter til å jobbe gjennom, bruker du hvis / elsif / else
kan være litt ordentlig. Prøv saken setningen.
time = 15 tilfelle når time < 12 puts "Good Morning" when hour > 12 && time < 17 puts "Good Afternoon" else puts "Good Evening" end
Det er ganske sorta-kanskje som a bryter / case
setning i JavaScript (eller andre språk), bortsett fra at det ikke er noen variabel du vurderer. Inne i case / end
søkeord, du kan sette så mange når
uttalelser som du vil. Følg det når
ved det betingede uttrykket, og deretter går kodelinjene etter det. Akkurat som if-setningen er saksoppstillingen virkelig et uttrykk, så du kan tilordne det til et uttrykk og fange en returverdi.
time = 15 melding = tilfelle når time < 12 "Good Morning" when hour > 12 && time < 17 "Good Afternoon" else "Good Evening" end puts message
Hvis du er kjent med JavaScript, vil du vite at blokkene med kode i en if-setning er omgitt av krøllete braces. Vi gjør ikke dette i Ruby, så det kan virke som Ruby er avhengig av hvite rom. Ingenting kunne være lenger fra sannheten (ta det, pythonistas :)).
Hvis vi vil skrive dine uttalelser som en-liners, må du skille de ulike delene av uttalelsene ... men hvordan? Vel, du kan bruke halvkolonner:
hvis navnet == "Andrew"; some_code; ellers; some_code; slutt
Hvis du ikke liker utseendet til det (som jeg ikke gjør), kan du sette søkeordet deretter
mellom de betingede uttrykkene og kodenes linje.
hvis navnet == "Andrew" så sode_code; slutt
Dette fungerer også for en saksoppgave.
tilfelle når x> 20; setter "<20" when x < 20 then puts "<20" end
Så, det er betingede uttalelser (jeg mener, uttrykk). Hva med sløyfer? La oss se på mens looper først.
En stundsløyfe fortsetter å utføres til tilstanden oppgitt er feil:
ar = ["John", "George", "Paul", "Ringo"] i = 0 mens arr [i] setter arr [i] i + = 1 ende
Her slår vi over et array; når arr [i]
returnerer false (betyr at det ikke er noen gjenstander igjen i arrayet), vil sløyfen slutte å utføres. Inne i løkken skriver vi ut det nåværende elementet i matrisen, og de legger til en til vår inkrementvariabel.
Du kan også bruke samtidig som
som en modifikator
ar = ["John", "George", "Paul", "Ringo"] i = -1 setter arr [i + = 1] mens arr [i]
Akkurat som med mindre
er motsatt av hvis
, før
er motsatt av samtidig som
. Det vil fortsette å løpe til tilstanden er sant:
days_left = 7; til days_left == 0 setter "det er fortsatt # days_left i uken" days_left - = 1 end
Og selvfølgelig er det også en modifikator.
days_left = 8 puts "det er fortsatt # days_left - = 1 i uken" til days_left == 1
Ja, Ruby har en forløp. Nei, det er ikke som for loop på andre språk. Det virker som en foreach loop, for looping over verdiene i en matrise eller hash:
arr = ["John", "George", "Paul", "Ringo"] for element i arr setter elementets slutt
Hvis du looping over en hash, kan du bruke to variable navn, en for nøkkelen og en for verdien:
joe = : name => "Joe",: alder => 30,: jobb => "rørlegger" for nøkkel, val i joe legger "# key er # val" slutten
Jeg håper du nyter vår Ruby for Newbies Screencast-serie. Hvis det er noe du vil se, gi meg beskjed i kommentarene! (Og hvis du ikke ser på videoene, bør du være. Det er bare en screencast-bonus på slutten av hver enkelt.)