Kontext
In Clean Code , Seite 35, heißt es
Dies impliziert, dass die Blöcke in if-Anweisungen, else-Anweisungen, while-Anweisungen usw. eine Zeile lang sein sollten. Wahrscheinlich sollte diese Zeile ein Funktionsaufruf sein. Dies hält nicht nur die umschließende Funktion klein, sondern fügt auch einen dokumentarischen Wert hinzu, da die im Block aufgerufene Funktion einen aussagekräftigen Namen haben kann.
Ich stimme vollkommen zu, das macht sehr viel Sinn.
Später, auf Seite 40, werden Funktionsargumente beschrieben
Die ideale Anzahl von Argumenten für eine Funktion ist Null (Null). Als nächstes kommt eins (monadisch), dicht gefolgt von zwei (dyadisch). Drei Argumente (Triade) sollten nach Möglichkeit vermieden werden. Mehr als drei (polyadisch) erfordern eine besondere Begründung - und sollten dann sowieso nicht verwendet werden. Argumente sind schwer. Sie verbrauchen viel konzeptionelle Kraft.
Ich stimme vollkommen zu, das macht sehr viel Sinn.
Problem
Ich stelle jedoch ziemlich oft fest, dass ich eine Liste aus einer anderen Liste erstelle und mit einem von zwei Übeln leben muss.
Entweder verwende ich zwei Zeilen im Block , eine zum Erstellen des Objekts, eine zum Hinzufügen zum Ergebnis:
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
Flurp flurp = CreateFlurp(badaBoom);
flurps.Add(flurp);
}
return flurps;
}
Oder ich füge der Funktion ein Argument für die Liste hinzu, in die das Objekt eingefügt wird, wodurch es "ein Argument schlechter" wird.
public List<Flurp> CreateFlurps(List<BadaBoom> badaBooms)
{
List<Flurp> flurps = new List<Flurp>();
foreach (BadaBoom badaBoom in badaBooms)
{
CreateFlurpInList(badaBoom, flurps);
}
return flurps;
}
Frage
Gibt es (Un-) Vorteile, die ich nicht sehe und die einen generell vorziehen? Oder gibt es solche Vorteile in bestimmten Situationen; Auf was muss ich in diesem Fall achten, wenn ich eine Entscheidung treffe?
f(g(x))
gegen deinen Style-Guide ist, kann ich deinen Style-Guide nicht reparieren. Ich meine, du bist auch nicht sqrt(x*x + y*y)
in vier Zeilen aufgeteilt, oder? Und das sind drei (!) Verschachtelte Unterausdrücke auf zwei (!) Inneren Verschachtelungsebenen (keuchen!). Ihr Ziel sollte die Lesbarkeit sein , nicht Aussagen einzelner Bediener. Wenn Sie das später wollen, dann habe ich die perfekte Sprache für Sie: Assembler.
mov
Anweisungen und einer einzigen jmp toStart
am Ende erstellen . Jemand hat tatsächlich einen Compiler erstellt, der genau das tut: D
rlwimi
Anweisung zum PPC. (Dies steht für "Direktes Einfügen einer Maske für das linke Wort drehen".) Dieser Befehl benötigte nicht weniger als fünf Operanden (zwei Register und drei Direktwerte) und führte die folgenden Vorgänge aus: Ein Registerinhalt wurde durch eine Sofortverschiebung gedreht, eine Maske wurde erstellt mit einem einzigen Lauf von 1 Bits, der von den beiden anderen unmittelbaren Operanden gesteuert wurde, und die Bits, die 1 Bits in dieser Maske im anderen Registeroperanden entsprachen, wurden durch die entsprechenden Bits des gedrehten Registers ersetzt. Sehr coole Anleitung :-)
flurps.Add(CreateFlurp(badaBoom));
?