Sélections et corrections de Java Angry Code 5

introduction

Dans cet article, je publierai le code qui a été offensé en Java. ・ Trop long sur le côté -Stream avec trop de traitement ・ Classe wrapper sans signification ・ Le retour est inutilement lent

J'écrirai ces quatre points. J'ai repris la grammaire qui existe dans différentes langues, non limitée à Java.

① Il est trop long sur le côté.

C'est un code qui a tendance à être fait lorsque vous sentez que vous pouvez le faire un peu. Un exemple est l'utilisation inutile d'opérateurs ternaires.

BatCodes.java


    /**
     * 
     *Code en colère ①: trop long sur le côté
     *Degré de colère: ★★★ ☆☆
     *Point en colère: Max est difficile à lire
     */
    private boolean checkBadCode(String str) {
        return str.equals("abc") ? true : str.endsWith("c") ? true : str.startsWith("a") ? true : false ;
    }

Dans de tels cas, utilisez l'instruction if else avec obéissance.

GoodCodes.java


    /**
     *Code en colère ① Plan de correction
     */
    private boolean checkGoodCode(String str) {
        if(str.equals("abc")) {
            return true;
        }
        if (str.startsWith("a") || str.endsWith("c")) {
            return true;
        }
 
        return false;
    }

** L'opérateur ternaire est pratique, mais il est fortement recommandé de suivre mes règles ou conventions de codage. ** ** Au fait, je l'utilise lorsque le nombre de caractères dans le code ne dépasse pas 70 et que le jugement n'est pas effectué plus d'une fois.

GoodCodes.java


    private void checkBadCode(String str) {
        //C'est facile à lire
        str = str.equals("abc") ? str.concat("def") : str
    }

(2) Flux avec trop de traitement

Par exemple, forEach ()

BatCodes.java


    /**
     *Code en colère (2): flux avec trop de traitement
     *Degré de colère: ★★★ ☆☆
     *Point de colère: tout pour chacun()N'est pas une excuse si vous utilisez
     */
    private void streamBadCode(List<String> targetList) {
        targetList.stream().forEach((String str) -> 
                                    {str.concat("a");
                                     if(str.startsWith("a") ){
                                        System.out.print(str);
                                     };});
    }

Assurez-vous de choisir une opération intermédiaire appropriée. Principalement préparé. Dans l'exemple ci-dessus, vous pouvez également utiliser l'instruction for étendue.

GoodCodes.java


     /**
     *Code en colère ② Plan de correction
     */
    private void streamBadCode(List<String> targetList) {
        targetList.stream().map(s -> s.concat("a")).filter(s -> s.startsWith("a")).forEach(System.out:: print);
    }

GoodCodes.java


     /**
     *Code en colère ② Plan de correction
     */
    private void streamBadCode(List<String> targetList) {
        for (String target : targetList) {
            target.concat("a");
            if(target.startsWith("a")) {
                System.out.print("a");
            }
        }
    }

~~ Soit dit en passant, si vous travaillez dans un lieu de travail qui n'autorise jamais l'utilisation de Stream, vous devriez envisager de prendre votre retraite. ~~

③ Classe wrapper sans signification

Je l'ai fait quand je m'y suis habitué. Quoi qu'il en soit, il est traité par AutoBoxing, et dois-je le déclarer dans la classe wrapper depuis le début? C'est une idée superficielle.

BatCodes.java


    /**
     *Angry Code ③: classe wrapper sans signification
     *Degré de colère: ★★★★ ☆
     *Point de colère: consommation de mémoire gaspillée
     */
    private Integer literalBadCode(Integer i) {
        Integer firstValue = 10;
        Integer secondValue = 20;
        Integer sumValue = i + firstValue + secondValue;
        return sumValue;
    }

La classe wrapper utilise environ quatre fois plus de mémoire que la variable primitive, donc Cela peut provoquer une fuite de mémoire. Utilisez-le uniquement lorsque vous en avez besoin. Avec le code ci-dessus. Vous pouvez le retourner directement avec retour, cependant ...

GoodCodes.java


    /**
     *Angry Code ③: classe wrapper sans signification
     *Degré de colère: ★★★★ ☆
     *Point de colère: consommation de mémoire gaspillée
     */
    private int literalBadCode(int i) {
        return  i + firstValue + secondValue;
    }

⑤ Le retour est inutilement lent

La clause de retour est le code quand j'ai pensé que c'était cool de l'écrire à la fin de la méthode. ** C'est une erreur. ** **

BatCodes.java


    private boolean checkBatCode2(String target) {
        boolean japanFlg = false;
        boolean englishflg = false;
        boolean nonflg = true;
        switch(target) {
            case "Hello" :
                englishflg = true;
                break;
            case "Bonjour" : 
                japanFlg = true;
                break;
            default :
                nonflg = false;
                break;
        }

        if(japanFlg) {
            return japanFlg;
        } else if (englishflg) {
            return englishflg;
        } else {
            return nonflg;
        }

    }

C'est trop long et vous n'avez pas envie de lire le processus, alors revenons immédiatement lorsque le résultat est confirmé. Cela permet de garder votre code court et concis afin que vous n'ayez pas à intégrer des bogues inutiles ou à ennuyer les gens à lire plus tard.

BatCodes.java


public class GoodCodes {
    public static final String LANGEAGE_ENG = "Hello";
    public static final String LANGEAGE_JP = "Bonjour";

    /**
     *Code en colère ④ Plan de correction
     */
    private boolean checkGoodCode2(String target) {
        if(target.equals(LANGEAGE_ENG) || target.equals(LANGEAGE_JP)) {
            return true;
        }
        return false;
    }

À la fin

Cette fois, j'ai repris certaines choses que j'ai faites dans le passé et d'autres qui ont volé dans la révision du code. Il existe de nombreux articles similaires de meilleure qualité que celui-ci, mais je pense que certains sont assez rares.

※Code source https://github.com/mamoru12150927/JavaQitta.git

Recommended Posts

Sélections et corrections de Java Angry Code 5
Validation du ressort et code d'erreur