Histoire vraiment effrayante (anti-motif Java)

Bonjour, c'est Shrimpman de la comptabilité Saas Japon.

Lorsque vous travaillez dans le domaine des applications Java, le langage peut être assez mort Je pense qu'il n'est pas rare de maintenir des applications Java héritées. Ensuite, le code mystérieux des débutants Java à l'époque, difficile à comprendre pour les programmeurs modernes, Vous rencontrerez souvent du code dangereux qui crée des peluches et des bogues.

Cette fois, je voudrais annoncer ceux qui ont laissé une impression particulièrement forte dans le format du classement. C'est vraiment arrivé (bien que la plupart des cas soient en dehors de notre entreprise).

Variable statique publique n ° 10

Une variable statique publique est comme une variable globale dans la VM, n'est-ce pas? Souhaitez-vous obtenir la connexion à partir de différents endroits? C'est difficile car il a été déclaré comme connexion statique publique. Bien sûr, lorsque vous obtenez une connexion, elle est déjà fermée.

Enregistreur statique privé (non final) n ° 9

Des enregistreurs avec des déclarations statiques privées (sans modificateurs finaux) ont été utilisés ici et là. Ce n'est pas un problème en soi, mais si cette classe est la classe cible de Serialize, Bien sûr, Logger n'a pas pu être sérialisé, donc une exception a été levée. C'est irrésistible car il a été inondé ici et là.

private static Logger log = Logger.getLogger(this.getClass());

Remplacer n ° 8 finaliser

La méthode finalize de la classe Object ne fait plus référence à cet objet Il sera exécuté lorsqu'il sera collecté en tant que cible pour destruction par le garbage collector. J'étais en difficulté parce que j'écrivais le processus en remplaçant la méthode finalize. On supposait que le processus serait exécuté ou non, et nous ne saurions pas quand il serait appelé.

N ° 7 Créer une structure en couches et vérifier les valeurs nulles

SomeValue value = null;
if (someClass != null
        && someClass.getValueA() != null
        && someClass.getValueA().getValueB() != null
        && someClass.getValueA().getValueB().getValueC() != null
        && someClass.getValueA().getValueB().getValueC().getValueD() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF() != null
        && someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF().getValueG() != null) {
    value  = someClass.getValueA().getValueB().getValueC().getValueD().getValueE().getValueF().getValueG();
 }

Sensationnel····.

No.6 Classe d'effets secondaires mystérieux qui n'est pas singleton

C'était courant dans le passé, une telle classe. C'est presque parti maintenant.

public class SomeClass {
    private Result result;
    public void init() {
        //Quelque chose comme lire le maître
    }
    public void calculate() {
        //Traitement des calculs
        result = new Result(xxx);
    }
    public Resut getResult() {
        return result;
    }
}

N ° 5 Jeter toutes les exceptions

Eh bien, je ne vois pas cela, mais cela arrive parfois.

public int extractSomethingUtilityMethod throws IOException, IllegalStateException, NumberFormatException, SomeException.... {
  //Quelque chose de traitement
}

De nombreux types d'exceptions ont été déclarés se produire ... C'est mieux que d'être écrasé, mais je ne veux pas appeler une telle méthode ...

N ° 4 Réutilisation inutile des variables (la portée de la variable est inutilement large)

SomeElement element = null;
if (valueA != null) {
    someElement = new Element(valueA)
    someElement.setParent(parentElement);
}
if (valueB != null) {
    someElement = new Element(valueB)
    someElement.setParent(parentElement);
}
if (valueC != null) {
    someElement = new Element(valueC)
    someElement.setParent(parentElement);
}

C'est inconfortable ... Cela seul ne semble pas avoir d'effets indésirables, C'est un peu effrayant pour la portée mystérieuse.

N ° 3 Élimination des exceptions

Code qui devient parfois fou

try {
    //Traitement divers
} catch (Exception e) {
}

J'attrape une exception, mais ... ?? Ne crachez pas de bûches! ?? Je veux dire ...

Sortie par étiquette du n ° 2 pour boucle

Maintenant que Java 8 est le centre, il y a peu de scènes d'apparition pour la boucle, mais Il était utilisé partout comme un processus de bouclage efficace qui ne resterait pas coincé dans les programmes hérités. Cependant, comme la boucle for est utilisée de manière trop pratique, la boucle for est imbriquée dans double et triple, et il est possible de quitter la boucle. Un sage qui utilise des étiquettes est apparu.

loopA: for (int i = 0; i < arrayA.length; ++i) {
    for (int j = 0; j < arrayB.length; ++i) {
        //Quelque chose de traitement
        if (xxx) {
            break loopA;
        }
    }
}

Ce n'est que le début, mais si vous multiplexez cela, vous ne savez jamais quand et à quelle distance vous êtes sorti de la boucle.

N ° 1 sinon si ne peut pas être utilisé Mode HARD qui impose des règles de codage (soi?)

Je voudrais dire comme le titre l'indique, mais c'est un peu difficile à imaginer, alors j'écrirai un exemple simple ci-dessous.

if (bigDecimalValue.compareTo(BigDecimal.valueOf(100000L) < 0)) {
    //En traitement
} else {
    if (bidDecimalValue.compareTo(BigDecimal.valueOf(200000L) < 0) {
        //En traitement
    } else {
        if (bigDecimalValue.compareTo(BigDecimal.valueOf(300000L) < 0 ) {
            //En traitement
        } else {
Cela continue sans fin et disparaît à l'extrême droite de l'écran ...
        }
    }
}

Ceux qui voient cela pour la première fois ne savent pas ce que fait ce processus, mais le branchement conditionnel Je pense que je suis fou si j'ai trouvé un emploi dans une entreprise qui devait coder sans autre chose. Au fait, cette déclaration que j'ai rencontrée était de plus en plus imbriquée et disparaissait à l'extrême droite de l'écran.

En outre, ASaaS a augmenté le nombre d'ingénieurs techniques en chef ces dernières années et se concentre également sur la formation des jeunes. Nous avons un système en place pour fabriquer des produits de haute qualité. Créer et maintenir un produit que tous les clients qui utilisent ASaaS peuvent utiliser en toute tranquillité pendant longtemps Soyez assuré qu'il est en place.

Recommended Posts

Histoire vraiment effrayante (anti-motif Java)
[Java] L'histoire d'une déclaration de commutation vraiment effrayante
Histoire statique Java
ClassCastException vraiment effrayant
L'histoire de l'initialiseur Java
Histoire générique Java
Une histoire sur la prise en charge de Java 11 pour les services Web
Une histoire sur le JDK à l'ère de Java 11
Histoire d'essayer de faire fonctionner le fichier JAVA
[Java] Créer un filtre
java construire un triangle
Histoire de support Java 9+ de Lombok
Une histoire sur le développement de ROS appelé rosjava avec java
Histoire de créer une application de gestion de tâches avec Swing, Java
[Java] Un article sur IntelliJ IDEA enseignant la méthode putIfAbsent de Map
Une histoire de malentendu sur l'utilisation du scanner Java (mémo)
Remarques sur Java GC
[Java] Aizu Online Judge's story 2
[Java] Histoire du juge Aizu Online 1
Créer une méthode java [Memo] [java11]
[Java] Créer un fichier temporaire
Rechercher un sous-ensemble en Java
Qu'est-ce qu'une collection Java?
[Java] Rendez-le constant
[Java] Dessine un motif simple
Java crée des documents Word
Histoire de remplacement C # et Java
Faire un diamant en utilisant Java
Une histoire bloquée avec NotSerializableException
Une histoire que j'ai eu du mal à défier le pro de la concurrence avec Java
[Note] Une histoire sur la modification des outils de compilation Java avec VS Code
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
Une histoire sur la difficulté à aligner un cadre de test avec Java 6
Une histoire que j'ai finalement comprise Java pour une déclaration en tant que non-ingénieur