La saisie statique ne nécessite pas nécessairement des cérémonies

Note du traducteur: Je prépare actuellement des documents pour l'article promis sur les monades. Malheureusement, cela prend beaucoup de temps, sans parler du fait que je dois encore faire le travail principal et consacrer du temps à la famille, mais le processus est en cours. En attendant, je vous présente la traduction d'une petite note fraîche d'un merveilleux camarade Mark Seemann, que j'ai trouvée curieuse .


Je participe souvent à un débat long et passionné sur le typage statique contre le typage dynamique. Je me considère définitivement comme un partisan de la frappe statique, mais cet article ne traite pas des vertus de la frappe statique. Le but de l'article est d'éliminer une idée fausse commune sur les langues typées statiquement.


Cérémonie


Les personnes qui préfèrent les langues à typage dynamique aux langues à typage statique soulignent souvent le fait que le manque de cérémonie les rend plus productives. Cela semble logique, cependant, c'est une fausse dichotomie.


Une cérémonie est ce que vous faites avant de commencer à faire ce que vous alliez vraiment faire.

Venkat subramaniam

Les langages typés dynamiquement donnent l'impression qu'ils n'ont pas besoin de cérémonies spéciales, mais on ne peut en conclure que les langages typés statiquement en ont besoin. Malheureusement, toutes les langues typées statiquement dominantes appartiennent à la même famille et nécessitent une cérémonie. Je pense que les gens extrapolent ce qu'ils savent d'eux, concluant à tort que toutes les langues typées statiquement viennent nécessairement avec une cérémonie indirecte.


Cela m'a conduit à l'idée qu'il existe une malheureuse zone de cérémonie :



Bien sûr, ce diagramme n'est qu'une simplification, mais j'espère qu'il en démontre l'essence. C ++, Java et C♯ sont des langages qui nécessitent une cérémonie. À leur droite se trouvent des langues que nous pourrions appeler trans-cérémoniales, y compris F♯ et Haskell.


Ci-dessous, je vais montrer le code dans différentes langues. Nous considérerons la cérémonie telle que définie ci-dessus, en faisant attention à la quantité de travail préparatoire qui doit être effectuée, comme la création de nouveaux fichiers, la déclaration de classes, la déclaration de types, etc. J'ai laissé le code qui n'est pas lié au sujet en discussion pour souligner ce que je veux transmettre.


Un petit nombre de cérémonies en JavaScript


Disons que nous avons une liste de chiffres, et un autre nombre. Ce nombre indique combien d'éléments de la liste doivent être supprimés. Vous devez supprimer les éléments sur la gauche jusqu'à ce que la somme des nombres supprimés soit supérieure à ce nombre. Le résultat sera le reste de la liste.


> consume ([1,2,3], 1);
[ 2, 3 ]
> consume ([1,2,3], 2);
[ 3 ]
> consume ([1,2,3], 3);
[ 3 ]
> consume ([1,2,3], 4);
[]

, 1, 2, 3, quantity 2 3 . , quantity 4, , . , 1 3.


JavaScript :



JavaScript-, , , , . 17 , . , , , . JavaScript . , , , .


C♯


JavaScript C♯. C♯ :



, . . , , , , .


. int . , long?


:



short? . decimal? . byte? .


, .


F♯


F♯ :



, . , :


quantity: ^a -> (seq< ^b> -> seq< ^b>)
  when ( ^a or  ^b) : (static member ( + ) :  ^a *  ^b ->  ^a) and
        ^a : (static member get_Zero : ->  ^a) and  ^a : comparison

, , , , . , decimal, :


> consume 2 [1;2;3];;
val it : seq<int> = seq [3]

> consume 2m [1m;2m;3m];;
val it : seq<decimal> = seq [3M]

, . consume "foo" [true;false;true] .


F♯ ( , C♯), : . , " ". , , , , - .


Haskell


Haskell:



. . GHCi , :


> :t consume
consume :: (Foldable t, Ord a, Num a) => a -> t a -> [a]

F♯ , . Foldable ( , . ), , Ord Num. Num , Ord — .


, F♯ Haskell , . , , C♯ Java. , .



, C++, Java C♯. , , , , .


, .


, F♯ Haskell. -. : .

Source: https://habr.com/ru/post/fr482834/


All Articles