Come scrivere "if" senza usare "then" o "end" in Ruby
-
08-07-2019 - |
Domanda
Ho trovato tre modi per scrivere la stessa condizione in Ruby:
#1
if 1==1
puts "true"
end
#2
puts "true" if 1==1
#3
if 1==1 then puts "true" end
Perché non posso farlo?
#4
if 1==1 puts "true"
Non capisco:
- Perché quindi e fine sono necessari in # 3 e,
- Perché devo cambiare l'ordine per far funzionare # 2.
L'istruzione n. 4 sembra il modo più naturale per scrivere questo. Non capisco perché non sia possibile.
Soluzione
Il " se x allora y end
" la sintassi è pensata per i condizionali multilinea mentre " y if x
" form è pensato per istruzioni condizionali a riga singola concise. then
è necessario nel primo caso per dire a Ruby che la condizione è finita (dal momento che Ruby non richiede parentesi come C), e end
è necessario per dire a Ruby che l'intero blocco if
è terminato (poiché può essere composto da più righe).
Puoi sostituire quindi
con un punto e virgola, perché un fine riga indica anche la fine della condizione. Non puoi sbarazzarti del end
con un multilinea se
. Utilizzare il secondo modulo o l'operatore ternario se si desidera un one-liner conciso.
Ad esempio, supponiamo
x = true
quanto segue valuterà true e restituirà y
x ? y :
=> y
allo stesso modo, questo valuterà falso e non restituirà nulla
!x ? y :
=>
aggiungi un termine dopo ':' per il caso else
!x ? y : z
=> z
Altri suggerimenti
Il fatto è che entrambi i modi sono in realtà un modo naturale di pensare:
se questo è vero, fai qualcosa
fai qualcosa se questo è vero
Vedi? Ruby cerca di avvicinarsi alla sintassi inglese in questo modo. end è necessario solo per terminare il blocco, mentre nella seconda versione il blocco è già chiuso con if .
Per rispondere effettivamente alla tua domanda, penso che non ci sia alcuna possibilità di rimuovere quindi e fine . Ricorda Pascal / Delphi? Hai anche un quindi . È tipico solo per i linguaggi in stile C non averlo.
Che ne dici di usare i due punti invece di così? http://www.java2s.com/Code/Ruby/Statement/layoutanifstatementisbyonplacingth. htm
Esistono vari modi in cui è possibile cortocircuitare se si desidera farlo.
L'istruzione condizionale è solo una parte della sintassi di Ruby per renderla più inglese.