Java's Angry Code 5 Auswahl und Korrekturen

Einführung

In diesem Artikel werde ich den Code veröffentlichen, der in Java beleidigt war. ・ Seitlich zu lang -Stream mit zu viel Verarbeitung ・ Bedeutungslose Wrapper-Klasse ・ Die Rückkehr ist nutzlos langsam

Ich werde diese vier Punkte schreiben. Ich habe die Grammatik aufgegriffen, die in verschiedenen Sprachen existiert, nicht nur in Java.

① Es ist seitlich zu lang.

Es ist ein Code, der normalerweise gemacht wird, wenn Sie das Gefühl haben, dass Sie es ein wenig tun können. Ein Beispiel ist die nutzlose Verwendung von ternären Operatoren.

BatCodes.java


    /**
     * 
     *Wütender Code ①: Zu lang seitwärts
     *Grad der Wut: ★★★ ☆☆
     *Wütender Punkt: Max ist schwer zu lesen
     */
    private boolean checkBadCode(String str) {
        return str.equals("abc") ? true : str.endsWith("c") ? true : str.startsWith("a") ? true : false ;
    }

Verwenden Sie in solchen Fällen die if else-Anweisung gehorsam.

GoodCodes.java


    /**
     *Wütender Code ① Korrekturplan
     */
    private boolean checkGoodCode(String str) {
        if(str.equals("abc")) {
            return true;
        }
        if (str.startsWith("a") || str.endsWith("c")) {
            return true;
        }
 
        return false;
    }

** Der ternäre Operator ist praktisch, es wird jedoch dringend empfohlen, meine Regeln oder Codierungskonventionen zu befolgen. ** ** ** Ich benutze es übrigens, wenn die Anzahl der Zeichen im Code 70 nicht überschreitet und die Beurteilung nicht mehr als einmal durchgeführt wird.

GoodCodes.java


    private void checkBadCode(String str) {
        //Das ist leicht zu lesen
        str = str.equals("abc") ? str.concat("def") : str
    }

(2) Stream mit zu viel Verarbeitung

Zum Beispiel forEach ()

BatCodes.java


    /**
     *Verärgerter Code (2): Stream mit zu viel Verarbeitung
     *Grad der Wut: ★★★ ☆☆
     *Wütender Punkt: Alles für jeden()Ist keine Entschuldigung, wenn Sie verwenden
     */
    private void streamBadCode(List<String> targetList) {
        targetList.stream().forEach((String str) -> 
                                    {str.concat("a");
                                     if(str.startsWith("a") ){
                                        System.out.print(str);
                                     };});
    }

Stellen Sie sicher, dass Sie eine geeignete Zwischenoperation auswählen. Meistens vorbereitet. Im obigen Beispiel können Sie auch die erweiterte for-Anweisung verwenden.

GoodCodes.java


     /**
     *Wütender Code ② Korrekturplan
     */
    private void streamBadCode(List<String> targetList) {
        targetList.stream().map(s -> s.concat("a")).filter(s -> s.startsWith("a")).forEach(System.out:: print);
    }

GoodCodes.java


     /**
     *Wütender Code ② Korrekturplan
     */
    private void streamBadCode(List<String> targetList) {
        for (String target : targetList) {
            target.concat("a");
            if(target.startsWith("a")) {
                System.out.print("a");
            }
        }
    }

~~ Übrigens, wenn Sie an einem Arbeitsplatz arbeiten, an dem Stream nie verwendet werden kann, sollten Sie in den Ruhestand gehen. ~~

③ Bedeutungslose Wrapper-Klasse

Ich habe das getan, als ich mich daran gewöhnt habe. Wie auch immer, es wird von AutoBoxing verarbeitet, und sollte ich es von Anfang an in der Wrapper-Klasse deklarieren? Das ist eine flache Idee.

BatCodes.java


    /**
     *Angry Code ③: bedeutungslose Wrapper-Klasse
     *Grad der Wut: ★★★★ ☆
     *Wütender Punkt: Verschwendeter Speicherverbrauch
     */
    private Integer literalBadCode(Integer i) {
        Integer firstValue = 10;
        Integer secondValue = 20;
        Integer sumValue = i + firstValue + secondValue;
        return sumValue;
    }

Die Wrapper-Klasse verwendet also ungefähr viermal so viel Speicher wie die primitive Variable Dies kann zu einem Speicherverlust führen. Verwenden Sie es nur, wenn Sie es brauchen. Mit dem obigen Code. Sie können es jedoch direkt mit return zurückgeben ...

GoodCodes.java


    /**
     *Angry Code ③: bedeutungslose Wrapper-Klasse
     *Grad der Wut: ★★★★ ☆
     *Wütender Punkt: Verschwendeter Speicherverbrauch
     */
    private int literalBadCode(int i) {
        return  i + firstValue + secondValue;
    }

⑤ Die Rückkehr ist nutzlos langsam

Die return-Klausel ist der Code, als ich dachte, es wäre cool, ihn am Ende der Methode zu schreiben. ** Das ist ein Fehler. ** ** **

BatCodes.java


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

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

    }

Es ist zu lang, um den Vorgang zu lesen. Kehren wir also sofort zurück, wenn das Ergebnis bestätigt ist. Auf diese Weise bleibt Ihr Code kurz und prägnant, sodass Sie keine unnötigen Fehler einbetten oder Personen zum späteren Lesen nerven müssen.

BatCodes.java


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

    /**
     *Wütender Code ④ Korrekturplan
     */
    private boolean checkGoodCode2(String target) {
        if(target.equals(LANGEAGE_ENG) || target.equals(LANGEAGE_JP)) {
            return true;
        }
        return false;
    }

Am Ende

Dieses Mal habe ich einige Dinge aufgegriffen, die ich in der Vergangenheit getan habe, und Dinge, die in der Codeüberprüfung geflogen sind. Es gibt viele ähnliche Artikel, die von besserer Qualität sind als dieser, aber ich denke, einige sind ziemlich selten.

※Quellcode https://github.com/mamoru12150927/JavaQitta.git

Recommended Posts

Java's Angry Code 5 Auswahl und Korrekturen
Federvalidierung und Fehlercode