L'altro giorno stavo cercando uno strumento di qualità del codice Ruby e mi sono imbattuto nella gemma pelusa, che sembra interessante. Una delle cose che controlla è il numero di altre istruzioni usate in un dato file Ruby.Perché le altre affermazioni sono scoraggiate in Ruby?
La mia domanda è, perché sono così male? Capisco che le dichiarazioni if/else
aggiungano spesso una grande quantità di complessità (e ho capito che l'obiettivo è ridurre la complessità del codice), ma come può un metodo che verifica che due casi vengano scritti senza un else
?
Per ricapitolare, ho due domande:
1) C'è un motivo diverso da ridurre la complessità del codice che else potrebbero essere evitati?
2) Ecco un metodo di esempio dall'app su cui sto lavorando che utilizza un'istruzione else
. Come lo scriverebbe senza uno? L'unica opzione che potrei pensare sarebbe una dichiarazione ternaria, ma qui c'è abbastanza logica che penso che una dichiarazione ternaria sarebbe in realtà più complessa e più difficile da leggere.
def deliver_email_verification_instructions
if Rails.env.test? || Rails.env.development?
deliver_email_verification_instructions!
else
delay.deliver_email_verification_instructions!
end
end
Se hai scritto questo con un operatore ternario, sarebbe:
def deliver_email_verification_instructions
(Rails.env.test? || Rails.env.development?) ? deliver_email_verification_instructions! : delay.deliver_email_verification_instructions!
end
È quello giusto? Se è così, non è così difficile da leggere? Una dichiarazione di else
non aiuta a risolvere questo problema? C'è un altro, meglio, else
- modo in cui scrivere questo a cui non sto pensando?
Immagino di dover cercare considerazioni stilistiche qui.
Una buona scrittura su 'else' come un odore di codice qui: http://solnic.eu/2012/04/11/get-rid-of-that-code-smell-control-couple.html – michaelmichael
Questo è piuttosto buono, e un po 'di quello che stavo cercando (anche se un po' sopra le mie teste in alcune parti). Cura di postare questo come una risposta, elaborare, e per i punti extra karma, refactoring il mio esempio o utilizzare uno dei tuoi per illustrare? O ti sembra che quel post dovrebbe funzionare come risposta? – nickcoxdotme
L'abuso è pessimo, così come una rigida insistenza che sia evitato. C'è un tempo e un luogo, e, con codice scritto correttamente, occasionalmente è la soluzione giusta. Può essere fonte di confusione con il codice spaghetti, quindi evitare di scrivere codice scarsamente pensato e il resto dovrebbe prendersi cura di se stesso. –