[JAVA] Est-il possible de séparer les appels de fonction et les branches conditionnelles? - Je veux vous donner une chance d'écrire du bon code. 9 [Exemple de refactoring C #]

Fonction appelée après le branchement conditionnel

Parfois, je vois du code qui a la même fonction appelée dans l'instruction if mais qui ne diffère que dans les arguments. Demandez-vous si vous devez vraiment l'appeler dans l'instruction if.

Exemple de code

Prenons un exemple d'écran de gestion des journaux. Les informations détaillées du journal sont affichées pour l'administrateur système, mais les journaux détaillés ne sont affichés à personne d'autre que l'administrateur système.

        public void Main(bool isManager, string detail)
        {
            //Affichez les journaux détaillés à l'administrateur.
            if (isManager)
            {
                SetSummary("Une erreur imprévue s'est produite. Veuillez consulter le journal détaillé.");
                SetDetail(detail);
            }
            else
            {
                SetSummary("Une erreur imprévue s'est produite.");
                SetDetail("Veuillez contacter l'administrateur pour plus de détails.");
            }
        }

        private void SetSummary(string summary)
        {
            System.Console.WriteLine("Définissez le contour sur l'écran." + summary);
        }

        private void SetDetail(string detail)
        {
            System.Console.WriteLine("Définissez les détails à l'écran." + detail);
        }

java
    public void main(boolean isManager, String detail) {
        //Affichez les journaux détaillés à l'administrateur.
        if (isManager) {
            setSummary("Une erreur imprévue s'est produite. Veuillez consulter le journal détaillé.");
            setDetail(detail);

        } else {
            setSummary("Une erreur imprévue s'est produite.");
            setDetail("Veuillez contacter l'administrateur pour plus de détails.");
        }
    }

    private void setSummary(String summary) {
        System.out.println("Définissez le contour sur l'écran." + summary);
    }

    private void setDetail(String detail) {
        System.out.println("Définissez les détails à l'écran." + detail);
    }

Choses à craindre

Ce qui est inquiétant dans ce code, c'est que la seule différence dans l'instruction if est que les appels de fonction sont les mêmes, seuls les arguments. Il est plus propre de ne changer que l'argument et de faire un appel de fonction.

Après refactoring

            //Affichez des journaux détaillés pour les administrateurs.
            string summary = null;
            string detail = null;
            if (isManager)
            {
                summary = "Une erreur imprévue s'est produite. Veuillez consulter le journal détaillé.";
                detail = detailLog;
            }
            else
            {
                summary = "Une erreur imprévue s'est produite.";
                detail = "Veuillez contacter l'administrateur pour plus de détails.";
            }

            //Séparé la partie d'appel de fonction de la branche conditionnelle.
            SetSummary(summary);
            SetDetail(detail);

java
    public void main(boolean isManager, String detailLog) {
        //Affichez les journaux détaillés à l'administrateur.
        String summary = null;
        String detail = null;
        if (isManager) {
            summary = "Une erreur imprévue s'est produite. Veuillez consulter le journal détaillé.";
            detail = detailLog;

        } else {
            summary = "Une erreur imprévue s'est produite.";
            detail = "Veuillez contacter l'administrateur pour plus de détails.";
        }

        setSummary(summary);
        setDetail(detail);
    }

    private void setSummary(String summary) {
        System.out.println("Définissez le contour sur l'écran." + summary);
    }

    private void setDetail(String detail) {
        System.out.println("Définissez les détails à l'écran." + detail);
    }

Résumé

Dans tous les cas, les appels de fonction ne peuvent pas être séparés, mais je pense qu'il y a place à considérer. Ce qui me satisfait avec ce correctif, c'est que le processus de génération de message et le processus de définition de message peuvent être séparés. Par exemple, on peut voir que le processus de définition de message suivant est toujours appelé même si la génération de message est davantage branchée et modifiée pour produire un message différent.

Article précédent (trop d'arguments de fonction)

Article suivant (Getter, problème inverse de Setter)

Table des matières

Recommended Posts

Est-il possible de séparer les appels de fonction et les branches conditionnelles? - Je veux vous donner une chance d'écrire du bon code. 9 [Exemple de refactoring C #]
Trop d'arguments de fonction - je veux vous donner une chance d'écrire du bon code. 8 [Exemple de refactoring C #]
Easy Null Check-Je veux vous donner une chance d'écrire du bon code. 6 [Exemple de refactoring C #]
Une petite collection de code inquiétante - je veux vous donner une chance d'écrire du bon code. 2 [Exemple de refactoring C #]
Gestion des types booléens - Je veux vous donner une chance d'écrire du bon code. 7 [Exemple de refactoring C #]
Une interface fluide? -Je veux vous donner l'occasion d'écrire du bon code. 3 [Exemple de refactoring C #]
Traitement inutile des collections - je veux vous donner une chance d'écrire du bon code. 5 [Exemple de refactoring C #]
Easy Null Check-Je veux vous donner une chance d'écrire du bon code. 6 [Exemple de refactoring C #]
Une petite collection de code inquiétante - je veux vous donner une chance d'écrire du bon code. 2 [Exemple de refactoring C #]
Gestion des types booléens - Je veux vous donner une chance d'écrire du bon code. 7 [Exemple de refactoring C #]
Trop d'arguments de fonction - je veux vous donner une chance d'écrire du bon code. 8 [Exemple de refactoring C #]
Traitement inutile des collections - je veux vous donner une chance d'écrire du bon code. 5 [Exemple de refactoring C #]
Une interface fluide? -Je veux vous donner l'occasion d'écrire du bon code. 3 [Exemple de refactoring C #]
Est-il possible de séparer les appels de fonction et les branches conditionnelles? - Je veux vous donner une chance d'écrire du bon code. 9 [Exemple de refactoring C #]
Comment écrire du bon code
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Je veux écrire une simple répétition d'une chaîne de caractères
7 choses que je veux que tu gardes pour que ça ne devienne pas un putain de code
Je voudrais résumer Apache Wicket 8 car c'est une bonne idée
7 choses que je veux que tu gardes pour que ça ne devienne pas un putain de code
Je veux créer une fonction avec kotlin et java!
Je veux écrire un joli build.gradle
Je veux écrire un test unitaire!
Je veux écrire une simple répétition d'une chaîne de caractères
Si hash [: a] [: b] [: c] = 0 dans Ruby, je veux que vous étendiez récursivement même si la clé n'existe pas