Ce n'est pas cohérent dans le sens où certaines fonctions auront des préconditions, et d'autres non, alors qu'elles font presque la même chose. De même, les préconditions ne seront pas les mêmes d'une fonction à l'autre, de quoi perdre l'utilisateur de l'API.
De plus, les préconditions sont là pour vérifier que le domaine des paramètres est correct, or une liste vide fait parti du domaine auquel la fonction peut logiquement s'attendre.
Pas en détail, mais il faut qu'il en ai un a priori pour comprendre la pré-condition.
Je ne dis pas que les pré-conditions sont "mauvaises" et qu'il ne faut pas les utiliser.
Par exemple, si tu as un graphe, les préconditions peuvent être compliquées, mais tu t'attends à ce que ta fonction reçoive un graphe "valide". Dans ce cas tu peux proposer une fonction isValid(), si jamais l'utilisateur a besoin de se passer du try/catch.
Pour le reste, tu peux retourner null, et c'est à l'utilisateur de vérifier la valeur de retour et de lancer une erreur. Sinon, tu vas te retrouver avec des :
Parce que les préconditions seront trop compliquées/enquiquinantes pour écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 let x; try{ x = foo(); } catch(e) {} faa(x);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 let x = null; if(? y /* TODO */ ) x = foo(y); faa(x);
Je pense que le JavaScript est un langage de "prototypage", un peu comme python. Ce n'est pas fait pour cela.
Si tu n'as pas de typage statique, cela devient enquiquinant de vérifier le type de chaque paramètre, et encore plus quand il s'agit de liste ou de listes de listes d'entiers, où il faut vérifier chaque éléments un à un.
Alors si ta fonction a pour vocation d'être appelée dans un boucle assez grosse, et ta liste est assez grosse... cela peut devenir impossible à exécuter.
Derrière, je ne peux pas décider de si je mets des préconditions en fonction du nombre de fois que ma fonction est appelée.
Ok pour find_*
Partager