[JAVA] Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]

Bool-Behandlung

Ich sehe eine Konvention, dass Variablennamen und Funktionsnamen vom Typ Bool Namen sein sollten, von denen erwartet werden kann, dass sie wahr sind. Zum Beispiel wird + Nomenklatur, Adjektive (oder nur Adjektive), frühere Teilnehmer usw. verwendet. Hier werden wir die Anwendung dieser Konvention anhand eines Beispiels betrachten, in dem es schwierig ist, wahr anzunehmen. Übrigens denke ich, es ist Geschmackssache, ob man etwas hinzufügt oder nicht.

Beispielcode

        public void Main()
        {
            bool findFlg = true;
            bool blnFind = true;
            bool finded = true;
            bool result = false;
            bool notFound = false;

            //Die Bedeutung des Flags kann nicht aus dem NG-Variablennamen gelesen werden.
            if (findFlg == true)
            {
            }

            //Die Bedeutung des Flags kann nicht aus dem NG-Variablennamen gelesen werden.
            if (blnFind == true)
            {
            }

            //△ Der letzte Teil wurde gefunden. Ich verstehe die Bedeutung.
            if (finded)
            {
            }

            //Die Bedeutung des Flags kann nicht aus dem NG-Variablennamen gelesen werden.
            if (!result)
            {
            }

            //Da die NG-Ablehnung auf true gesetzt ist, handelt es sich um eine doppelte Ablehnung.
            if (!notFound)
            {
            }

            int resultType = 1;
            bool success;
            //NG nutzlos wenn Aussage
            if (resultType == 1)
            {
                success = true;
            }
            else
            {
                success = false;
            }

            bool beAbleToDo = true;
            //△ Es verstößt nicht gegen die Regeln, ist aber zu lang. Can ist in Ordnung.
            if (beAbleToDo)
            {
            }
        }

Code nach dem Refactoring

     public void Main()
        {
            bool found = true;
            //Wenn Sie den letzten Teil verwenden, können Sie feststellen, dass er wahr ist.
            if (found)
            {
            }

            //Die magische Zahl sollte konstant sein, aber lassen Sie sie wie in der Probe.
            int resultType = 1;
            //Die Bedeutung kann verstanden werden, auch wenn sie Erfolg bleibt, aber sie wird zu einem Akronym.
            bool successful;
            successful = (resultType == 1);

            //Es ist einfacher zu bedienen, anstatt zu können.
            bool canDo = true;
            if (canDo)
            {
            }
        }

Überprüfen Sie den Nachskriptnamen der Verarbeitungsfunktion 2017/3/17

Es gibt viele Leute, die die Scheckverarbeitungsfunktion, die den Bool-Wert zurückgibt, als ... Check bezeichnen. Bitte beachten Sie, dass dies ein Verstoß gegen die Regeln vom Typ Bool ist. Beispielsweise wird eine Eingabeprüfung durchgeführt, und wenn der Wert ungültig ist, wird der Beispielcode angegeben, der den Prozess beendet.

        void Main(string inputValue)
        {
            //Es ist schwer zu lesen, wann es Zeit ist, NG true zurückzugeben. Es ist auch NG, mit false zu vergleichen.
            if (InputCheck(inputValue) == false)
            {
                return;
            }

            //△ Es ist in Ordnung, da es sich nicht um eine doppelte Ablehnung handelt, aber es besteht die Möglichkeit, dass in Zukunft eine andere oder doppelte Ablehnung auftritt.
            if (IsInvalid(inputValue))
            {
            }

            //OK Es gibt keinen Betreff, aber es stellt sich heraus, dass es sich um eine Wertgültigkeitsprüfung handelt
            if (!IsValid(inputValue))
            {
                return;
            }

            //OK Es gibt einen Betreff und es stellt sich heraus, dass es sich um eine Wertgültigkeitsprüfung handelt
            if (!IsValueValid(inputValue))
            {
                return;
            }

        }

Der Name InputCheck => InputCheck kann als Idee verstanden werden, kann aber den Rückgabewert des Bool-Typs nicht erklären. Bitte beachten Sie, dass die Namenskonvention dieselbe ist, unabhängig davon, ob es sich um eine Variable vom Typ Bool oder eine Funktion handelt. Übrigens setzt IsInvalid den ungültigen Wert auf true und sieht im Beispielcode gut aus. Wir empfehlen nicht, else hinzuzufügen oder abzulehnen, da dies die Lesbarkeit beeinträchtigt.

Zusammenfassung

Gemäß der Konvention können Variablennamen vom Typ Bool nahezu problemlos codiert und gelesen werden. Auf der anderen Seite versucht der mit △ gekennzeichnete Beispielcode, den Regeln zu entsprechen, und die Bedeutung wird verstanden, sodass er bei der Codeüberprüfung möglicherweise in Ordnung ist.

Beachten Sie auch, dass Funktionsnamen, die Bool-Typen zurückgeben, denselben Namenskonventionen wie Variablen folgen. Besonders ... Check wird angezeigt, egal wie oft Sie darauf hinweisen. Achten Sie also darauf, ihn nicht zu schreiben.

Ich habe die Meinung erhalten, dass die Regeln einfach, aber schwierig sind. Vielleicht ist der in NG geschriebene Code für Programmierer, die der VB6-Ära nicht entkommen sind, leicht zu lesen und kann nicht mehr geändert werden.

Vorheriger Artikel (einfache Nullprüfung)

Nächster Artikel (zu viele Funktionsargumente)

Inhaltsverzeichnis

Recommended Posts

Bool-Typ-Handling - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 7 [C # Refactoring-Beispiel]
Easy Null Check - Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 6 [C # Refactoring-Beispiel]
Eine etwas besorgniserregende Codesammlung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 2 [C # Refactoring Sample]
Komplizierte bedingte Verzweigung - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 1 [C # Refactoring-Beispiel]
Zu viele Funktionsargumente - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 8 [C # Refactoring-Beispiel]
Verschwenderische Verarbeitung von Sammlungen - ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 5 [C # Refactoring Sample]
Eine flüssige Schnittstelle? -Ich möchte Ihnen die Möglichkeit geben, guten Code zu schreiben. 3 [C # Refactoring Sample]
Ist es möglich, Funktionsaufrufe und bedingte Verzweigungen zu trennen? -Ich möchte eine gute Gelegenheit zum Schreiben von Code geben. 9 [C # Refactoring-Beispiel]
Wie man guten Code schreibt
Ich habe versucht, Code wie eine Typdeklaration in Ruby zu schreiben
Ich möchte einen Unit Test schreiben!
7 Dinge, die du behalten sollst, damit es kein verdammter Code wird
Beispielcode zum Zuweisen eines Werts in der Eigenschaftendatei zu einem Feld des erwarteten Typs