Ich war neulich auf der Suche nach einem Ruby-Code-Tool, und ich stieß auf den Edelstein pelusa, der interessant aussieht. Eines der Dinge, nach denen es sucht, ist die Anzahl der else-Anweisungen, die in einer gegebenen Ruby-Datei verwendet werden.Warum werden andere Anweisungen in Ruby nicht empfohlen?
Meine Frage ist, warum sind diese schlecht? Ich verstehe, dass if/else
Aussagen oft eine große Komplexität hinzufügen (und ich verstehe, dass das Ziel ist, die Komplexität des Codes zu reduzieren), aber wie kann eine Methode, die zwei Fälle überprüft, ohne eine else
geschrieben werden?
Zur Erinnerung, ich habe zwei Fragen:
1) Gibt es einen anderen Grund als die Komplexität des Codes zu reduzieren, dass andere Aussagen vermieden werden könnten?
2) Hier ist eine Beispiel-Methode aus der App, die ich arbeite, die eine Anweisung verwendet. Wie würdest du das ohne einen schreiben? Die einzige Option, die mir einfallen würde, wäre eine ternäre Aussage, aber hier ist genug Logik, dass eine ternäre Aussage tatsächlich komplexer und schwieriger zu lesen wäre.
def deliver_email_verification_instructions
if Rails.env.test? || Rails.env.development?
deliver_email_verification_instructions!
else
delay.deliver_email_verification_instructions!
end
end
Wenn Sie dies mit einem ternären Operator schreiben, wäre es:
def deliver_email_verification_instructions
(Rails.env.test? || Rails.env.development?) ? deliver_email_verification_instructions! : delay.deliver_email_verification_instructions!
end
Ist das richtig? Wenn ja, ist das nicht schwerer zu lesen? Ist eine else
Anweisung nicht hilfreich? Gibt es einen anderen, besseren, else
- keine Möglichkeit, dies zu schreiben, an die ich nicht denke?
Ich denke, ich suche hier nach stilistischen Überlegungen.
Gute write-up auf 'else' als Code riechen hier: http://solnic.eu/2012/04/11/ge-rid-of-that-code-smell-control-couple.html – michaelmichael
Das ist ziemlich gut, und etwas von dem, was ich suchte (obwohl ein bisschen über meinen Kopf in Teilen). Kümmere dich darum, das als Antwort zu veröffentlichen, und um zusätzliche Karma-Punkte zu erhalten, mein Beispiel umzuformulieren oder eines von euch zu verwenden, um es zu illustrieren? Oder hast du das Gefühl, dass dieser Beitrag als Antwort funktionieren sollte? – nickcoxdotme
Überbeanspruchung ist schlecht, ebenso wie ein hartnäckiges Beharren darauf, dass es vermieden wird. Es gibt eine Zeit und einen Ort, und mit richtig geschriebenem Code ist es gelegentlich die richtige Lösung. Es kann mit Spaghetti-Code verwirrend sein, also vermeiden Sie es, schlecht durchdachte Codes zu schreiben und der Rest sollte auf sich selbst aufpassen. –