Ruby è una delle lingue più popolari utilizzate sul web. Abbiamo avviato una nuova serie di screencast qui su Nettuts + che ti introdurrà a Ruby, oltre ai grandi framework e strumenti che accompagnano lo sviluppo di Ruby. In questo capitolo, vedremo come funzionano le istruzioni condizionali e i loop in Ruby.
L'istruzione if è uno dei primi tipi di ramificazioni che si apprendono durante la programmazione. Puoi indovinare cosa significa: se questo è vero, fai una cosa; se non lo è, fai qualcos'altro. In Ruby, questi sono abbastanza facili da scrivere:
name = "Andrew" se name == "Andrew" inserisce "Hello Andrew" end if name == "Andrew" inserisce "Hello Andrew" altrimenti inserisce "Hello qualcun altro" fine
Dopo la parola chiave Se
, codice nella tua dichiarazione condizionale. Dopodiché viene fornito il codice da eseguire se la condizione restituisce true. Si chiude la dichiarazione con il fine
parola chiave. Se vuoi, puoi spremere un altro
dichiarazione in là, che verrà eseguita in modo prevedibile se la condizione è falsa.
Non è difficile controllare per più condizioni. Metti tanti quanti ELSIF
dichiarazioni come desideri tra il Se
e altro
dichiarazioni. Sì, è così ELSIF
, un matrimonio di altro
e Se
.
order = : size => "medium" def make_medium_cofee mette "making medium statement" end #assume altre funzioni se order [: size] == "small" make_small_coffee; elsif order [: size] == "medium" make_medium_coffee; elsif order [: size] == "large" make_large_coffee; altrimenti make_coffee; fine
Come ho detto, puoi averne altrettanti ELSIF
condizioni e i relativi blocchi di codice che vuoi.
La maggior parte dei linguaggi di programmazione distingue tra istruzioni ed espressioni. Una dichiarazione è un costrutto di codice che non valuta un determinato valore. Un'espressione è un costrutto di codice fa restituire un valore. Ad esempio, chiamare una funzione è un'espressione, poiché restituisce un valore. Tuttavia, un'istruzione if è esattamente questa, una dichiarazione, perché non restituisce un valore. Questo significa che non puoi farlo nel tuo JavaScript:
message = if (someTruthyValue) "questo è vero"; else "questo è falso";
Ovviamente, non è possibile farlo perché l'istruzione if non restituisce un valore che è possibile assegnare a Messaggio
.
Tuttavia, puoi farlo con Ruby, perché le istruzioni sono in realtà espressioni, nel senso che restituiscono un valore. Quindi possiamo farlo
messaggio = se ordine [: dimensione] == "piccolo" "fare un piccolo" ordine elsif [: size] == "medium" "fare un mezzo" altro "fare caffè" fine
Qualsiasi blocco di codice verrà eseguito diventerà il valore di Messaggio
.
Se non ne hai ELSIF
o altro
clausole e la tua istruzione if ha solo una riga, puoi usarla come modificatore su una riga "normale".
mette "making coffee" se customer.would_like_coffee?
Nella maggior parte dei linguaggi di programmazione, vogliamo invertire il ritorno dell'espressione condizionale, dobbiamo negarlo, solitamente con il botto (!
operatore).
engine_on = true if! engine_on # che significa "se non engine_on" mette "motore di servizio" # non deve essere inserito, perché "not engine_on" è falso
Tuttavia, Ruby è davvero carino salvo che
operatore, che ci impedisce di doverlo fare, dandoci un codice molto più leggibile:
a meno che engine_on # "a meno che engine_on" sia migliore di "se non engine_on" "fine manutenzione motore"
Proprio come Se
, Puoi usare salvo che
come modificatore:
mette "motore di servizio" a meno di engine_on
Se hai un sacco di opzioni su cui lavorare, usa se / elsif / else
potrebbe essere un po 'prolisso. Prova la dichiarazione del caso.
ora = 15 caso quando ora < 12 puts "Good Morning" when hour > 12 && ora < 17 puts "Good Afternoon" else puts "Good Evening" end
È un po 'come se fosse un po' scatola dell'interruttore
dichiarazione in JavaScript (o in altre lingue), tranne per il fatto che non esiste una variabile che stai valutando. Dentro il cassa / fine
parole chiave, puoi metterne tante quando
dichiarazioni come vorresti. Seguilo quando
dall'espressione condizionale, e poi le linee di codice lo seguono. Proprio come l'istruzione if, l'istruzione case è davvero un'espressione, quindi è possibile assegnarla a un'espressione e acquisire un valore restituito.
hour = 15 message = case when hour < 12 "Good Morning" when hour > 12 && ora < 17 "Good Afternoon" else "Good Evening" end puts message
Se hai familiarità con JavaScript, saprai che i blocchi di codice in un'istruzione if sono circondati da parentesi graffe. Non lo facciamo in Ruby, quindi potrebbe sembrare che Ruby dipenda dallo spazio bianco. Niente potrebbe essere più lontano dalla verità (prendilo, pythonistas :)).
Se vogliamo scrivere le tue affermazioni come one-liner, devi separare le diverse parti delle affermazioni ... ma come? Bene, puoi usare il punto e virgola:
se nome == "Andrew"; some_code; altro; some_code; fine
Se non ti piace l'aspetto di quello (che non lo faccio), puoi inserire la parola chiave poi
tra le espressioni condizionali e la linea di codice.
se nome == "Andrew", quindi sode_code; fine
Questo funziona anche per una dichiarazione di un caso.
caso quando x> 20; mette "<20" when x < 20 then puts "<20" end
Quindi, quelle sono dichiarazioni condizionali (intendo espressioni). Che ne dici di loop? Diamo un'occhiata prima a loop.
Un ciclo while continuerà ad essere eseguito finché la condizione dichiarata non è falsa:
arr = ["John", "George", "Paul", "Ringo"] i = 0 mentre arr [i] mette arr [i] i + = 1 fine
Qui passiamo su un array; quando arr [i]
restituisce false (il che significa che non ci sono oggetti lasciati nell'array), il ciclo smetterà di essere eseguito. All'interno del ciclo, stampiamo l'elemento corrente nell'array e ne aggiungiamo uno alla nostra variabile di incremento.
Puoi anche usare mentre
come un modificatore
arr = ["John", "George", "Paul", "Ringo"] i = -1 mette arr [i + = 1] mentre arr [i]
Proprio come salvo che
è il contrario di Se
, fino a
è il contrario di mentre
. Continuerà a loop fino a quando la condizione è vera:
days_left = 7; until days_left == 0 puts "ci sono ancora # days_left nella settimana" days_left - = 1 fine
E, naturalmente, è anche un modificatore.
days_left = 8 puts "ci sono ancora # days_left - = 1 nella settimana" fino a days_left == 1
Sì, Ruby ha un ciclo for. No, non è come il ciclo for in altre lingue. Funziona come un ciclo foreach, per il looping sui valori di un array o di un hash:
arr = ["John", "George", "Paul", "Ringo"] per la voce in arr mette fine articolo
Se esegui il ciclo su un hash, puoi utilizzare due nomi di variabili, uno per la chiave e uno per il valore:
joe = : name => "Joe",: age => 30,: job => "plumber" per key, val in joe puts "# chiave è # val" fine
Spero ti piaccia la nostra serie Ruby for Newbies Screencast. Se c'è qualcosa che ti piacerebbe vedere, fammelo sapere nei commenti! (E se non stai guardando i video, dovresti esserlo. C'è un bonus solo per screencast alla fine di ognuno.)