Ich habe es auf der Achse "Code, der einfach zu pflegen ist" zusammengefasst.
Ich werde die Erklärung unter der Annahme von Java- und Javascript-Code schreiben, aber es ist eine Technik, die in allen Sprachen verwendet werden kann
Es ist meine persönliche Idee, also wäre es großartig, wenn Sie nur die aufnehmen könnten, die Sie mögen.
Dieses Mal werde ich über verschiedene Dinge auf der Achse "Flagge" sprechen.
Dieses Mal werde ich darüber sprechen, ob es sich um einen "Wert, der bei 0/1 berücksichtigt werden sollte" oder einen "Wert, der bei 1/2 berücksichtigt werden sollte" handelt. Mit anderen Worten kann gesagt werden, dass es "ein Wert ist, der von einem Booleschen Wert besessen werden sollte" oder "ein Wert, der von einer Aufzählung, einem Zeichen oder einem Wert ungleich Null besessen sein sollte". In der folgenden Geschichte werden wir mit der numerischen Notation 0/1 und 1/2 vereinheitlichen.
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.
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.
Ü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