Les bibliothèques JavaScript telles que jQuery, combinent 'getters' et 'setters' dans l'interface de programmation par exemple:
$('element').css({'color','blue'});
définira la couleur ou
$('element').css();
obtiendra le css pour un élément.
Existe-t-il un nom pour un tel modèle et est-ce une bonne pratique à utiliser dans les applications?
la source
Cela s'appelle «surcharge de méthode» dans les langages OO ou «surcharge de fonction» dans les langages non OO.
Que ce soit ou non une bonne pratique est un sujet de débat presque autant que les getters / setters contre les membres du public. Ceux du côté des pour et des contre se sont probablement fait les dents sur les langues qui avaient cette fonctionnalité ou non et qui sont définies à leur manière. Je l'utilise et j'aime la pratique pour plusieurs raisons:
get
ouset
ajouter au nom de la méthode ajoute de la verbosité.int
et un pourdouble
), la modification du type dans le LHS d'une affectation (int x = foo.bar()
vs.double x = foo.bar()
) ne nécessite pas de changement de code (barAsInteger()
vs.barAsDouble()
) vers la droite si la classe fournit les deux. L'inconvénient de ceci est qu'il peut parfois être difficile de savoir exactement quelle méthode est appelée simplement en regardant le code.la source
Étant donné que JavaScript n'a pas de propriétés réelles (où la définition d'une valeur peut réellement exécuter du code), le motif est celui qui implémente l'idiome de la propriété. (Même si vous l'appelez autrement.)
Donc, dans les langues implémentant des propriétés réelles, vous feriez ceci à la place:
Si vous deviez utiliser le modèle JavaScript dans un langage qui gère les propriétés, vous feriez quelque chose d'anormal. Ce ne serait probablement pas une bonne idée. Gérez les propriétés de la façon dont le langage est censé les gérer, afin de ne pas confondre les autres personnes qui travaillent avec vous.
la source
Je pense que tu cherches
properties
la source
person.salary('10000')
ouperson.salary()
ou similaire.Je suis un peu totalement contre cela pour une raison simple: une classe, une méthode ou une fonction devrait juste faire une chose - à mon avis, et combiner les
getter
etsetter
méthode violera cette règle. Résultat:return
valeur de la fonction varie en fonction de l' exécution du getter ou du setter block. Celui-ci peut simplement vous entraîner dans un cauchemar de maintenabilité. Votre méthode ne doit renvoyer qu'un seul type de données / objet dans tous les cas - ou renvoyernull
,false
ou jeter unexception
en cas d'erreur.Blrfl
réponse.la source