Convention d'appel objet puis abstraction
31 Octobre 2011
Les programmeurs doivent, en plus de se souvenir des noms des fonctions qu'ils utilisent, connaître l'ordre de leurs arguments. L'utilisation d'IDE simplifie le travail, en affichant en direct la définition d'une fonction au moment de son appel, de même que l'utilisation d'arguments nommés, notamment en ce qui concerne la lisibilité du code. Des conventions simples peuvent également faciliter la vie, conventions pouvant même être encouragées par la syntaxe du langage.
Objet
L'un des principaux apports de la programmation orientée objet a sans doute été de regrouper la définition des méthodes avec les objets auxquels elles font référence. Lors de leurs appels, la syntaxe :
obj.meth(arg1, arg2)
impose un rôle prépondérant à l'argument obj et facilite la mémorisation, l'idée étant que la donnée de travail principale d'une fonction doit toujours être placée en tête. Dans un langage non-objet on devrait aussi continuer à écrire dans l'ordre :
meth(obj, arg1, arg2)
Abstraction
En programmation fonctionnelle, on est souvent amené à passer des fonctions anonymes en arguments. En fait, en pratique, les fonctions ne prennent souvent qu'un seul argument fonctionnel. Cet argument s'écrivant fréquemment sur plusieurs lignes, il est préférable qu'il soit donné en dernier pour éviter d'avoir des mini-arguments qui traînent tous seuls à la fin. Là encore certains langages imposent cette convention par la syntaxe, comme Ruby avec la notion de « blocks », abstractions placées nécessairement en fin d'appel :
3.upto(12) do |i|
puts i
end
Curryfication
La curryfication, bien qu'élégante d'un point de vue théorique, impose je pense de mauvaises pratiques, en encourageant un ordre d'arguments uniquement sur la base des appels de fonction partiels les plus souvent faits. Par exemple :
map (fun x -> x + 1) list
ne respecte pas les conventions introduites ci-dessus, simplement car on veut pouvoir écrire par curryfication :
let incr_list = map (fun x -> x + 1)blog comments powered by Disqus