Portada arrow Artículos arrow Las expresiones booleanas se pueden asignar a variables booleanas
Las expresiones booleanas se pueden asignar a variables booleanas
jueves, 01 de marzo de 2007

ImageLas variables booleanas pueden tomar dos valores: verdadero y falso.

Una expresión booleana, es decir, aquella que utiliza variables booleanas, operadores relacionales, funciones que devuelven un valor booleano y operadores booleanos (AND, OR y NOT) cuando son evaluadas devuelven también un valor verdadero o falso.

A menudo nos olvidamos de que es perfectamente posible utilizar en una asignación una variable booleana en la parte izquierda de la asignación y una expresión booleana más o menos complicada en la derecha sin ningún problema, e introducimos artificialmente una instrucción condicional (if, switch o similar) con el único objeto de asignar un valor booleano a una variable.

Por ejemplo, imagina que en un trozo de código tenemos que comprobar si una determinada variable entera a tiene un valor comprendido entre 3 y 9, ambos inclusive, y queremos lograr que si es así, una variable boolena b tome el valor verdadero, y si no es así tome el valor falso.

Sabemos perfectamente que la expresión booleana que tenemos que utilizar es: (vamos a escribirla estilo C, C++, C# o Java. En otros lenguajes, por ejemplo Pascal, Delphi y similares los operadores cambian, pero el razonamiento es el mismo)

a>=3 && a<=9
 

Esa expresión booleana se evalúa a un valor lógico booleano, que será verdero si a vale entre 3 y 9, y falso en otro caso. Bien... nuestro objetivo es lograr que b valga verdadero si la expresión es verdadera, y falso si no es así. En muchos casos, para hacer algo así introducimos una instrucción condicional:

figura 1

//poco elegante
if (a>=3 && a<=9)
{
   b=true;
}
else
{
   b=false;
}
 

Funcionará perfectamente, pero démonos cuenta de lo absurdo de la situación: "a>=3 && a<=9" devuelve un valor booleano, y b es una variable que admite un valor booleano. ¿Por qué no hacemos la asignación directamente?

figura 2

b=a>=3 && a<=9;
 

Mucho más claro, compacto y eficiente.

Otras veces, vamos todavía más lejos, y sustituimos una operación AND (&&) por un if anidado. El ejemplo que sigue ilustra esto. Es también una forma absurda de complicar las cosas para lograr lo mismo.

figura 3

b=false;
if (a>=3)
{
   if (a<=9)
   {
      b=true;
   }
}
 

Si haces una traza del código anterior, podrás comprobar que el resultado que obtenemos es el mismo, pero a simple vista es más largo y también es más dificil apreciar el sentido real de la operación. Quizá se podría pensar que es más eficiente, porque primero se comprueba una parte de la condición (a>=3) y si no se cumple ya no se sigue, a diferencia del código de la figura 2, en la que siempre se evaluarían las dos comparaciones y luego la operación AND. Pues no... no es más eficiente, ya que prácticamente todos los compiladores e intérpretes modernos evalúan las expresiones booleanas aplicando una optimización denominada cortocircuito.

Cambiando de tercio, también es necesario tener presente en todo momento que en una asignación booleana, la variable de la parte izquierda puede estar involucrada también en la expresión de la parte derecha.

Dicho de otra manera: si a es una variable entera, estamos muy acostumbrados a ver asignaciones como esta:

figura 4

a = a+3;
 

Está claro que tras su ejecución, a vale tres unidades más de lo que valía antes. Pues lo mismo se puede hacer en un asignación booleana.

figura 5

b=b && (a>9)
 

En este caso, tras la ejecución de esa asignación b vale verdadero  si antes de la ejecución ya valía verdadero y además a es mayor que 9.

Es más... esto se utiliza tanto que al igual que la operación de la figura 4 puede abreviarse en C# (y similares) como

figura 6

a += 3;
 

también la asignación booleana de la figura 5 puede abreviarse como

figura 7

b &= a>9;
 

En conclusión, siempre que utilicemos una operación condicional (if, switch) cuyo único objetivo sea dar valor a una variable boolena, nos debemos preguntar si realmente podríamos hacer lo mismo con una simple asignación booleana. En la mayoría de los casos, la respuesta será probablemente .

 
←Artículo anterior   Artículo siguiente→

Categorías

  • Ingeniería del software  ( 4 artículos )

    Acerca de la ingeniería del software y el ciclo de vida del software.

  • El programador elegante  ( 12 artículos )
    Una serie de artículos dedicados a buenas prácticas en programación
  • Opinión  ( 7 artículos )

    Artículos de opinión, no necesariamente fundamentada.

  • Básico  ( 12 artículos )

    Artículos básicos sobre temas básicos.

     

¿Quién está en línea?

 web tracker

Suscríbete

RSS feed Sindicación RSS

(¿Qué es la sindicación RSS?)


Suscribir por e-mail

¿Dónde estoy?

Estás en La tecla de ESCAPE, un sitio web personal en el que nos gusta hablar de algoritmos, informática, tecnología, ciencia, ingeniería, internet... y cualquier tontería que se nos ocurra. El punto de vista de nuestros artículos técnicos suele ser muy básico, así que a menudo adoptamos grandes simplificaciones. (Más...-Términos de uso)