If you're seeing this message, it means we're having trouble loading external resources on our website.

Si estás detrás de un filtro de páginas web, por favor asegúrate de que los dominios *.kastatic.org y *.kasandbox.org estén desbloqueados.

Contenido principal

Booleanos compuestos con operadores lógicos

Podemos implementar cualquier lógica en un programa con solo condicionales anidados. Sin embargo, podemos hacer código más corto y expresivo al combinar expresiones booleanas simples con operadores lógicos (AND, OR, NOT) para crear expresiones booleanas compuestas.

El operador OR

Con el operador OR, podemos crear una expresión compuesta que sea verdadera cuando cualquiera de dos condiciones sea verdadera.
Imagina un programa que determine si un estudiante está calificado para inscribirse en AP CS A. El requisito de la escuela es que el estudiante debe haber obtenido al menos 75% en AP CSP o en Introducción a la programación.
Una manera de implementar esa lógica es con dos instrucciones if separadas, como en el siguiente código JavaScript:
if (cspGrade >= 75) {
   println("¡Estás calificado para AP CS A!");
}
if (progGrade >= 75) {
   println("Estás calificado para AP CS A");
}
Sin embargo, ese código es problemático: hemos repetido las mismas instrucciones en 2 lugares, y eso significa que ahora tenemos que actualizar 2 lugares cada vez que queremos cambiarlas. Es muy probable que una no sincronice con la otra; de hecho, ¡ya es el caso! ¿Puedes ver la ligera diferencia en los dos println()?
Un enfoque mucho mejor es usar un operador OR para combinar esas dos condiciones.
En JavaScript, el operador OR se representa con dos barras verticales, ||, entre dos condiciones:
if (cspGrade >= 75 || progGrade >= 75) {
   println("¡Estás calificado para AP CS A!");
}
📝 Mira código similar en: App Lab | Snap | Python
Nuestro nuevo código implementa la misma lógica, pero es mucho más corto y fácil de mantener.
Si la escuela añade una tercera forma calificar, como completar un campamento de verano, podemos añadirlo fácilmente a la expresión compuesta con otro operador OR y condición:
if (cspGrade >= 75 ||
    progGrade >= 75 ||
    summerCamp === true) {
   println("¡Estás calificado para AP CS A!");
}
📝 Mira código similar en: App Lab | Snap | Python
Como esa expresión está formada enteramente de operadores OR, la expresión es verdadera siempre que cualquiera de las condiciones sea verdadera. Sólo será falso si todas las condiciones son falsas.
Comprueba tu comprensión
Considera este fragmento de JavaScript:
if (temperature < 40 || weather === "lluvia") {
   println("¡Usa una chaqueta!");
}
📝 Mira código similar en: App Lab | Snap | Python
¿En qué situaciones este código mostrará la advertencia de usar una chaqueta?
Elige todas las respuestas adecuadas:

El operador AND

Con el operador AND, podemos crear una expresión compuesta que sea verdadera cuando ambas condiciones sean verdaderas.
Hagamos un programa que determine si un estudiante cumple con los requisitos de graduación de una universidad. La universidad requiere que el estudiante tenga un GPA acumulado superior a 2.0 y que el estudiante haya completado al menos 120 unidades.
Una manera de implementar esa lógica es con condicionales anidados:
if (cumulativeGPA > 2.0) {
  if (totalUnits >= 120) {
    println("¡Puedes graduarte!");
  }
}
Sin embargo, podemos acortar significativamente ese código con un operador AND.
En JavaScript, el operador OR se representa con dos ampersand, &&, entre dos condiciones:
if (cumulativeGPA > 2.0 && totalUnits >= 120) {
    println("¡Puedes graduarte!");
}
📝 Mira código similar en: App Lab | Snap | Python
Este código es lógicamente equivalente al condicional anidado, pero es más corto y fácil de leer; ¡ganancia doble!
Si los requisitos de graduación se vuelven más estrictos, podemos expandir esa expresión con más operadores &&:
if (cumulativeGPA > 2.0 && 
    totalUnits >= 120 &&
    languageUnits >= 8) {
  println("¡Puedes graduarte!");
}
📝 Mira código similar en: App Lab | Snap | Python
Como la expresión compuesta está hecha completamente de operadores AND, cada condición debe ser verdadera para que la computadora ejecute las instrucciones dentro. Tan pronto como alguna de esas expresiones sea falsa, toda la expresión es falsa.
Comprueba tu comprensión
Considera este fragmento de JavaScript:
if (weather === "lluvia" && transportMode === "caminar") {
   println("¡LLeva sombrilla!");
}
📝 Mira código similar en: App Lab | Snap | Python
¿En qué situaciones este código mostrará la advertencia de llevar una sombrilla?
Elige todas las respuestas adecuadas:

El operador NOT

Con el operador NOT, podemos invertir el valor de verdad de toda una expresión, de verdadera a falsa o de falsa a verdadera.
Imaginemos que una universidad quiere enviar una advertencia solo a aquellos estudiantes que no califican para la graduación.
Hay varias maneras de implementar esa lógica con condicionales anidados.
Una manera es crear un condicional if/else con la condición previa para calificar a la graduación, y no poner ninguna instrucción dentro del bloque if:
if (cumulativeGPA > 2.0 &&  totalUnits >= 120) {
   // No hacer nada  
} else {
  sendEmail();
}
Ese código es un poco extraño e innecesariamente largo, así que realmente nos gustaría evitar escribir código así.
Otra manera es averiguar cómo expresar lógicamente que un estudiante no cumple los requisitos, así:
if (cumulativeGPA <= 2.0 ||  totalUnits < 120) {
  sendEmail();
}
Ese enfoque es mucho mejor; es más corto y legible: "Si el GPA acumulado es menor o igual a 2.0 o las unidades completadas son menos de 120, entonces enviar el correo electrónico."
Pero el operador NOT nos da una tercera manera: podemos aplicar "NOT" a toda la expresión original.
En JavaScript, el operador NOT se representa con un solo signo de exclamación, !, y debe colocarse frente a la expresión por negar:
if (!(cumulativeGPA > 2.0 &&  unitsCompleted >= 120)) {
  sendEmail(); 
} 
📝 Mira código similar en: App Lab | Snap | Python
El código anterior utiliza paréntesis para asegurar que NOT aplica a toda la expresión compuesta, y no solo a una de las condiciones. Este código puede leerse como "si no es el caso de que el GPA acumulado es mayor que 2.0 y las unidades completadas son al menos 120, entonces enviar el correo electrónico."
Puedes decidir cuál de los dos buenos enfoques utilizar, ambos son lógicamente equivalentes. Puedes decidir nunca usar NOT en tus propias expresiones, pero sin duda lo encontrarás en los programas de otros, así que es importante poder entenderlo.
Comprueba tu comprensión
Considera este fragmento de código:
if (!(temperature < 70 || weather === "lluvia")) {
   println("¡Día para jardinería!");
}
📝 Mira código similar en: App Lab | Snap | Python
¿En qué situaciones este código declarará que es un día para jardinería?
Elige todas las respuestas adecuadas:

Ahora todo junto

Podemos combinar los operadores AND/OR/NOT en nuestros condicionales para implementar lógica más compleja.
Imagina una escuela secundaria que requiere que sus estudiantes aprueben biología y aprueben química o física. Podemos escribir un programa que comprueba eso con una sola expresión compuesta:
if (biologyGrade > 65 &&
   (chemistryGrade > 65 || physicsGrade > 65)) {
   println("Requisitos de ciencias cumplidos");
}
📝 Mira código similar en: App Lab | Snap | Python
Observa el uso de paréntesis alrededor de la expresión OR. Como con operadores aritméticos, los operadores lógicos tienen un orden de operaciones: primero NOT, luego AND, luego OR. Si hubiéramos omitido los paréntesis antes, la computadora evaluaría AND con las dos primeras condiciones, y luego OR con el resultado de eso y con la condición final; una expresión lógicamente diferente. Siempre usa paréntesis para asegurar que se evalúen las condiciones en el orden esperado.
También podemos aplicar NOT a toda esa expresión:
if (!(biologyGrade > 65 &&
     (chemistryGrade > 65 || physicsGrade > 65))) {
   println("Requisitos de ciencias no cumplidos");
}
📝 Mira código similar en: App Lab | Snap | Python
Las expresiones compuestas pueden ser intimidantes cuando las ves por primera vez, especialmente si eres nuevo en programación y estás aprendiendo los distintos operadores.
Puede serte útil traducir la expresión a palabras. Por ejemplo, podemos escribir lo anterior como "Si no es el caso que aprueba biología y que aprueba química o aprueba física, entonces el requisito de ciencias no se cumple. Todavía es verboso, pero un poco más accesible.
✏️ El siguiente programa utiliza booleanos compuestos para planificar actividades en ciertos días y horas. Intenta cambiar los condicionales para que muestre tus propias actividades temporizadas en su lugar.
📝 Mira código similar en: App Lab | Snap | Python

Operadores lógicos ↔ compuertas lógicas

A nivel de hardware, las computadoras implementan operadores lógicos con compuertas lógicas. Una compuerta lógica es una pieza física de hardware que realiza una operación AND, OR o NOT, y otras operaciones booleanas.
La lógica es una parte fundamental tanto del hardware como del software de la computadora, así que ¡es genial que lo aprendas ahora!

Operadores lógicos en pseudocódigo

Los operadores lógicos en pseudocódigo son muy sencillos, se escriben como AND, OR y NOT:
ExpresiónSignificado
condición1 AND condición2Es verdadera si tanto condición1 como condición2 son verdaderas; de lo contrario es falsa.
condición1 OR condición2Es verdadera si condición1 o condición2 son verdaderas; es falsa solo si ambas son falsas.
NOT condiciónEs verdadera si condición es falsa; es falsa si condición es verdadera.
Aquí hay algunos de los fragmentos del código anterior escritos en pseudocódigo:
IF (cspGrade ≥ 75 OR progGrade ≥ 75)
{
   DISPLAY("¡Estás calificado para AP CS A!")
}
If (cumulativeGPA > 2.0 AND totalUnits >= 120) {
    println("¡Puedes graduarte!");
}
IF (NOT(cumulativeGPA > 2.0 AND totalUnits ≥ 120))
{
  sendEmail(); 
} 

🙋🏽🙋🏻‍♀️🙋🏿‍♂️¿Tienes alguna pregunta sobre este tópico? Nos encantaría contestarte; ¡simplemente pregunta en el area de preguntas abajo!

¿Quieres unirte a la conversación?

Sin publicaciones aún.
¿Sabes inglés? Haz clic aquí para ver más discusiones en el sitio en inglés de Khan Academy.