Contenido

Operadores lógicos

Karel dispone de varios operadores lógicos que puede utilizar para la creación de condiciones más avanzadas

Operador y (&&)

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
Condicion1Condicion2Condicion1 && Condicion2
FalsoFalsoFalso, no se ejecuta el condicional
FalsoVerdaderoFalso, no se ejecuta el condicional
VerdaderoFalsoFalso, no se ejecuta el condicional
VerdaderoVerdaderoVerdadero, se ejecuta el condicional

Evaluación de cortocircuito

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):

Deja un solo zumbador

Operador o (||)

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
Condicion1Condicion2Condicion1 || Condicion2
FalsoFalsoFalso, no se ejecuta el condicional
FalsoVerdaderoVerdadero, se ejecuta el condicional
VerdaderoFalsoVerdadero, se ejecuta el condicional
VerdaderoVerdaderoVerdadero, se ejecuta el condicional

Evaluación de cortocircuito

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):

Deja un solo zumbador

Igual que (==)

Desde ReKarel 2.0.0
El operador igual que también funciona con cantidades enteras, si estás buscando información de esto puedes leer más aquí.

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
Condicion1Condicion2Condicion1 == Condicion2
FalsoFalsoVerdadero, se ejecuta el condicional
FalsoVerdaderoFalso, no se ejecuta el condicional
VerdaderoFalsoFalso, no se ejecuta el condicional
VerdaderoVerdaderoVerdadero, se ejecuta el condicional

Operador no (!)

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
Condicionno Condicion
FalsoVerdadero, se ejecuta el condicional
VerdaderoFalso, no se ejecuta el condicional

Paréntesis

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
Condicion1Condicion2Resultado
FalsoFalsoFalso, no se ejecuta el condicional
FalsoVerdaderoVerdadero, se ejecuta el condicional
VerdaderoFalsoVerdadero, se ejecuta el condicional
VerdaderoVerdaderoFalso, no se ejecuta el condicional