Skip to main content

Operadores lógicos

Los operadores lógicos trabajan con valores booleanos. El resultado también será true o false.

Las tablas de verdad para los operadores lógicos son:

Negación

Cuando usamos el operador de negación la expresión retorna si todos los operandos son true.

El símbolo para el operador OR es &.

Operando AOperando BResultado
falsefalsefalse
truefalsefalse
falsetruefalse
truetruetrue

Operador AND - Conjunción lógica

Cuando usamos el operador AND la expresión retorna true si todos los operandos son true.

El símbolo para el operador OR es &.

Operando AOperando BResultado
falsefalsefalse
truefalsefalse
falsetruefalse
truetruetrue

Operador OR - Disyunción lógica

Cuando usamos el operador OR la expresión retorna true si al menos uno de los operandos es true.

Operando AOperando BResultado
falsefalsefalse
truefalsetrue
falsetruetrue
truetruetrue

El símbolo para el operador OR es |.

Operador XOR - Disyunción exclusiva

Cuando usamos el operador XOR la expresión retorna true si sólo uno de los operandos es true.

Operando AOperando BResultado
falsefalsefalse
truefalsetrue
falsetruetrue
truetruefalse

El símbolo para el operador XOR es ^.

Operadores lógicos condicionales

Los operadores lógicos condicionales son similares a los operadores lógicos pero son más eficientes ya que no evalúan toda la expresión si ya está determinado el resultado.

Por ejemplo, sabemos que en una operación de conjunción lógica (AND) ambos operandos tienen que ser verdaderos para que la expresión sea verdadera. Si ya el primer operando se resuelve como false, el operador condicional lógico AND (&&) no evaluará el segundo operando. A diferencia del operador lógico AND (&) que evaluará ambos operandos siempre.

//Si MetodoUno() es True, entonces NO se evalua MetodoDos()

if (MetodoUno() || MetodoDos())
{ }

//Si MetodoUno() es False, entonces NO se evalua MetodoDos()

if (MetodoUno() && MetodoDos())
{ }
Buena práctica

Los operadores lógicos condicionales como && y || hacen a nuestras aplicaciones más eficientes. Son los que usaremos durante la cursada. Sin embargo, debemos ser conscientes de la diferencia con los operadores lógicos para evitar introducir errores sutiles por no conocer como funcionan.

Sentencias de selección

Las sentencias de selección permiten a una aplicación ramificarse y tomar distintos flujos de código dependiendo de un criterio o condición.

En C# existen dos sentencias de selección if y switch, y la segunda es sólo para hacer más legible el código en algunos escenarios.

Sentencia if

La sentencia if evalúa una expresión booleana. Si la expresión resulta en true, se ejecutará el bloque de código asociado al if.

// Si x es menor a 10 se ejecuta MetodoUno() de lo contrario no pasa nada.

if (x < 10)
{
MetodoUno();
}
tip

Existe un snippet para escribir la sentencia if más rápido, para accionarlo debemos escribir if y presionar dos veces la tecla TAB.

El bloque else es opcional y sólo se ejecuta si la expresión del if resulta en false.

// Si x es menor a 10 se ejecuta MetodoUno().
// Si x es mayor o igual a 10 se ejecuta MetodoDos().

if (x < 10)
{
MetodoUno();
}
else
{
MetodoDos();
}
tip

Existe un snippet para escribir la sentencia else más rápido, para accionarlo debemos escribir else y presionar dos veces la tecla TAB.

Los bloques if se pueden anidar. También se pueden combinar con otros if usando else if, siempre y cuando las condiciones sean mutuamente excluyentes.

// Si x es menor a 10 se ejecuta MetodoUno().
// Si x está entre 10 y 20 incluido se ejecuta MetodoDos().
// Si ninguno de los casos se cumple se ejecuta MetodoTres().

if (x < 10)
{
MetodoUno();
}
else if (x >= 20)
{
MetodoDos();
}
else
{
MetodoTres();
}

Sobre no usar llaves en las sentencias if

Existe la posibilidad de no usar llaves con las sentencias if siempre que dentro del bloque haya una sola línea de código.

if (edad >= 18)
Console.WriteLine("Es mayor de edad");
else
Console.WriteLine("Es menor de edad");
Advertencia

No usar llaves no hace al código más eficiente ni trae ningún tipo de ventaja, al contrario, hace al código menos mantenible y puede introducir errores.

Por ejemplo, en 2012 se lanzó iOS 6 y trajo un bug que afectaba su sistema de encriptación Secure Sockets Layer (SSL). Los usuarios estuvieron expuestos a vulnerabilidades de seguridad durante 18 meses porque una verificación importante estaba siendo accidentalmente salteada. Todo por no usar llaves en un bloque if.

https://embeddedgurus.com/barr-code/2014/03/apples-gotofail-ssl-security-bug-was-easily-preventable/

Sentencia switch

La sentencia switch compara una variable específica contra una lista de posibles valores identificados en las sentencias case.

Todas las sentencias case deben finalizar con la palabra clave break.

int a = 0;

switch (a)
{
case 0:
MetodoUno();
break;

case 1:
MetodoDos();
break;
}

El switch del ejemplo evalua la variable a y compara su valor con cada uno de los literales en las sentencias case. En este caso se ejecutará el MetodoUno().

Al final del swift se puede agregar una sentencia default que se ejecuta si la expresión evaluada no coincide con ninguno de los literales en las sentencias case.

int a = 9;

switch (a)
{
case 0:
MetodoUno();
break;

case 1:
MetodoDos();
break;

default:
MetodoTres();
break;
}

En el ejemplo anterior se ejecutará el MetodoTres().

tip

Existe un snippet para escribir la sentencia switch más rápido, para accionarlo debemos escribir switch y presionar dos veces la tecla TAB.