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.
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);
}
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);
}
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.
//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);
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);
}
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)
Recommended Posts