Palabras clave: Variables booleanas, Estructuras de control, Estructuras condicionales, Condiciones booleanas, tipo enumerado.

Preguntas de repaso
  • ¿Qué es un tipo de dato y cuántos hay?

  • ¿Qué es una variable booleana?

  • ¿Qué establece el teorema del programa estructurado?

No sigas si no conoces las respuestas.

1. Introducción

En la programación estructurada hay 3 tipos de estructuras (secuencial, condicional e iterativa). En las estructuras condicional e iterativa, las estructuras se ejecutan siempre y cuando se cumpla una condición boolena. En esta lectura trataremos este asunto de las condiciones.

2. Variables booleanas

Una variable es booleana si sus valores son de tipo booleano. Un tipo booleano es aquel que solo puede adoptar los valores true o false.

Ejemplo 1. Un ejemplo sencillo de uso de una variable booleana

El siguiente código muestra como declarar, asignar e imprimir una variable booleana.

1 2 3
boolean superasNotaCorte; superasNotaCorte = true; // Asigna false, si prefieres. println("¿Superas nota de corte? "+superasNotaCorte);

Las variables booleanas se utilizan para indicar si se comple o no una condición, con lo que resulta ideales para trabajar con estructuras condicionales. Pero lo normal es que las condiciones que deban cumplirse para realizar (o no) ciertas instrucciones involucren a variables booleanas (constituyan una expresión booleana).

3. Expresiones booleanas

El valor de la condición que determina si se ha de ejecutar o no un conjunto de instrucciones viene dado por un valor booleano que es el resultado de una expresión booleana.

Pero ¿qué es una expresión booleana? En lecturas anteriores se han mostrado distintas expresiones numéricas. Recuerda que son expresiones matemáticas y, como tales, en ellas intervienen operadores y funciones matemáticas sobre tipos de datos numéricos. Ahora, de forma análoga, una expresión booleana es aquella en la que intervienen los operadores propios para los tipos de datos booleanos. Existen dos tipos de operadores: los operadores condicionales y los operadores booleanos.

3.1. Operadores condicionales

Los operadores condicionales, que se enumeran más abajo, son aquellos que están vinculados con las relaciones matemáticas de orden y la relación de identidad. Con las primeras podemos saber qué objeto son menores que otros; por ejemplo, gracias a una relación de orden establecemos qué personas son más viejas o altas que otras. Con la segunda podemos constatar si dos objetos que se escriben de forma diferente son de hecho el mismo objeto; por ejemplo, la relación de identidad establece que da lo mismo calcular 4/2 que 20/10.

Operadores condicionales
Igualdad

Dados dos valores a y b, a == b determina si se cumple la condición de que ambos valores son iguales.

Distinto

Dados dos valores a y b, a != b determina si se cumple la condición de que ambos valores sean distintos.

Mayor estricto que

Dados dos valores a y b, a > b determina si se cumple la condición de que a es estrictamente mayor que b.

Mayor o igual que

Dados dos valores a y b, a >= b determina si se cumple la condición de que a es igual o mayor que b.

Menor estricto que

Dados dos valores a y b, a < b determina si se cumple la condición de que a es estrictamente menor que b.

Menor o igual que

Dados dos valores a y b, a <= b determina si se cumple la condición de que a es igual o menor que b.

En general, los valores a y b han de ser del mismo tipo de dato y pueden ser el resultado de expresiones numéricas, alfanuméricas o booleanas.

Ejemplo 2. Operadores Condicionales

Ejecuta el siguiente código para ver en acción a estos operadores.

1 2 3 4 5 6 7 8 9 10 11 12 13 14
/* Autor: Luis Daniel Hernández (Grupo ISCyP) Fecha: 08/08/2014 Operadores condicionales en Processing */ int a=2; int b=5; print(a); print ("=="); print(b); print(" es "); println(a==b); print(a); print ("!="); print(b); print(" es "); println(a!=b); print(a); print ("< "); print(b); print(" es "); println(a<b); print(a); print ("<="); print(b); print(" es "); println(a<=b); print(a); print ("> "); print(b); print(" es "); println(a>b); print(a); print (">="); print(b); print(" es "); println(a>=b);

3.2. Operadores booleanos

En el contexto de las lógicas clásicas (en particular la matemática), los operadores booleanos son aquellos que establecen el valor de verdad de una proposición compuesta, entendiendo como tal a la composición de oraciones enunciativas que solo pueden ser o verdaderas o falsas. En el contexto de la programación, los operadores booleanos son aquellos que establecen el valor de verdad de la composición de varios operadores condicionales o booleanos.

Operadores booleanos usuales
NOT

dado un valor booleano \(a\), la expresión \(!a\) viene dada por:

\[!a=\left\{ \begin{array}{ll} true & \mbox{, si } a \mbox{ es } false \\ false &\mbox{, si } a \mbox{ es } true \end{array} \right.\]
AND

Dados dos valores booleanos \(a\) y \(b\), el valor de la expresión \(a\&\&b\) vienen dados por:

\[a\&\&b=\left\{ \begin{array}{ll} true & \mbox{, si } a \mbox{ y } b \mbox{ son simultaneamente verdaderos (true)} \\ false &\mbox{, en otro caso} \end{array} \right.\]
OR

dados dos valores booleanos \(a\) y \(b\), el valor de la expresión \(a||b\) vienen dado por:

\[a||b=\left\{ \begin{array}{ll} true & \mbox{, si } a \mbox{ o } b \mbox{ es verdadero (true)} \\ false &\mbox{, en otro caso} \end{array} \right.\]
Ejemplo 3. Operadores Lógicos

Ejecuta el siguiente código para ver en acción a estos operadores.

1 2 3 4 5 6 7 8 9 10 11
/* Autor: Luis Daniel Hernández (Grupo ISCyP) Fecha: 08/08/2014 Operadores lógicos en Processing */ boolean a=true; boolean b=false; print("! "); print(a); print(" es "); println(!a); print(a); print (" && "); print(b); print(" es "); println(a && b); print(a); print (" || "); print(b); print(" es "); println(a || b);
Una expresión booleana es una expresión en la que intervienen operadores lógicos y operadores condicionales.

4. Precedencia de operadores

Teniendo en cuenta que en una expresión booleana pueden aparecer operadores lógicos, de comparación y expresiones numéricas, p.e. (exp(x)<3.5 ) && (2==y)), la cuestión es ¿qué operadores se hacen antes? ¿los lógicos? ¿los numéricos? ¿o los de comparación? Este es el orden que tiene establecido Processing.

Orden de Precedencia
  1. Paréntesis: ( )

  2. Operador de negación NOT: !

  3. Funciones matemáticas.

  4. Operadores relacionados con los productos y divisiones: *, /, %.

  5. Suma y resta: +. -

  6. Operadores relacionales: <, >, <=, =>.

  7. Igualdad: ==, !=.

  8. Operador AND: &&

  9. Operador OR: ||

En el caso de que haya dos operadores que tengan la misma prioridad se realizará el que esté situado más a la izquierda.

Es decir, en general, primero se calculan las expresiones numéricas (de acuerdo a la prioridad de sus operadores), después las expresiones booleanas de compración (de acuerdo a la prioridad de sus operadores) y por último se aplican los operadores lógicos (de acuerdo a la prioridad de sus operadores).

Si tienes duda de qué operador va antes o después usa los paréntesis (,) de forma adecuada y sé tú quien controle el orden del cálculo.

Determina el valor de verdad de las siguientes expresiones. Usa Processing para comprobar tu pronóstico.

  • \(1==1\) && \(2==3\) || \(4==4\) && \(3==5\)

  • \(1==1\) || \(2==3\) && \(4==4\) || \(3==5\)

  • \(2<a\) || \(a<2\) Para a=4, a=2 y a=0.

  • \(e^x > x^2\) && \(x^2 > ln(x)\).

Al igual que el resultado de una expresión aritmética puede guardarse en una variable numérica, el resultado de una expresión booleana puede guardarse en una variable booleana para ser recuperado en cualquier otro momento.

Determina qué valores se imprimirán:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
/** Curso 2014-15. ISCyP Cambia los valores de a, b, c y d a tu antojo. También puedes cambiar las expresiones booleanas. **/ boolean a = true; boolean b = true; boolean c = true; boolean d = true; boolean solucion1 = !( a && b && c && d ); boolean solucion2 = !a || !b || !c || !d; println("Soluciones:"); print("Sol. 1: "); println(solucion1); print("Sol. 2: "); println(solucion2);

5. Variables enumeradas

El tipo booleano, booelean, es un tipo de dato que se corresponde con la posibilidad de adoptar solo uno de entre dos valores (true y false). Este tipo de dato y sus dos valores vienen impuestos por el lenguaje de programación.

Existe una extensión del tipo boolean que es el tipo enum o tipo enumerado. Es un tipo de dato definido por el usuario que solo puede tomar como valores los definidos (y constantes) en una lista. Los tipos enumerados se utilizan para restringir los valores de una variable de entre un conjunto de valores previamente definidos.

La manera de usar este tipo de dato es el siguiente:

enum TipoNuevo {VALOR1, VALOR2, ...., VALORN};
TipoNuevo miVariable = TipoNuevo.VALORJ

No es necesario que las constantes dentro del enum estén en mayúsculas pero en las convenciones de código para Processing, Java y otros lenguajes se pide hacerlo de esta manera.

Ejemplo 4. Declaración y uso del tipo enum

Si se quisiera trabajar con una variables que represente a marcas de coches pero solo se deseara trabajar entre las marcas Ford, Seat y Toyota un posible código sería:

1 2 3
enum MarcasCoche {FORD, SEAT, TOYOTA}; MarcasCoche miCoche = MarcasCoche.TOYOTA; println(miCoche);

Observa que:

  • la asignación de valor no es miCoche = TOYOTA sino que hemos de utilizar la notación punto: miCoche = MarcasCoche.TOYOTA,

  • el valor impreso no es MarcasCoche.TOYOTA (la expresión usada en la asignación) sino TOYOTA (que es uno de los valores de MarcasCoche).

En Processing, para crear el tipo enumerador MarcasCoche tendrás que crear una pestaña nueva con el nombre MarcasCoche.java (tendrás que añadir .java) y escribir en dicho fichero el tipo de dato: para el ejemplo, enum MarcasCoche {FORD, SEAT, TOYOTA}. No escribas nada más en este fichero.

6. Repaso

  • Una expresión booleana es aquella cuyo valor final es o true o false.

  • En una expresión booleana intervienen operadores de comparación u operadores lógicos (o los dos).

  • Una variable de tipo booleano es aquella cuyo valor es uno de otros los valores true o false.

  • Una variable de tipo enumerado es aquella cuyo valor es uno de entre los definidos por el programador (extiende a las variables booleanas).