So di Ruby supporta un suffisso if
come:Qual è lo scopo dell'uso dell'istruzione suffisso "if" in Ruby?
number = -42 if opposite
ma qual è lo scopo di questo? Perché dovrebbe essere utilizzato al posto della dichiarazione del prefisso if
?
So di Ruby supporta un suffisso if
come:Qual è lo scopo dell'uso dell'istruzione suffisso "if" in Ruby?
number = -42 if opposite
ma qual è lo scopo di questo? Perché dovrebbe essere utilizzato al posto della dichiarazione del prefisso if
?
È uguale al prefisso ma più breve. L'unica ragione è di salvare lo spazio verticale nell'editor di testo.
In alcuni casi è possibile semplificare la lettura del codice. Trovo che questo sia vero soprattutto nel caso di unless
, dove si ha una certa azione si solito desidera eseguire:
number = -42 unless some_unusual_circumstance_holds
Una volta che avete per unless
, per la simmetria ha senso per sostenerlo per if
anche.
Non capisco perché tu menzioni "se" solo indirettamente Se hai "a meno" per le cose che di solito vuoi supportare, allora hai "se" per le cose che in via eccezionale vuoi supportare. – sawa
number = -42 if opposite
è lo stesso di
if opposite
number = -42
end
Alcune persone preferiscono l'one-liner, per motivi di leggibilità. Immaginate una riga del tipo:
process_payment if order_fulfilled?
Non leggere bene?
Il suffisso stile if
e unless
può anche essere un bene per "clausole di guardia", sotto forma di:
return if ...
return unless ...
Ecco un esempio:
# suffix-style
def save
return false if invalid?
# go for it
true
end
Versus:
# indented style
def save
if valid?
# go for it
true
else
false
end
end
Nel secondo esempio, l'intera implementazione del metodo non ha o essere spostato di un trattino a causa del controllo valid?
, e abbiamo bisogno di una clausola aggiuntiva else
. Con lo stile suffisso, il controllo invalid?
è considerato un caso limite che gestiamo e quindi eseguiamo il salvataggio, e il resto del metodo non ha bisogno di un rientro o di una clausola else
.
Questo è talvolta chiamato una "clausola di guardia" ed è recommended dalla Guida allo stile di Ruby.
@vgoff Ho modificato la mia risposta per chiarire che il codice di esempio dovrebbe restituire valori diversi per i percorsi di codice validi e non validi. –
Lo stile Postfix non ha la sezione else
. È utile quando vuoi solo fare qualcosa con uno dei due casi diviso per la condizione e non vuoi scherzare con l'altro caso.
Penso che questa forma di assegnazione "intelligente" sia brutta, ma rende in altri casi: "rilancia qualcos'altro se qualcosa non va". – user2864740
Ruby ce l'ha perché Perl ce l'ha, perché Perl (AFAIK) a volte legge meglio. –
@ user2864740, sono completamente d'accordo con te. Ricordo di aver letto la frase, "Va tutto bene se tutto va bene.", E pensando a quanto sarebbe stato meglio "Se tutto finisce bene, va tutto bene". –