paedubucher hat geschrieben:
Einfachheit ist auch ein Punkt: ich sehe beim ersten Codefragment sofort, was passiert.
Bei deinem ersten Post ist die erste Variante klar lesbarer. Man erinnere sich nur immer wieder an den Telefontest!
Haettest du diese umfangreichere Form des gleichen Beispiels nicht schon selbst gebracht, dann haette ich sie angefuehrt:
Bei der Erweiterbarkeit halte ich aber den zweiten Code für besser. Erstens könnte das Array von einer anderen Funktion/Methode erstellt werden. Zweitens muss man sich folgendes vorstellen:
Code: Alles auswählen
foo.baz("a");
foo.baz("b");
foo.baz("c");
foo.baz("d");
foo.baz("e");
foo.baz("f");
foo.baz("g");
foo.baz("h");
foo.baz("i");
Im Vergleich zu:
Code: Alles auswählen
String[] values = new String[]{"a", "b", "c", "d", "f", "g", "h", "i"};
for (String v : values) {
foo.baz(v);
}
Nun ist die zweite Variante schlanker. [...]
Dieses Wort ``nun'' ist fuer mich das entscheidende. Ich glaube, man muss sich immer wieder aktiv vom Wasserfalldenken verabschieden: Es geht nicht um die Frage, ob die Variante eins oder zwei absolut besser ist, sondern darum, dass im ersten Post die Variante eins besser ist und im letzten Post die Variante zwei. Der Wechsel von erster zu zweiter im Laufe des Wachstums des Codes, das ist fuer mich der Kern von Codepflege. Man sollte sich beim Lesen von Code stets fragen ob er so wie er ist (noch) gut ist oder besser umgebaut werden sollte. Mit vielen kleinen Schrittchen (waehrend des Lesens!) pflegt man seine Codebasis, IMO.
Was man sich allerdings schon fragen kann -- wie du es auch tust -- ist, ob es in einem konkreten Fall schon zu Beginn abzusehen ist, dass die Liste gewiss bald wachsen wird ... oder dass die Liste von extern dynamisch eingelesen werden koennte, was die zweite Variante nahelegt bzw. erfordert.
Natuerlich ist das hier ein konstruiertes Beispiel (was halt schlecht ist, und darum schaetze ich es, dass Kernighan und Co. in ihren Buechern immer realen Code besprechen). Wenn es tatsaechlich um die Werte `a' bis `i' gehen wuerde, dann sollte man die generieren lassen, weil dann sichergestellt ist, dass kein Buchstabe vergessen oder vertauscht wird.
Vielleicht nochmal generell: So stupider Code wie die Variante 1 finde ich nicht grundsaetzlich schlecht, denn er ist sofort verstaendlich. Sein Problem ist die Schwaeche bei der Sichtbarkeit von Vollstaendigkeit und Reihenfolge. Das ist in Variante 2 besser, dafuer leidet diese unter der groesseren Anfaelligkeit von Codefehlern. Es ist wie immer ein Abwaegen verschiedener Ziele, die man als Programmierer anstrebt. Generelle Antworten gibt es auf diese Fragen selten ... jedenfalls keine guten generellen Antworten.