Karel dispone de varios operadores lógicos que puede utilizar para la creación de condiciones más avanzadas
El operador y, que se escribe como &&, junta combina dos condiciones en una que es cierta solo cuando ambas lo sean.
Por ejemplo, si tenemos el siguiente pseudo-código, entonces la condicional se comportará de acuerdo a la tabla de abajo
if (condicion1 && condicion2)
INSTRUCCION
Condicion1 | Condicion2 | Condicion1 && Condicion2 |
---|---|---|
Falso | Falso | Falso, no se ejecuta el condicional |
Falso | Verdadero | Falso, no se ejecuta el condicional |
Verdadero | Falso | Falso, no se ejecuta el condicional |
Verdadero | Verdadero | Verdadero, sí se ejecuta el condicional |
El operador && emplea evaluación de cortocircuito, es decir, si el primer termino da falso, ya no se evalúa el segundo.
Veamos un ejemplo:
import rekarel.globals;
class program {
bool dejaVerdadero() {
putbeeper();
return true;
}
bool dejaFalso() {
putbeeper();
return false;
}
program () {
if (dejaFalso() && dejaVerdadero()) {
move();
}
}
}
Produce el siguiente efecto (ve como nunca se llamó a la función dejaVerdadero):
El operador o, que se escribe ||, junta combina dos condiciones en una que es cierta al menos una de ellas lo sean.
Por ejemplo, si tenemos el siguiente pseudo-código, entonces la condicional se comportará de acuerdo a la tabla de abajo
if (condicion1 || condicion2)
INSTRUCCION
Condicion1 | Condicion2 | Condicion1 || Condicion2 |
---|---|---|
Falso | Falso | Falso, no se ejecuta el condicional |
Falso | Verdadero | Verdadero, sí se ejecuta el condicional |
Verdadero | Falso | Verdadero, sí se ejecuta el condicional |
Verdadero | Verdadero | Verdadero, sí se ejecuta el condicional |
El operador || emplea evaluación de cortocircuito, es decir, si el primer termino da verdadero, ya no se evalúa el segundo.
Veamos un ejemplo:
import rekarel.globals;
class program {
bool dejaVerdadero() {
putbeeper();
return true;
}
bool dejaFalso() {
putbeeper();
return false;
}
program () {
if (dejaVerdadero() || dejaFalso()) {
move();
}
}
}
Produce el siguiente efecto (ve como nunca se llamó a la función dejaFalso):
El operador igual que, que se escribe ==, combina dos condiciones en una que es cierta si ambas condiciones son verdaderas o ambas son falsas.
Por ejemplo, si tenemos el siguiente pseudo-código, entonces la condicional se comportará de acuerdo a la tabla de abajo
if (condicion1 == condicion2)
INSTRUCCION
Condicion1 | Condicion2 | Condicion1 == Condicion2 |
---|---|---|
Falso | Falso | Verdadero, sí se ejecuta el condicional |
Falso | Verdadero | Falso, no se ejecuta el condicional |
Verdadero | Falso | Falso, no se ejecuta el condicional |
Verdadero | Verdadero | Verdadero, sí se ejecuta el condicional |
El operador no, que se escribe !, niega la condición que aparezca después de este
Por ejemplo, si tenemos el siguiente pseudo-código, entonces la condicional se comportará de acuerdo a la tabla de abajo
if (!condicion)
INSTRUCCION
Condicion | no Condicion |
---|---|
Falso | Verdadero, sí se ejecuta el condicional |
Verdadero | Falso, no se ejecuta el condicional |
Se pueden utilizar paréntesis para cambiar el orden de los operadores o aclarar la condición
Por ejemplo, podemos hacer una condicion que se ejecute unicamente cuando exactamente una de dos condiciones sea cierta. Podemos lograr esto revisando que se cumpla al menos una de las condiciones y que no se cumplan ambas, lo cual en código se ve de la siguiente manera:
if ((condicion1 || condicion2) && !(condicion1 && condicion2))
INSTRUCCION
Condicion1 | Condicion2 | Resultado |
---|---|---|
Falso | Falso | Falso, no se ejecuta el condicional |
Falso | Verdadero | Verdadero, sí se ejecuta el condicional |
Verdadero | Falso | Verdadero, sí se ejecuta el condicional |
Verdadero | Verdadero | Falso, no se ejecuta el condicional |