Expresiones y asignación (A3C34A1D06)

Expresiones y asignación

Las expresiones son el mecanismo fundamental de cómputo de los programas, y se trata de la instrucción más básica que podemos utilizar cuando desarrollamos un programa. Las expresiones están formadas por valores (p. ej., 4 o 546) y operadores (p. ej., + o -), y se pueden evaluar por el computador para obtener un único valor o provocar algún efecto deseado.

Por ejemplo, podríamos construir una expresión que sume dos números dados utilizando una expresión como 2+3. Esta expresión estaría formada por los valores 2 y 3, y el operador de suma (+). La evaluación de dicha expresión resultaría en el valor 5. Así, podemos crear expresiones de diferentes formas mediante la combinación de operandos (números, variables, etc.) y operadores (matemáticos, lógicos, etc.).

Veamos a continuación los diferentes tipos de expresiones que existen en la mayoría de los lenguajes de programación.

Expresiones de asignación de variables

Como ya hemos visto anteriormente, las variables permiten al programa almacenar valores para trabajar con ellos posteriormente. En este sentido, las variables resultan ideales para guardar el valor resultante de evaluar una expresión y poder encadenar así expresiones a lo largo del programa.

Utilizando esta técnica podríamos conseguir almacenar, por ejemplo, el valor 23 en una variable llamada número utilizando la siguiente expresión:

número = 23

Este tipo de expresiones se denomina expresiones de asignación de variables y están formadas por el operador de asignación (=) que divide la expresión de asignación de variable en una parte izquierda y una parte derecha. En la parte derecha del operador se encontrará la expresión cuya evaluación queremos guardar, mientras que en la parte izquierda se encontrará la variable que servirá almacenar  el resultado de dicha evaluación. Como apunte adicional, almacenar un valor en una variable por primera vez antes de que se utilice en el programa se denomina «inicializar una variable». Esto es importante porque una variable puede tener un valor inesperado si no se inicializa, lo que puede causar errores en el programa. Además, inicializar una variable asegura que siempre tenga un valor válido y conocido, lo que puede facilitar la corrección de errores y el mantenimiento del código.

Veamos algunos ejemplos de este tipo de expresiones y el resultado de sus evaluaciones:

1 | numero_impar = 23
2 | numero_par = 4
3 | resultado = numero_impar + numero_par
4 | numero_impar = resultado

En la línea 1 se inicializa una variable con el resultado de evaluar la expresión a la derecha del operador de asignación (=), guardando así el valor 23 en la variable numero_impar. De igual forma, en la línea 2, se inicializa otra variable (numero_ par) con el valor 4. Después, en la línea 3 se ejecuta una expresión en la que se evalúa la suma de las variables creadas con el valor 27, asignando el resultado a la variable resultado. Finalmente, en la línea 4 se asigna el valor de la variable resultado (27) a la variable numero_impar, sustituyendo el valor de esta última (23) por el de la primera (27).

Atención

Como se acaba de mencionar en el texto, una variable se puede inicializar (crear) la primera vez que se le asigna un valor. Tras esto, dicha variable puede ser usada en cualquier expresión posterior con otras variables y valores. Las siguientes asignaciones que sufra dicha variable simplemente sustituirán el valor que tuviera anteriormente por el resultado obtenido tras la nueva evaluación, pero sin crear una nueva variable con el mismo nombre.

Además de utilizar expresiones de asignación de variables a partir de otras expresiones definidas en el código del programa, existen expresiones cuya evaluación resulta en obtener datos de otras fuentes de datos como, por ejemplo, otros dispositivos de entrada. Estaríamos hablando, en este caso, de ejecutar una expresión de asignación de variables evaluando alguna otra  expresión que sea capaz de leer los valores desde el propio teclado del computador, por ejemplo:

1 | saludo = leer_teclado()

En la línea 1, la expresión de la derecha del operador de asignación detendrá la ejecución del programa hasta que el usuario introduzca algún texto utilizando el teclado y pulse la tecla [ENTER]. Al terminar la evaluación de la expresión, el texto introducido por teclado será el resultado que se le asignará a la variable saludo.

Expresiones que provocan efectos colaterales

Las expresiones que hemos visto hasta ahora pueden ser utilizadas para componer expresiones de asignación de variables, ya que el resultado de su evaluación puede ser almacenado en una variable. Sin embargo, existen otras expresiones cuya evaluación no devuelve ningún resultado, sino que provoca un efecto colateral en el estado del ecosistema de ejecución (p. ej., intérprete, sistema operativo, hardware...). Por lo tanto, no podemos utilizar dichas expresiones en expresiones de asignación.

Por ejemplo, una expresión que muestre texto por la pantalla del computador no devolvería ningún valor, sino que utilizaría dicha pantalla para mostrar el resultado de evaluar esa expresión:

1 | mostrar_pantalla(‘¡Hola, mundo!’)

En este ejemplo, la evaluación de la expresión haría aparecer por pantalla el texto “¡Hola, mundo!”. Este sería el comportamiento esperado de ejecutar dicha expresión. Sin embargo, nótese como el resultado de la expresión no se asigna a ninguna variable, sino que simplemente se evalúa y provoca el efecto colateral de mostrar texto en pantalla.

Expresiones aritméticas

Las expresiones aritméticas nos permiten realizar operaciones matemáticas sobre valores numéricos. Los lenguajes de programación suelen proporcionar un conjunto de operadores aritméticos común que podemos utilizar para construir expresiones más complejas:

 Expresiones aritméticas

Operador Operación Expresión de ejemplo Resultado de la evaluación de ejemplo
** Exponente 3 ** 3 27
% Resto de la división 55 % 7 6
// División entera (truncada) 55 // 7 7
/ División con decimales 55 / 7 7.857...
* Multiplicación 4 * 5 20
- Resta 6 - 2 4
+ Suma 1 + 2 3

Por ejemplo, utilizando la tabla anterior, podríamos construir expresiones como las siguientes:

1 | 2+2*4
2 | 15 + 3 * 24 ** 2 % 3
3 | ((15 + 3) * 24) ** (2 % 3)

El resultado de evaluar la expresión de la línea 2 puede ser confuso, por lo que resulta necesario conocer el orden en el que se evalúan los operadores aritméticos en las expresiones. Normalmente, el orden de precedencia de los operadores resulta muy similar al de los operadores en el ámbito de las matemáticas: primero se evalúa el operador de exponente (**); después los operadores de multiplicación (*), división entera (//), división con decimales (/) y resto de la división (%), respetando el orden de aparición de izquierda a derecha; por último, los operadores de suma (+) y resta (-). En cualquier caso, resulta conveniente utilizar paréntesis para facilitar la legibilidad de expresiones más complejas (línea 3).

Expresiones alfanuméricas

Las expresiones alfanuméricas son aquellas compuestas por valores textuales y numéricos. En los lenguajes de programación, existen algunas operaciones que podemos realizar entre cadenas de texto y valores numéricos.

Por una parte, podemos concatenar cadenas de texto utilizando el operador de suma (+):

1 | ‘Hola’ + ‘Adios’

En este ejemplo, el resultado de evaluar dicha expresión sería el texto ‘HolaAdios’.

Por otra parte, podemos replicar cadenas de texto tantas veces como deseemos utilizando el operador de multiplicación (*):

1 | ‘Hola’*3

Esto daría como resultado el texto ‘HolaHolaHola’, ya que se ha replicado el texto original 3 veces.

Expresiones relacionales y lógicas

Las expresiones relacionales producen resultados de verdadero o falso a partir de su evaluación. Este tipo de expresiones se utilizan para construir sentencias condicionales, permitir a los programas tomar decisiones y alterar su flujo de ejecución en consecuencia.

Los lenguajes de programación proporcionan un conjunto de operadores relacionales que podemos utilizar para construir este tipo de expresiones, normalmente:

 Operadores relacionales

Operador Operación
== Igual a
!= No igual a
< Menor que
> Mayor que
<= Menor que o igual a
>= Mayor que o igual a

A continuación, se muestran algunos ejemplos simples de expresiones relacionales:

1 | ‘Hola’ == ‘Hola’
2 | ‘Hola’ == ‘Adios’
3 | ‘Hola’ != ‘Adios’
4 | 7<8
5 | 7<7
6 | 7 <= 7

Estas expresiones se evaluarían a valores de True (líneas 1, 3, 4 y 6) y False (líneas 2 y 5).

Por otra parte, existe una serie de operadores lógicos (and, or y not) que podemos utilizar para combinar varias expresiones relacionales y construir así las denominadas expresiones lógicas:

 Expresiones lógicas

Expresiones Resultado de la evaluación
True and True True
True and False False
False and True False
False and False False
True or True True
True or False True
False or True True
False or False False
not True False
not False True

Por ejemplo, a continuación, se muestran algunas expresiones de este tipo:

1 | (4 < 5) and (5 < 6)
2 | (4 < 5) and (9 < 6)
3 | (1 == 2) or (2 == 2)

En la línea 1 primero se evaluarían las expresiones relacionales entre paréntesis, obteniendo una expresión intermedia tal que True and True. Después, se volvería a evaluar dicha expresión obteniendo como resultado final el valor True. La evaluación del resto de expresiones del ejemplo se realizaría de manera similar, obteniendo los resultados False (línea 2) y True (línea 3).