La escritura estática no necesariamente requiere ceremonias

Nota del traductor: Actualmente estoy preparando materiales para el artículo prometido sobre mónadas. Desafortunadamente, esto lleva mucho tiempo, sin mencionar que todavía tengo que hacer el trabajo principal y dedicar tiempo a la familia, pero el proceso está en curso. Mientras tanto, les presento una traducción de una pequeña nota fresca de un maravilloso camarada Mark Seemann, que me pareció curiosa .


A menudo me convierto en parte de un largo y acalorado debate sobre la escritura estática versus la escritura dinámica. Definitivamente me considero un defensor de la escritura estática, pero este artículo no trata sobre las virtudes de la escritura estática. El propósito del artículo es eliminar una idea errónea común sobre los idiomas escritos estáticamente.


Ceremonia


Las personas que prefieren los idiomas de escritura dinámica a los idiomas de escritura estática a menudo enfatizan el hecho de que la falta de ceremonia los hace más productivos. Esto suena lógico, sin embargo, es una falsa dicotomía.


Una ceremonia es lo que haces antes de comenzar a hacer lo que realmente ibas a hacer.

Venkat subramaniam

Los idiomas escritos dinámicamente dan la impresión de que no necesitan ceremonias especiales, pero no se puede concluir que los idiomas escritos estáticamente los requieran. Desafortunadamente, todos los idiomas principales escritos de forma estática pertenecen a la misma familia y requieren ceremonia. Creo que las personas extrapolan lo que saben acerca de ellos, concluyendo falsamente que todos los idiomas escritos estáticamente necesariamente vienen con una ceremonia general.


Esto me llevó a la idea de que hay una zona ceremonial desafortunada:



Por supuesto, este diagrama es solo una simplificación, pero espero que demuestre la esencia. C ++, Java y C♯ son lenguajes que requieren ceremonia. A su derecha hay idiomas que podríamos llamar trans-ceremoniales, incluidos F♯ y Haskell.


A continuación, mostraré el código en varios idiomas. Consideraremos la ceremonia como se definió anteriormente, prestando atención a la cantidad de trabajo preparatorio que debe hacerse, como crear nuevos archivos, declarar clases, declarar tipos, etc. Dejé el código que no está relacionado con el tema en discusión para enfatizar lo que quiero transmitir.


Un pequeño número de ceremonias en JavaScript.


Digamos que tenemos una lista de números, y uno más. Este número indica cuántos elementos de la lista se deben eliminar. Debe eliminar elementos de la izquierda hasta que la suma de los números eliminados sea mayor que este número. El resultado será el resto de la 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/482834/


All Articles