Como programación en JavaScript, he notado que todo lo que se puede hacer con sentencias y bloques se puede hacer solo con expresiones. ¿Puede un lenguaje de programación funcionar bien solo con expresiones? Y, en caso afirmativo, ¿por qué se utilizan declaraciones?
programming-languages
javascript
language-design
MaiaVictor
fuente
fuente
Respuestas:
Por supuesto. La forma más simple es asignar un valor de resultado a cada construcción que actualmente es una declaración y, por lo tanto, convertirla en una expresión. Sin embargo, eso no es necesariamente útil o significativo. La única ganancia potencial es un poco de simplicidad conceptual. Sin embargo, si luego procede a eliminar cosas como punto y coma y bucles (que requieren encadenamiento a través de otros operadores y funciones), los programas que usan en gran medida declaraciones se vuelven feos.
Una forma más radical pero significativa de hacer esto es diseñar el lenguaje de manera que casi todo tenga un valor significativo, y usarlo de una manera que casi siempre use una expresión para ese valor significativo, no para otros efectos. Los lenguajes de programación funcional hacen esto (hasta cierto punto; por ejemplo, Haskell tiene declaraciones, que no son expresiones).
Las declaraciones se usan porque en el paradigma imperativo, hay muchas operaciones comunes que no tienen un valor de resultado útil, y porque la noción de instrucciones secuenciales (en lugar de cálculos) se ajusta bastante bien a ese paradigma. Si un gran porcentaje de su programa está mutando, en lugar de calcular nuevos valores, no tiene sentido exigir la producción de un valor (¿cuál es el resultado de un ciclo for?). Por el contrario, cuando todo su paradigma (FP) se basa en el cálculo de valores, los valores atípicos que no tienen un valor de resultado no garantizan una excepción: en cambio, les da un resultado centinela que no significa nada.
fuente
void
ynull
/unit
es que estos últimos son valores y se pueden pasar, mientras quevoid
es especial porque no hay ningún valor de ese tipo.Depende de cómo se defina "declaración" y "expresión".
Una definición muy estricta distinguiría entre afirmaciones como "cosas que tienen efectos secundarios, y tal vez un valor de retorno" y expresiones como "cosas que tienen valores de retorno, pero no pueden tener efectos secundarios". Con tal definición, no se puede escribir ningún programa significativo sin al menos una declaración (que tendría que evaluar una expresión y generar su valor de retorno): las expresiones puras por sí solas no pueden interactuar con el mundo fuera del programa. Un lenguaje solo puede ser completamente puro (es decir, no tener ningún enunciado), si la parte impura se saca del lenguaje y se introduce en el ecosistema de soporte (que es exactamente lo que hace Haskell, aunque el lenguaje tiene definiciones y expresiones) .
Sin embargo, si permite efectos secundarios en las expresiones, la distinción entre declaraciones y expresiones se vuelve arbitraria y mucho menos interesante; por supuesto, puede inventar un lenguaje de programación que consista solo en expresiones; la mayoría de los dialectos de Lisp funcionan de esa manera. En tal situación, evaluar una expresión por sus efectos secundarios es casi exactamente lo mismo que ejecutar una declaración, y uno podría argumentar que en dicho lenguaje, las expresiones y las declaraciones son lo mismo. La diferencia entre una declaración y una expresión, entonces, es solo sintáctica.
Muchos idiomas aún hacen esta distinción sintáctica, porque es útil no por razones técnicas, sino por legibilidad. Hacer que algo sea una expresión indica que está interesado en su valor de retorno, menos sus efectos secundarios; al hacer una declaración le dice al lector que tiene la intención de que cause efectos secundarios, y el valor de retorno puede o no ser interesante.
fuente
ATL y Xtend son lenguajes de programación que funcionan bien sin enunciados. Muchos lenguajes funcionales también son sin enunciados. Entonces, sí, un lenguaje de programación puede funcionar bien sin declaraciones. Creo que las declaraciones son en muchos idiomas una reliquia de la programación imperativa. Todavía se usan porque son ampliamente conocidos y, en algunos casos, hacen que el código sea más legible.
fuente
Si.
Lenguajes funcionales (y lenguajes de asignación única) todo es una expresión. Ejemplos son Haskal (y SISAL). Donde ambas declaraciones if y for loops devuelven valores.
Hay otras clases de idiomas: el más fácil que me viene a la mente es el lenguaje declarativo (estoy seguro de que hay muchos otros que no dependen de las declaraciones). Estos lenguajes ni siquiera necesitan expresiones (en el mismo sentido que normalmente pensarías). Usted declara lo que es verdad y puede obtener múltiples resultados. La fácil aquí es
prolog
.fuente