A digitação estática não requer necessariamente cerimônias

Nota do tradutor: Atualmente, estou preparando materiais para o artigo prometido sobre mônadas. Infelizmente, isso leva muito tempo, sem mencionar que ainda tenho que fazer o trabalho principal e dedicar tempo à família, mas o processo está em andamento. Enquanto isso, apresento a você uma tradução de uma pequena nota do maravilhoso camarada Mark Seemann, que achei curioso .


Costumo me tornar parte de um longo e acalorado debate sobre tipagem estática versus tipagem dinâmica. Definitivamente, me considero um defensor da tipagem estática, mas este artigo não trata das virtudes da tipagem estática. O objetivo do artigo é eliminar um equívoco comum sobre linguagens estaticamente tipadas.


Cerimônia


As pessoas que preferem idiomas tipificados dinamicamente a idiomas estaticamente tipicamente enfatizam o fato de que a falta de cerimônia os torna mais produtivos. Isso parece lógico, no entanto, é uma falsa dicotomia.


Uma cerimônia é o que você faz antes de começar a fazer o que realmente faria.

Venkat subramaniam

As linguagens de tipo dinâmico dão a impressão de que elas não precisam de cerimônias especiais, mas não se pode concluir disso que as linguagens de tipo estaticamente as exijam. Infelizmente, todas as principais linguagens estaticamente tipadas pertencem à mesma família e requerem cerimônia. Eu acho que as pessoas extrapolam o que sabem sobre elas, concluindo falsamente que todas as línguas de tipo estaticamente vêm necessariamente com uma cerimônia aérea.


Isso me levou à ideia de que existe uma Zona Cerimonial infeliz:



Obviamente, este diagrama é apenas uma simplificação, mas espero que demonstre a essência. C ++, Java e C♯ são linguagens que requerem cerimônia. À direita, estão os idiomas que poderíamos chamar de trans-cerimoniais, incluindo F♯ e Haskell.


Abaixo mostrarei o código em vários idiomas. Consideraremos a cerimônia como definida acima, prestando atenção à quantidade de trabalho preparatório que precisa ser feito, como criar novos arquivos, declarar classes, declarar tipos e assim por diante. Deixei o código que não está relacionado ao tópico em discussão para enfatizar o que quero transmitir.


Um pequeno número de cerimônias em JavaScript


Digamos que temos uma lista de números e mais um número. Este número indica quantos itens da lista devem ser removidos. Você precisa excluir itens à esquerda até que a soma dos números excluídos seja maior que esse número. O resultado será o restante da lista.


> 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/pt482834/


All Articles