IterateUpTo(limit,i => CheckIfCrossed(crossedOut, i, () => CrossOutputMultiplesOf(crossedOut, i)));
CrossOutMulitplesOf(..);
Dann hat man wenigstens eine Idee was die Zeile leisten soll.
Guten Tag,
ich schließe mich Tims Ausführungen an. Das für mich wesentliche Prinzip, welches hier berücksichtigt werden sollte, lautet "Use Intention-revealing names".
Die herausgegriffene Codezeile zeigt zwar, WIE etwas gelöst wurde, es wird aber in keinster Weise ersichtlich WAS dieses Stück Code aus einer fachlichen Perspektive macht.
Versuche einen Semantik-reichen Namen für die Codezeile zu finden, der beschreibt, was sich fachlich dahinter verbirgt.
LG,
Stephan
> --
> Sie erhalten diese Nachricht, weil Sie in Google Groups E-Mails von der Gruppe "Clean Code Developer" abonniert haben.
> Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an clean-code-devel...@googlegroups.com.
> Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an clean-code...@googlegroups.com.
> Gruppe besuchen: http://groups.google.com/group/clean-code-developer
> Weitere Optionen finden Sie unter https://groups.google.com/d/optout.
> Wenn Sie sich von dieser Gruppe abmelden und keine E-Mails mehr von dieser Gruppe erhalten möchten, senden Sie eine E-Mail an clean-code-developer+unsub...@googlegroups.com.
1. Den Test auf den Edge-Case (if (maxValue<2)...) habe ich weggelassen. Der ist überflüssig. Er ist ein Relikt des Vorgehens nach TDD. Da war mal ein Testfall, der so grün gemacht werden konnte. Doch das Wissen, dass es unterhalt 2 keine Primzahlen gibt, ist dadurch an mindestens zwei Stellen codiert. Einmal in dem Vergleich und einmal in PutUncrossedIntegersIntoResult. Dort steht nämlich for(..., i=2; ...). Dadurch werden Zahlen <2 als Primzahlen ebenfalls ausgeschlossen.Ich habe also diesen Vergleich gestrichen - das ist wirklich KISS, finde ich :-) - und habe die Behandlung von zu kleinen Zahlen über eine Konstante sichtbar gemacht.
Daraus ließe sich übrigens auch eine Datenstruktur (ADT) ableiten. Deshalb sind die beiden Methoden Initialize_prime_candidates und Extract_primes_from_candidates etwas abgesetzt am Ende. Sie könnten in einer Klasse Primescandidates oder so zusammengefasst werden. Damit wäre die Trennung von Domänenlogik (Operationen in Zeilen 19 bis 38) und Daten deutlich. Das habe ich hier mal versuchsweise gebaut: https://gist.github.com/ralfw/08dc32b3f51236ad557e#file-primegenerator_with_adt-cs.
An der Erkenntnis, dass IOSP/PoMO einer besseren Lesbarkeit nicht im Wege stehen, ändert das aber nichts. Refactoring ist auch mit IOSP/PoMO nur zu einem gewissen grad mechanisch. Wenn es hakt, dann muss man sich Gedanken machen. Dann ist das ein Hinweis darauf, dass irgendwas noch nicht stimmt, eine Prämisse hinterfragt werden sollte.
--
Sie erhalten diese Nachricht, weil Sie in Google Groups ein Thema der Gruppe "Clean Code Developer" abonniert haben.
Wenn Sie sich von diesem Thema abmelden möchten, rufen Sie https://groups.google.com/d/topic/clean-code-developer/2rkrMmt3u7o/unsubscribe auf.
Wenn Sie sich von dieser Gruppe und allen Themen dieser Gruppe abmelden möchten, senden Sie eine E-Mail an clean-code-devel...@googlegroups.com.
Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an clean-code...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/clean-code-developer
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.
Wenn Sie sich von dieser Gruppe und allen Themen dieser Gruppe abmelden möchten, senden Sie eine E-Mail an clean-code-developer+unsub...@googlegroups.com.
Wenn Sie in dieser Gruppe einen Beitrag posten möchten, senden Sie eine E-Mail an clean-code...@googlegroups.com.
Gruppe besuchen: http://groups.google.com/group/clean-code-developer
Weitere Optionen finden Sie unter https://groups.google.com/d/optout.