Ich persönlich habe kein Problem mit dem folgenden Code
%Vor%Weil ich denke, das folgende ist zu ausführlich
%Vor%Aber ich würde mit diesem Standpunkt nicht so weit gehen, wenn ich sage, dass es fünf Prädikate gibt und ich den Text in den Editor einpacken musste, um sie alle auf einmal zu sehen, gibt es eine logische "Linie", die du zeichnest viele Prädikate, die Sie in eine einzige if-Anweisung aufnehmen, in einem ähnlichen Sinn wie die Aussage, dass Methoden niemals mehr als 7 Parameter benötigen sollten
Ich denke nicht, dass das Umschreiben von if-Anweisungen in zwei der richtige Weg ist, besonders wenn man bedenkt, dass das Hinzufügen einer else
-Klausel zu Ihren Beispielen zu unterschiedlichen Ergebnissen führt. Wenn ich die Anzahl der atomaren Aussagen in der Bedingung reduzieren wollte, würde ich einige, die zusammen Sinn ergeben, mit einer eigenen Funktion vergleichen, wie:
Ich denke, es ist ein Gleichgewicht der verschiedenen Arten von Operatoren und korrekte Formatierung. Wenn alle Operatoren gleich sind (alle "und" oder alle "oder"), dann können Sie wahrscheinlich eine unbestimmte Anzahl von Ausdrücken miteinander verketten, ohne das Verständnis zu verlieren:
%Vor%Ich glaube nicht, dass es eine magische Zahl gibt. Wenn alle Prädikate zusammen Sinn ergeben, dann werde ich sie zusammensetzen. Dies könnte beinhalten, dass die if-Anweisung über zwei Zeilen aufgeteilt wird, aber ich führe normalerweise keine zusätzlichen if-Anweisungen ein, die überflüssig sind. Aber wenn es besonders lang ist, sollten Sie sich fragen, ob alle Aussagen wirklich notwendig sind. Vielleicht könnten Sie einige der Werte früher oder etwas in der Art herausfiltern. Das größte Problem ist die Lesbarkeit. Wenn es für jemanden anders schwer ist zu verstehen, müssen Sie Ihren Code umgestalten. Aber die Aufspaltung des Codes in zwei verschiedene if-Anweisungen macht den Code selten lesbarer, er benötigt nur mehr Zeilen.
Nicht die Anzahl der Prädikate, sondern die Komplexität zählt. Solange Sie verstehen, was der Code mit minimalem Aufwand tut, sieht es für mich in Ordnung.
Um das hinzuzufügen, würde ich nicht zu multiple if's wechseln, sondern eine Funktion für die Prädikate hinzufügen. Insbesondere, wenn an mehreren Stellen die gleiche Anzahl von Prädikaten verwendet wird.
Es hängt davon ab, was Sie tun. Die zweite Anweisung erzeugt ein anderes Ergebnis, wenn Sie es umkehren. (fügen Sie ein "nicht" davor hinzu) und ist eine sehr häufige Quelle von Fehlern.
Ich habe Code mit ungefähr 20 Prädikaten gesehen, der funktioniert (oder zumindest gut genug funktioniert!) Die Faustregel, die ich verwende, wenn es wie ein Hundedinner aussieht, erwäge ich Refactoring.
Ich denke jedoch, dass es keine Regeln gibt:
Wenn einer der obigen Punkte zutrifft, würde ich es nachbearbeiten.
Dieses Problem mit langen Listen von Bedingungen ist nicht so sehr der Verlust der Lesbarkeit , sondern der Verlust der Testbarkeit . Besonders im Umgang mit schlechten Methodenargumenten ist es manchmal einfacher, um Vergebung als um Erlaubnis zu bitten (siehe zB Antwort auf diese Frage ). Auf diese Weise halten Sie Ihren Code sauber und testbar und beheben entweder den Aufrufer oder lassen ihn mit der resultierenden Ausnahme umgehen.
Welcher Weg ist besser? Weder. Die Semantik von beiden ist unterschiedlich.
Ich stimme zu, obwohl Splitting das Debuggen erleichtert, aber auch bedingte Breakpoints:)
Wenn es eine einfache Kombination aus ANDs oder ORs ist, die länger als 3 Tests sind, refaktorisieren Sie sie.
Alles hängt davon ab, was zu tun ist. Aber eine Sache, auf die Sie achten sollten, um bestimmte Algorithmen weniger ausführlich zu machen, ist eine switch-Anweisung:
%Vor%Das wäre in anderen Aussagen ziemlich ausführlich gewesen. Irgendein Code wird Tonnen von if und else Aussagen brauchen, einige werden kondensiert werden können, etc. Nimm niemals die Qualität der Ausführung des Codes für die Schönheit der Quelle des Codes auf.
Tags und Links language-agnostic coding-style