Les paramètres optionnels sont très bien
Généralement, la justification est soit a) vous savez que vous avez beaucoup d'arguments possibles pour votre méthode, mais vous ne voulez pas surcharger de peur de surcharger votre API, ou b) lorsque vous ne connaissez pas tous les arguments possibles, mais vous ne voulez pas forcer votre utilisateur à fournir un tableau. Dans chaque cas, les paramètres facultatifs viennent à la rescousse d'une manière soignée et élégante.
Voici quelques exemples:
1. Vous voulez éviter la surcharge et ne souhaitez pas spécifier de tableau
Jetez un œil à printf () de C, Perl, Java etc. C'est un excellent exemple de la puissance des paramètres optionnels.
Par exemple:
printf("I want %d %s %s",1,"chocolate","biccies");
printf("I want %d banana",1);
Pas de surcharge, pas de tableaux, simple et intuitif (une fois que vous avez saisi les codes de format de chaîne standard). Certains IDE vous diront même si votre chaîne de format ne correspond pas à vos paramètres facultatifs.
2. Vous souhaitez autoriser l'utilisation des valeurs par défaut et les cacher à l'utilisateur de la méthode
sendEmail ("test@example.org");
La méthode sendEmail détecte que diverses valeurs essentielles sont manquantes et les remplit en utilisant des valeurs par défaut définies (sujet, corps, cc, bcc, etc.). L'API est maintenue propre, mais flexible.
Une note sur trop de paramètres
Cependant, comme d'autres l'ont dit, avoir trop de paramètres obligatoires pour une méthode indique que vous avez probablement quelque chose de mal avec votre conception. Cela est particulièrement vrai s'ils partagent le même type car ils peuvent être modifiés par le développeur par accident, ce qui conduit à des résultats étranges lors de l'exécution:
String myMethod(String x, String y, String z, String a, int b, String c, int d) {}
est un candidat idéal pour le refactoring Introduce Object Parameter pour créer
String myMethod(ParameterObject po) {}
class ParameterObject {
// Left as public for clarity
public String x;
public String y;
... etc
}
À son tour, cela peut conduire à une meilleure conception basée sur un modèle d'usine avec une spécification fournie comme objet de paramètre.