Un tipo de datos booleano es un tipo de datos que puede tener uno de estos dos valores: verdadero o falso. El tipo de dato booleano fue estandarizado en C++ por el comité ISO/ANSI (International Organization for Standardization / American National Standards Institute) en 1998; en C, un equivalente (_Bool) se añadió con el estándar C99. Las expresiones de tipo bool reciben su nombre del matemático inglés George Boole, que en el siglo XIX formuló las reglas de la lógica matemática. Las expresiones booleanas también terminan con un valor de verdadero o falso. Las expresiones booleanas se utilizan en las sentencias de bifurcación y bucle. En programación, un booleano puede usarse con sentencias condicionales (sentencias que sólo se ejecutan cuando se cumple la condición adecuada).

¿Cómo se representa un booleano?

  • En la mayoría de los lenguajes modernos los literales son true y false (por ejemplo: C++, Java, JavaScript). En Python los literales son True y False.
  • El tamaño físico en memoria depende del lenguaje y la implementación: el estándar no siempre fija un tamaño exacto. Por ejemplo, en C++ el estándar no garantiza un tamaño concreto (pero suele representarse con 1 byte), y en Java el tamaño no está especificado por el lenguaje a nivel de máquina virtual.
  • En algunos lenguajes antiguos o de bajo nivel se usan enteros (0 y 1) para representar falso y verdadero; en lenguajes de alto nivel existen tipos booleanos dedicados.

Operadores lógicos y comparaciones

Los booleanos se combinan y crean mediante operadores lógicos y comparaciones:

  • Operadores lógicos comunes: AND, OR, NOT. Sintaxis típica:
    • C/C++/Java/JavaScript: && (AND), || (OR), ! (NOT).
    • Python: and, or, not.
  • Operadores de comparación (que devuelven booleanos): ==, !=, <, <=, >, >=.
  • Evaluación perezosa (short-circuit): en muchas implementaciones, en expresiones como A && B si A es falso no se evalúa B; en A || B, si A es verdadero no se evalúa B.

Ejemplos de uso en código

Ejemplos sencillos en varios lenguajes:

// C++ #include <iostream> int main() {     bool esPar = (4 % 2 == 0);     if (esPar) std::cout << "4 es par\n";     return 0; } 
# Python x = 5 es_par = (x % 2 == 0) if not es_par:     print("5 es impar") 
// JavaScript let activo = true; if (activo && (2 > 1)) {   console.log("Condición verdadera"); } 
// Java public class Ejemplo {     public static boolean esMayorQueDiez(int n) {         return n > 10;     }     public static void main(String[] args) {         System.out.println(esMayorQueDiez(12)); // true     } } 

Valores "truthy" y "falsy"

Algunos lenguajes distinguen estrictamente entre booleanos y otros valores que se consideran "verdaderos" o "falsos" al evaluarse en un contexto booleano:

  • Python: valores como 0, 0.0, "" (cadena vacía), [], {} y None se consideran falsos al evaluar una condición.
  • JavaScript: existen valores "falsy" como false, 0, "", null, undefined y NaN. El resto son "truthy".
  • En lenguajes estrictos como Java o C#, la conversión implícita entre números y booleanos no está permitida (hay que usar comparaciones explícitas).

Usos comunes

  • Control de flujo: condicionales (if, else) y bucles (while, for con condiciones).
  • Banderas (flags) que indican estados: por ejemplo, si un recurso está activo o si una tarea ya fue completada.
  • Resultados de predicados: funciones que contestan a una pregunta (¿es par?, ¿existe X?) suelen devolver booleanos.
  • Operaciones lógicas y filtrado en consultas o expresiones compuestas.

Consideraciones y buenas prácticas

  • Usar nombres claros para variables booleanas, por ejemplo: isVisible, tienePermiso, esValido, para que el código sea legible.
  • Evitar comparaciones redundantes como if (flag == true); es preferible if (flag) o if (!flag). En lenguajes que no permiten conversiones implícitas, seguir las reglas del lenguaje.
  • Documentar cuándo una función devuelve un booleano y qué significa cada valor.

Resumen

El booleano es un tipo de dato fundamental en programación que representa dos estados: verdadero o falso. Se usa para controlar la ejecución del código, expresar condiciones y devolver respuestas a preguntas lógicas. Aunque su representación física y reglas de conversión pueden variar entre lenguajes, su propósito y utilidades son universales en el desarrollo de software.