[JAVA] Point 57 Réduire la portée des variables locales

supposition

Un nouveau venu qui développe java depuis environ un mois écrit pour sortir ce qu'il a appris en lisant Effective Java. Je vise un article aussi simple que possible à comprendre même pour les débutants, en décomposant mon interprétation et en l'expliquant.

[Grossièrement]

La réduction de la portée des variables locales peut améliorer la lisibilité et la maintenabilité de votre code et réduire le risque de commettre des erreurs.

[Mauvais exemple 1]

badPractice1


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

doSomething(hoge);

... //Certains traitements

doSomething(fuga); //Quel est le type de fuga? Quelle est la valeur initiale?

... //Certains traitements

{
    doSomething(piyo) //Quel est le type de piyo? Quelle est la valeur initiale?
}

—— Détourne l'attention du lecteur.
-> J'essaie de comprendre ce que je fais, mais j'utilise les ressources de mon cerveau pour me souvenir des variables.

[Écrivons ceci]

goodPractice1


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

... //Certains traitements

int fuga = 10;
doSomething(fuga);

... //Certains traitements

double piyo = 0.1;
{
    doSomething(piyo)
}

--Déclarez la première fois qu'une variable locale est utilisée.
-> Il n'est pas nécessaire de mémoriser le type de variable et la valeur initiale, et le lecteur peut se concentrer sur la compréhension du processus.

exception


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

-> Dans un tel cas, une initialisation rationnelle n'est pas possible.

[Mauvais exemple 2]

badPractice2


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

Iterator<Hoge> i2 = hoge2.iterator();
while(i.hasNext()) { //Il y a un bug
    doSomething(i2.next());
}

[Écrivons ceci]

goodPractice2


for (Iteratro<Hoge> i = hoge.iterator(); i.hasNext()) {
    doSomething(i.next());
}
//Erreur de compilation-je n'ai pas trouvé
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());
}

-> Il a un style d'écriture très sophistiqué et est plus facile à lire que tout.

[Mauvais exemple 3]

badPractice4


public int calcTotalAmount(int price) {
    double taxRate = 1.1;
    ... //Traitement pour calculer le prix TTC

    ... //Traitement pour calculer les frais d'expédition

    int totalAmount = taxIncludedPrice + shippingFee;

    return totalAmount;
}

[Écrivons ceci]

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;
    ... //Traitement pour calculer le prix TTC

    return taxIncludedPrice ;
}

public int calcShippingFee(int price) {
    ... //Traitement pour calculer les frais d'expédition

    return shippingFee;
}

-> Il ne contient pas de variables locales inutiles dans la portée, ce qui réduit la possibilité de bogues.

[Résumé]

  1. Déclarez la variable locale la première fois qu'elle est utilisée.
  2. Lors de la déclaration d'une variable locale, la valeur initiale doit être incluse.
  3. Utilisez des boucles for plutôt que while (uniquement si vous n'avez pas besoin de variables de boucle après la fin de la boucle).
  4. Réduisez la taille de la méthode pour la rendre plus ciblée.

Recommended Posts

Point 57 Réduire la portée des variables locales
Point 57: Minimiser la portée des variables locales
[Connaissance de base de Java] Portée des variables
[Ruby] Afficher le contenu des variables
Point 72: Favoriser l'utilisation d'exceptions standard
Point 63: Méfiez-vous des performances de la concaténation de chaînes
Point 44: Favoriser l'utilisation d'interfaces fonctionnelles standards
À propos des variables et de la portée (ruby)
Parler des mérites des variables de liaison de base de données ((1) Introduction)
[Introduction à Java] Portée de la variable (portée, variable locale, variable d'instance, variable statique)
SSL dans l'environnement local de Docker / Rails / puma
Jugement du calendrier
Le monde de Clara-Rules (4)
Le monde de Clara-Rules (1)
Le monde de Clara-Rules (3)
Caractéristiques des variables statiques
Glossaire: Variables membres / variables locales
Le monde de Clara-Rules (5)
L'idée du tri rapide
Maîtrisez la portée [Rails]!
L'idée de jQuery
JSP - À propos du modèle MVC du servlet, de la redirection / transmission et de la portée