web-dev-qa-db-fra.com

Comment les systèmes de type dans les langues fonctionnelles diffèrent de ceux IN OO Langues?

Je continue à lire des histoires de développeurs qui indiquent qu'une fois qu'ils sont capables d'obtenir le FP sont écrits dans des langues comme Haskell, OCAML, ELM et même la rouille, pour compiler sans erreurs, elles sont à peu près sûres que Les programmes fonctionneront correctement.

Ils indiquent généralement qu'il est principalement dû aux systèmes de type de ceux-ci FP Langues. Alors, comment les systèmes de type IN FP Langues comme Haskell, ELM, etc. Différent de ceux dans des langues comme Java, Delphi et C #?

Je connais ce dernier et au courant de la manière dont les compilateurs captent des erreurs lorsque les signatures de fonction et les types de paramètres ne correspondent pas, mais il semble que les systèmes de type de FP Langues s'étend au type de logique , opérations ou domaines où les appels aux procédures fonctionneront.

Quelqu'un peut-il donner une bonne explication?

MISE À JOUR: En référence à Que fait exactement le système de type HASKELLL tellement vénéré (vs dire, Java)? , je dois dire que je ne comprends pas les réponses à cette question. Les réponses semblent ciblées à ceux qui sont déjà familiarisés avec la programmation fonctionnelle.

16
vfclists

Pour la plupart des langues fonctionnelles, les langues fonctionnelles sont-elles bien mieux mises en place davantage du programme sous la version PURVIEW du système de type. Par exemple, quelle est la valeur de retour d'A pour la boucle? Dans un style impératif, vous utilisez des boucles partout et que le vérificateur de type ne peut pas vous aider du tout avec eux. En revanche, dans un style fonctionnel, vous utiliseriez un map, filter, fold, ou même récursivité au lieu de la boucle pour la boucle, qui ont toutes une sémantique de type très forte.

Si vous évitéez des fonctions impures et des boucles impératives dans un langage "impératif", vous auriez une expérience similaire à la programmation des personnes dans des langues "fonctionnelles", en ce qui concerne les programmes de caractères typiques qui ont tendance à travailler, bien que votre programme soit plus verbeux que celui écrit dans une langue conçue pour être écrite dans un style fonctionnel.

9
Karl Bielefeldt