C'est ce que j'appelle une méthode getter / setter "combinée" (de jQuery):
var foo = $("<div>This is my HTML</div>"),
myText;
myText = foo.text(); // myHTML now equals "This is my HTML" (Getter)
foo.text("This is a new value"); // The text now equals "This is a new value")
C'est la même logique avec des méthodes (théoriques) distinctes:
var foo = $("<div>This is my HTML</div>"),
myText;
myText = foo.getText(); // myHTML now equals "This is my HTML" (Getter)
foo.setText("This is a new value"); // The text now equals "This is a new value")
Ma question:
Lors de la conception d'une bibliothèque comme jQuery, pourquoi décideriez-vous de suivre la première voie et non la seconde? La deuxième approche n'est-elle pas plus claire et plus facile à comprendre en un coup d'œil?
design
javascript
Levi Hackwith
la source
la source
Réponses:
Purement spéculant ici, mais je serais porté à croire que les développeurs de jQuery qui ont utilisé beaucoup de style fonctionnel pour structurer jQuery ont clairement un penchant vers le paradigme fonctionnel.
Étant donné que, dans le paradigme fonctionnel, il existe une forte culture de réduction de la redondance, et on pourrait soutenir que la deuxième approche a une redondance inutile. La première approche peut ne pas être claire pour une personne habituée à tous les langages impératifs communs, mais elle fait incontestablement plus avec moins en n'ayant qu'une seule méthode au lieu de deux. Cela peut être dangereux, mais c'est un outil courant dans le paradigme fonctionnel et quelque chose auquel on s'habitue rapidement.
Pratiquez dans le paradigme fonctionnel et vous surmontez rapidement ce désir de cérémonie et apprenez à apprécier la capacité de faire plus avec moins. Bien que ce soit évidemment un choix subjectif basé sur la préférence de la même manière que beaucoup de gens ont des préférences concernant la gestion des espaces blancs. De cette façon, je ne dis pas qu'une façon est meilleure, mais plutôt que ce sont des choses auxquelles les gens s'habituent, ce qui explique probablement pourquoi jQuery a l'approche qu'il utilise.
Ce serait la raison pour laquelle je pense que les développeurs de jQuery l'ont fait et c'est généralement pourquoi quelqu'un pourrait adopter cette approche.
la source
La forme
peut impliquer un certain nombre de choses. Le plus souvent, il suggère un
foo
objet, avec une méthode appeléetext
accepter une chaîne, qui fait quelque chose . Il n'y a aucune implication que c'est une propriété du tout.Dans de nombreuses langues, cela peut être considéré comme une forme abrégée de
où le résultat est rejeté. Cette approche est donc trop ambiguë pour être un moyen efficace de définir une propriété (du point de vue de la lisibilité du code).
la source
C'est un peu spéculatif, mais voici ma chance.
jQuery embrasse pleinement la nature fonctionnelle de javascript. C'est ce qui le rend si génial, mais cela peut laisser beaucoup de développeurs se gratter la tête lorsqu'ils viennent d'un langage plus purement OO tel que java. Il semble rompre toutes les conventions et bonnes pratiques.
Le langage fonctionnel a tendance à mettre l'accent sur une syntaxe déclarative. Il a tendance à se lire comme l'énoncé d'un fait plutôt que comme des commandes. Exemple
qui peut être lu comme "le client éligible est celui dont l'âge est supérieur à 30 ans". Par contraste, le langage impératif se lit comme une séquence de commandes
Cela peut être lu comme "Vérifiez chaque client, et si son âge est supérieur à 30 ans, ajoutez-le à la collection éligible"
L'ajout de aa
set
et d'uneget
opération donnerait à jQuery l'impression d'être une bibliothèque impérative. Vous pouvez comparer la façon de lire les déclarations suivantesEn gardant le verbe d'actions hors de l'API jQuery, ils l'ont fait ressembler à une API déclarative. Il donne une sensation cohérente et fonctionnelle à la bibliothèque. C'est pourquoi je pense qu'ils ont surchargé les mots clés.
la source
Cela le fait se comporter un peu plus comme des propriétés , qui n'ont été introduites que récemment dans JavaScript, et ne sont donc pas encore largement utilisées, en particulier dans les bibliothèques comme jQuery qui sont destinées à aider à éliminer les incompatibilités du navigateur.
Si vous avez déjà regardé une définition de classe remplie de telles propriétés, les préfixes "set" et "get" semblent superflus, car l'ajout du paramètre value vous indique déjà qu'il s'agit d'un setter. Martin Fowler fait un bon point sur les getters qui nécessitent un paramètre, mais même dans ce contexte, le paramètre de valeur supplémentaire désigne clairement un setter, ainsi que le fait qu'un setter apparaît rarement sur le côté droit d'une affectation. Et quand vous écrivez du code, vous devez quand même consulter la documentation de la bibliothèque.
Puisque vous n'avez demandé que des avantages, je ne couvrirai pas les inconvénients.
la source