[JAVA] Schreiben Sie einfach zu pflegenden Code (Teil 4)

1. Worüber man diesmal sprechen soll

2. Techniksammlung

2. Benennen Sie keine Variablen, die nicht 0 oder 1 sind (= wahr oder falsch) "~ flag"

Stellen Sie sich für einen Moment vor.

Von nun an erstellen Sie eine Funktion zum Verwalten einer bestimmten Aufgabe (ToDo). Welche Variablen sollten für jede dieser Aufgaben definiert werden, um den Abschlussstatus anzuzeigen („abgeschlossen“ oder „unvollständig“)? Welche Variablen sollten definiert werden, um die Dringlichkeit jeder Aufgabe darzustellen („dringend“ oder „normal“)? Es wird angenommen, dass diese beiden Variablen immer nur diese beiden Werte haben.

python


//Abschlussflag
boolean completeFlag;
//Notfallflagge
boolean emergencyFlag;

Nun, es sieht so aus. Was ist dann, wenn sich die Spezifikationen hier ändern und Sie drei Dringlichkeitsstufen wünschen: "hoch", "normal" und "niedrig"? Möchten Sie die Implementierung mit diesem Variablennamen starten?

Flags werden als "Variablen bezeichnet, die Informationen enthalten, die in einem Bit ausgedrückt werden können". Der Name "~ flag" hat unweigerlich zwei Vorurteile. Dieses Vorurteil kann zu Implementierungsfehlern führen, wenn Sie es eilig oder eilig haben. Vermeiden Sie Namen, die leicht missverstanden werden können. Wenn es eine solche Spezifikationsänderung gibt (wenn das Ändern des Variablennamens keine großen Auswirkungen auf das Projekt hat), denke ich, dass der Name auf diesem Computer geändert werden sollte. Zum Beispiel "Notfall Lebel" oder "Notfalltyp"?

Übrigens, wenn Sie drei oder mehr Auswahlmöglichkeiten haben, können Sie verstehen, dass das Flag name ~ nicht verwendet wird. Aber was ist mit 1 oder 2 Auswahlmöglichkeiten? Ich denke, das ist eine Meinungsverschiedenheit.

In meinem persönlichen Sinne denke ich nicht, dass Sie das Namensflag oder den Booleschen Typ für 1 oder 2 Auswahlmöglichkeiten verwenden sollten. Ich möchte im nächsten Abschnitt fortfahren.

2.2.0 Unterschiede im Denken zwischen 0 oder 1 Variablen und 1 oder 2 Variablen

In Abschnitt 1 haben wir nun als Beispiele die "Abschlussflagge" und die "Notfallflagge" erläutert. Jeder hat also ein Problem. Wie heißt "Geschlecht"? Welche logischen Ausdrücke und numerischen Werte erwarten Sie jeweils?

Nun, dies wird oft als "Geschlecht" oder "Geschlecht" bezeichnet. Es sollte nur wenige Gelegenheiten geben, es maleFlag oder femaleFlag zu nennen.

Wenn Sie es also Geschlecht nennen, möchten Sie, dass der Wert 0 oder 1 ist? Willst du 1 oder 2?

Persönlich denke ich, dass es "1 oder 2" ist.

Warum ist 0 oder 1 nicht gut? (Akzeptiere ich es nicht physiologisch?)

Ich dachte über den Unterschied zwischen der Idee dieser 0/1-Variablen und der 1/2-Variablen nach. Ich denke, der Unterschied zwischen diesen beiden Punkten sind die folgenden zwei Punkte im weiteren Sinne.

・ Ob die beiden Optionen gleichwertig sind ・ Ist der Wert zu beiden Seiten voreingenommen (gibt es eine Annahme, dass er voreingenommen ist?)

In der Welt der Systeme ist 0 etwas Besonderes. Apropos Java int, der Anfangswert ist 0. Die Nummer 0 kommt herein, ohne etwas zu tun. Mit anderen Worten, 0 und 1 in 0/1 haben einen großen Unterschied zwischen "nichts tun" und "etwas tun". In dieser Denkweise ist die "Abschlussflagge" im Eröffnungs-ToDo genau diese Denkweise. Das Design ist so, dass 0 gesetzt wird, wenn eine Aufgabe auftritt (= wenn noch nichts getan wurde), und 1 gesetzt wird, wenn sie abgeschlossen ist.

Männer und Frauen haben jedoch den gleichen Rang. Es existiert auch (im Grunde) in 50-50. Wenn Sie einen Mann auf 0 setzen, bedeutet dies ein Flackern, z. B. "meistens Männer" oder "Jeder beginnt mit einem Mann". Das Gegenteil ist auch der Fall. Ich denke, das ist der Unterschied zwischen der "Abschlussflagge" und der "männlichen und weiblichen".

Mit anderen Worten, die Flagge hat den starken Eindruck, dass sie einen ungewöhnlichen Zustand oder einen Ort markiert, der sich im Vergleich zum Ausgangszustand geändert hat, und jede Option ist flach oder hat einen völlig anderen Vektor. Zum Beispiel sollten Sie es nicht als Flag bezeichnen, und ich denke, es ist besser, einen Wert ungleich Null als Konstante zu haben.

Übrigens kann sich die Denkweise je nach System ändern. Angenommen, Sie haben einen Dienst, der sich an verheiratete Familien richtet und bei dem 99% der Benutzer verheiratet sind. In einem solchen Fall kann, basierend auf der Idee, dass "normalerweise verheiratet", verheiratet 0 sein und unverheiratet 1 sein. Ich denke, es ist notwendig, es flexibel zu ändern, abhängig von den Eigenschaften des zu erstellenden Systems.

2.3 Überlegen wir, wie jede Konstante beim Erstellen einer Variablen zugewiesen wird, die einen anderen numerischen Wert als 0 oder 1 enthält, z. B. "Typ" und "Status".

Übrigens, die Dringlichkeit, die ich bisher mit 3 Auswahlmöglichkeiten in Betracht gezogen habe, aber die Spezifikationen haben sich nach der Veröffentlichung wieder geändert. Ich möchte mehr in 10 Stufen anstatt in 3 Stufen schaffen.

Jeder hat es eilig. "Nun, ich habe es ausgedrückt als -1, 0, 1 (in Aufzählung ist es LOW, NORMAL, HIGH), aber -5 bis 5 (obwohl es 11 Schritte sind)? Möchten Sie es im Sinne von -3, 0, 3 verwenden?

Mit dieser Bedeutung können Sie sich jedoch die Aussicht vorstellen, die Anzahl der Stufen zu erhöhen. Wenn Sie mit Variablen arbeiten, die in Zukunft mehr Auswahlmöglichkeiten haben, gibt es eine Methode zum Entwerfen mit Intervallen, anstatt Konstanten fortlaufende Zahlen zuzuweisen.

Weisen Sie beispielsweise beim Entwerfen der ersten drei Stufen Konstanten von -100, 0, 100 zu. Dann können Sie es wie -10, -20 oder wie -200, -300 erhöhen. (Wenn Sie bei Verwendung von enum Parameter wie LEVEL_0 und LEBEL_1 festlegen, tritt der gleiche Vorfall auf.)

Wenn Sie mit einer solchen Lücke entwerfen, ist es natürlich schwierig zu verstehen, "wie viele Arten von Optionen insgesamt verfügbar sind". Wenn Sie diese Nummer zum ersten Mal sehen, bleiben einige Leute möglicherweise bei "Hmm?".

Es ist in Ordnung, einen Patch anzuwenden, aber das Aktualisieren der Daten des tatsächlichen Benutzers ist nervenaufreibend. Um solche Dinge so weit wie möglich zu vermeiden, ist es besser zu überlegen, was in der Entwurfsphase je nach Denkweise und Klima jeder Organisation verstanden werden kann.

Schließlich habe ich hier über Zahlen gesprochen, aber im realen Code verwenden Sie häufig Boolesche Werte. Ich denke, dass 1/2 in vielen Fällen auch Enum verwendet.

Ist Boolescher Wert gut, wenn Zwei-Wahl-Variablen berücksichtigt werden? Oder sollte ich etwas anderes haben? Ich hoffe, es wird eine gute Quelle für ein Urteil sein.

Recommended Posts

Schreiben Sie einfach zu wartenden Code (Teil 1)
Schreiben Sie einfach zu pflegenden Code (Teil 4)
Schreiben Sie einfach zu wartenden Code (Teil 3)
Schreiben wir einen Code, der einfach zu pflegen ist (Teil 2)
Schreiben Sie Code, der schwer zu testen ist
Code, der schwer zu debuggen und zu analysieren ist
Denken Sie an Testcode, der durch den Komparator-Test leicht zu verstehen ist
Einfach zu wartender FizzBuzz
Wie man guten Code schreibt
Java 14 neue Funktionen, mit denen Code geschrieben werden kann
[Java] Code, der schwer zu bemerken, aber furchtbar langsam ist
Die Funktion ist sehr einfach zu bedienen
So schreiben Sie leicht verständlichen Code [Zusammenfassung 3]
So identifizieren Sie den Pfad, auf dem leicht Fehler gemacht werden können
So schreiben Sie Testcode mit Basic-Zertifizierung
Grundregeln zum Schreiben von einfach zu lesendem Code
Schreiben Sie zur Implementierung den Test und codieren Sie den Prozess
Verwenden Sie stream, um zu überprüfen, ob SimpleDateFormat threadsicher ist
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]