[JAVA] Punkt 57 Minimieren Sie den Umfang lokaler Variablen

Annahme

Ein Neuling, der Java seit ungefähr einem Monat entwickelt, schreibt, um das auszugeben, was er durch das Lesen von Effective Java gelernt hat. Ich strebe einen Artikel an, der selbst für Anfänger so einfach wie möglich zu verstehen ist, indem ich meine Interpretation aufschlüssle und erkläre.

[Grob]

Durch die Minimierung des Bereichs lokaler Variablen kann die Lesbarkeit und Wartbarkeit Ihres Codes verbessert und die Wahrscheinlichkeit von Fehlern verringert werden.

[Schlechtes Beispiel 1]

badPractice1


String hoge = "hoge";
int fuga;
double piyo = 0.1;

doSomething(hoge);

... //Einige Verarbeitung

doSomething(fuga); //Was ist der Fuga-Typ? Was ist der Anfangswert?

... //Einige Verarbeitung

{
    doSomething(piyo) //Was ist die Art von Piyo? Was ist der Anfangswert?
}

[Lass uns das schreiben]

goodPractice1


String hoge = "hoge";
doSomething(hoge);

... //Einige Verarbeitung

int fuga = 10;
doSomething(fuga);

... //Einige Verarbeitung

double piyo = 0.1;
{
    doSomething(piyo)
}

--Erläutern Sie das erste Mal, wenn eine lokale Variable verwendet wird.
-> Der Variablentyp und der Anfangswert müssen nicht gespeichert werden, und der Leser kann sich darauf konzentrieren, den Prozess zu verstehen.

exception


Hoge hoge = null;
try {
    hoge = hogeHoge();
} catch (HogeException e) {
    e.hoge();
}
hoge.doSomething();

-> In einem solchen Fall ist eine rationale Initialisierung nicht möglich.

[Schlechtes Beispiel 2]

badPractice2


Iterator<Hoge> i = hoge.iterator();
while(i.hasNext()) {
    doSomething(i.next());
}

Iterator<Hoge> i2 = hoge2.iterator();
while(i.hasNext()) { //Es gibt einen Fehler
    doSomething(i2.next());
}

[Lass uns das schreiben]

goodPractice2


for (Iteratro<Hoge> i = hoge.iterator(); i.hasNext()) {
    doSomething(i.next());
}
//Kompilierungsfehler-Ich habe nicht gefunden
for (Iteratro<Hoge> i2 = hoge2.iterator(); i.hasNext()) {
    doSomething(i2.next());
}

goodPractice3


for (Iteratro<Hoge> i = hoge.iterator(); i.hasNext()) {
    doSomething(i.next());
}

for (Iteratro<Hoge> i = hoge2.iterator(); i.hasNext()) {
    doSomething(i.next());
}

-> Es hat einen sehr raffinierten Schreibstil und ist leichter zu lesen als währenddessen.

[Schlechtes Beispiel 3]

badPractice4


public int calcTotalAmount(int price) {
    double taxRate = 1.1;
    ... //Verarbeitung zur Berechnung des Preises einschließlich Steuern

    ... //Verarbeitung zur Berechnung der Versandkosten

    int totalAmount = taxIncludedPrice + shippingFee;

    return totalAmount;
}

[Lass uns das schreiben]

goodPractice4


public int calcTotalAmount(int price) {
    int taxIncludedPrice = calcTaxIncludedPrice(price);
    int shippingFee = calcShippingFee(price);

    return taxIncludedPrice + shippingFee;
}

public int calcTaxIncludedPrice(int price) {
    double taxRate = 1.1;
    ... //Verarbeitung zur Berechnung des Preises einschließlich Steuern

    return taxIncludedPrice ;
}

public int calcShippingFee(int price) {
    ... //Verarbeitung zur Berechnung der Versandkosten

    return shippingFee;
}

-> Es werden keine unnötigen lokalen Variablen in den Bereich aufgenommen, wodurch die Möglichkeit von Fehlern verringert wird.

[Zusammenfassung]

  1. Deklarieren Sie die lokale Variable bei der ersten Verwendung.
  2. Wenn Sie eine lokale Variable deklarieren, sollte grundsätzlich der Anfangswert enthalten sein.
  3. Verwenden Sie for-Schleifen anstatt while (nur wenn Sie nach dem Ende der Schleife keine Schleifenvariablen benötigen).
  4. Verkleinern Sie die Methode, um sie fokussierter zu machen.

Recommended Posts

Punkt 57 Minimieren Sie den Umfang lokaler Variablen
Punkt 57: Minimieren Sie den Umfang lokaler Variablen
[Grundkenntnisse in Java] Umfang der Variablen
[Ruby] Zeigt den Inhalt von Variablen an
Punkt 72: Bevorzugen Sie die Verwendung von Standardausnahmen
Punkt 63: Beachten Sie die Leistung der Zeichenfolgenverkettung
Punkt 44: Bevorzugen Sie die Verwendung von Standardfunktionsschnittstellen
Über Variablen und Umfang (Ruby)
Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)
[Einführung in Java] Variablenbereich (Bereich, lokale Variable, Instanzvariable, statische Variable)
SSL in der lokalen Umgebung von Docker / Rails / Puma
Beurteilung des Kalenders
Die Welt der Clara-Regeln (4)
Die Welt der Clara-Regeln (1)
Die Welt der Clara-Regeln (3)
Eigenschaften statischer Variablen
Glossar: Mitgliedsvariablen / Lokale Variablen
Die Welt der Clara-Regeln (5)
Die Idee der schnellen Sortierung
Beherrsche das [Rails] Scope!
Die Idee von jQuery
JSP-Informationen zum MVC-Modell des Servlets, zur Umleitung / Weiterleitung und zum Gültigkeitsbereich