Envoyé par
SpiceGuid
Je vois mal comment ta fonction pourrait être autre chose que l'identité:
1 2
| # let f (g:'a->'b) = g;;
val f : ('a -> 'b) -> 'a -> 'b = <fun> |
Et bien tu vois mal.
Ce qui démontre que le type n'est pas la chose la plus efficace.
1 2 3 4 5
|
# let id a = a ;;
val id : 'a -> 'a = <fun>
# let application f x = f x ;;
val application : ('a -> 'b) -> 'a -> 'b = <fun> |
Et on s'entend que c'était un exemple idiot car particulièrement simple.
Dans une autre de mes applications j'ai une signature qui donne
val f: float -> float array array
Comment pourriez vous devinez ce que fais f franchement ?
C'est pour cela qu'en fait ma signature donne
val f : angle:float -> matrice = <fun>
Je rajoute une étiquette pour que cela aide et je renomme le type float array array en matrice. Pourtant c'est loin d'être évident.
Si on rajoute le nom
creer_matrice_rotation_Ox
Ça indique ce que ça fait non ?
Le typage aide mais le nom est bien plus indicateur.
Je continue à penser que l'intérêt du type dans la compréhension d'une fonction est très inférieur au nom de la fonction. Et qu'on ne me dise pas que ce n'est pas ce que certains ont dit... c'est facile de retrouver les messages.
---
Donc je me requote moi même
Encore une fois, je n'ai pas dit que le typage est inutile: dans ma réponse je disais que si le programme est mal fait le typage ne t'aide pas ! Si le programme est bien fait, le typage aide c'est sûr.
Et en paraphrasant en quelque sorte Jedaï, je vous dirais que vous vous obstinez à me dire le contraire, alors que je n'ai fait qu'énoncer une évidence. Si un programme est bien écrit, le nom d'une fonction est l'outil numéro 1 pour le comprendre. C'est le principe d'abstraction fonctionnelle qui limite la vue des détails pour nommer une tâche par un nom explicite. De plus, le type ajoute de l'information. Et la documentation donne les derniers détails.
Êtes vous toujours en désaccord avec ce que je dis là ?
Partager