Statements vs expressions.

En este post te voy a explicar cuál es la diferencia entre un statement y una expression.

Primeros pasos.

Una expresión (expression) es un conjunto de instrucciones que producen un resultado. En cambio, una sentencia (statement) es un conjunto de instrucciones que no producen un resultado explícito.

Este concepto puede variar entre lenguajes de programación, por ejemplo, las estructuras de control, en algunos lenguajes las puedes considerar como sentencias, y en otros, funcionan como sentencias y expresiones. Ambos tipos de instrucciones son necesarias para escribir un programa.

En el caso del paradigma funcional, las expresiones son preferidas debido a que, en teoría, ofrecen una mejor transparencia referencial. Esto depende de como se escriba la expression.

No todos los lenguajes son iguales.

En lenguajes como Scala o Ruby, todo, o casi todo, puede considerarse una expresión. Por ejemplo, un bloque if puede ser asignado a una variable, lo que lo convierte en una expresión. En el caso de C#, un bloque if no es una expression y causará un error de compilación si se intenta asignar a una variable.

En el ejemplo anterior, intente asignar un método de tipo void, y una sentencia if en C#, solo obtuve errores de compilación, porque el lenguaje no ve estos elementos como expresiones, sino como sentencias.

En el caso de Scala, esto es posible.

Un método que no retorna nada, puede ser asignado como una expresión. Se podría decir que en Scala no existen las sentencias. Asignar un método sin retorno a una variable no hace sentido, únicamente es un ejemplo.

Conclusiones.

Estos conceptos no son universales, y pueden variar dependiendo del lenguaje, tecnologias o paradigma que ocupes. Incluso, esta distinción entre código que retorna un resultado e instrucciones que no, puede encontrarse con métodos y procedimientos en otros lenguajes. La diferencia entre estos conceptos es importante si estás trabajando con paradigma funcional o high order functions.

Referencias:

  1. https://www.learningjournal.guru/article/scala/functional-programming/statements-and-expressions-in-scala/#google_vignette 

 

Gustavo Sánchez