[JAVA] Punkte, die Sie beim persönlichen Umgang mit Variablen beachten sollten

Da die Hauptsprache Java ist, eine persönliche Zusammenfassung dessen, worüber ich in Java besonders besorgt bin Die Benutzeroberfläche und das Design werden in diesem Artikel nicht erwähnt, da die Details wichtig sind.

Punkt

Ist der Umfang der Variablen das erforderliche Minimum?

Je breiter der Bereich, desto mehr Rolle spielt die Variable. Es erleichtert auch das Einbetten von Fehlern wie Verwendung und Änderungen zu unerwarteten Zeiten. Ich möchte den Umfang auf das notwendige Minimum beschränken.

Angenommen, Sie haben eine Suchmethode, die den Namen aus einem Array von IDs (int) abfragt.

        String name;
        for (int id : identities) {
            name = find(id);
            //Etwas mit Namen zu tun
        }

In diesem Codebeispiel wird die Namensvariable außerhalb der Schleife definiert. Wenn der Name jedoch nur innerhalb der Schleife verwendet wird, wird der Gültigkeitsbereich durch Definieren innerhalb der Schleife eingeschränkt.

        for (int id : identities) {
            final String name = find(id);
            //Etwas mit Namen zu tun
        }

Ist der Variablenname für den Bereich geeignet?

Obwohl dies den oben genannten Bereich betrifft, muss die Benennung von Variablennamen und Methodennamen je nach Bereich strenger sein. Umgekehrt macht ein engerer Anwendungsbereich die Notwendigkeit einer Strenge überflüssig.

Schleifenzähler wie "int i" sind extrem kurze Fälle, aber Variablen, die innerhalb von 2-3 Zeilen verwendet werden, können einfache Variablennamen wie "name" und "age" sein. Andererseits müssen Konstanten je nach Domäne streng sein. Beispiel: public static final String DEFAULT_USER_NAME_VALUE =" Anonymous ";. Wenn es einen Typ von "USER" gibt, erhöht sich die Konstante entsprechend, und der Variablenname muss auch strenger sein, wodurch er länger wird.

Wenn Sie eine Variable verwenden möchten, die einen Namen innerhalb oder außerhalb der Schleife bedeutet, müssen Sie etwas wie "Benutzername" "adminUserName" anstelle eines Namens wie "Name" und "Name2" verwenden.

Ist es unveränderlich?

Variablen können bis auf einige wie Zähler unveränderlich sein. Bei veränderlichen Variablen können Änderungen und das Überschreiben von Namespaces zu unerwarteten Zeitpunkten auftreten. Einige IDEs, wie z. B. IntelliJ, und sogar lokale Variablen werden beim Erstellen der Variablen endgültig definiert. Beachten Sie jedoch, dass der Inhalt von Map und List auch dann neu geschrieben werden kann, wenn die Variablen selbst endgültig sind. Im Fall von Java ist es wünschenswert, dass die Methode, die die "private endgültige Liste" zurückgibt, die als Instanzvariable gespeichert ist, eine Deepcopy zurückgibt oder sie zu "Unmodifizierbarer Liste" macht und sie dann zurückgibt.

    private final List<String> nameList = new ArrayList<>();

    public List<String> getNameList() {
        return nameList;
    }

Ich möchte dies durch Folgendes ersetzen.

    private final List<String> nameList = new ArrayList<>();

    public List<String> getNameList() {
        return Collections.unmodifiableList(nameList);
    }

Können primitive Konstanten verwendet werden?

Ich denke, es gibt viele Fälle, in denen String- und int-Konstanten (wenn auch keine Grundelemente) verwendet werden, aber ich würde gerne in Betracht ziehen, sie durch Aufzählungstypen und Klassen zu ersetzen, die sie darstellen. Angenommen, es wird ein Prozess zum Schreiben von Daten in eine Datei ausgeführt, und die folgenden Konstanten werden als Schreibmodus vorbereitet.

    /**
     *Nachtragsmodus
     */
    public static final String WRITE_MODE_APPEND = "append";

    /**
     *Überschreibmodus
     */
    public static final String WRITE_MODE_OVERWRITE = "overwrite";

    /**
     *Neuer Modus (Fehler, wenn eine Datei vorhanden ist)
     */
    public static final String WRITE_MODE_NEW = "new";

Eine Schreibmethode in diesem Modus hätte die folgende Signatur:

public void write(String data, String mode)

Sowohl das erste als auch das zweite Argument sind "String" und es ist schwierig zu unterscheiden, ohne den Argumentnamen zu überprüfen. Wenn mode eine Zeichenfolge ist, die aufgrund von String nicht unterstützt wird, muss dies berücksichtigt werden.

Wenn Sie beispielsweise einen Aufzählungstyp oder eine Mode-Klasse verwenden, treten Fehler wie das Übergeben der Originaldaten als zweites Argument nicht auf.

    enum WriteMode {
        /**
         *Nachtragsmodus
         */
        APPEND,
        /**
         *Überschreibmodus
         */
        OVERWRITE,
        /**
         *Neuer Modus
         */
        NEW;
    }

In diesem Fall würde die Signatur folgendermaßen aussehen:

public void write(String data, WriteMode mode)

Gefahr von "Nun, vorerst"

Wenn Sie sich das alleine ansehen, ist das eine Selbstverständlichkeit, aber wenn Sie während der Überprüfung codieren, gibt es immer noch Codes, die "Nun, vorerst" sagen, oder ein solcher Code ist enthalten, weil das Refactoring weggelassen wurde. Ich möchte mit meiner eigenen Vorsicht vorsichtig sein, da dies enden kann.

Recommended Posts

Punkte, die Sie beim persönlichen Umgang mit Variablen beachten sollten
Der Standpunkt bei der Codeüberprüfung einer Webanwendung (Rails)
Zusammenfassung der Punkte, über die ich mir bei der Migration von Java nach Kotlin Sorgen gemacht habe
Zu überprüfende Punkte, wenn Rubocop nur langsam ausgeführt wird
Informationen zur Ausnahmebehandlung
Informationen zur Ausnahmebehandlung
Wie man denkt, wenn man plötzlich etwas über Generika versteht