Roberto Sánchez - Programador .NET/C++

Expresiones condicionales.

En multitud de ocasiones será necesario que, dependiendo del valor de una o varias variables, el hilo de ejecución del programa se decante por una u otra vía con objeto de realizar diferentes operaciones. Para ello es necesario evaluar los valores de estas variables mediante las sentencias de control, que veremos más adelante. Sin embargo, adelantándonos al estudio de las sentencias de control y con objeto de entender las expresiones condicionales, veremos la funcionalidad que para esta necesidad nos proporciona la sentencia 'if'.

En el siguiente código fuente vamos a verificar si un número es par, y en caso afirmativo se volcará en la consola una notificación que nos advertirá de que efectivamente el número es par y el valor del número; en caso negativo, sólo se mostrará el valor del número:

class MiPrimerPrograma
{
    public static void Main()
    {
        int num = 24;
        if (num % 2 == 0) // Si el resto de 2 es igual a cero.
            System.Console.WriteLine("Número par.");
        System.Console.WriteLine("Valor: " + num);
    }
}

Como indica el comentario insertado en la línea de la sentencia 'if', al evaluar la condición sobre si el resto del número 2 es igual a cero, se ejecuta la línea siguiente, en la que el programa nos avisa de que el número es par. En caso negativo la ejecución de programa habría saltado a la línea siguiente y simplemente nos habría informado del valor del número. En caso de que el valor de la variable hubiera sido, por ejemplo, 3, se habría evaluado la sentencia condicional del 'if', se habría determinado que su resto no es igual a cero y, por lo tanto, que es impar, por lo que la ejecución habría saltado directamente a la línea en la que únicamente se nos informa del valor.

Pero hay más operadores condicionales aparte de '==':

< ¿Primer operador menor que el segundo? ¿Es menor que...?
> ¿Primer operador mayor que el segundo? ¿Es mayor que...?
<= ¿Pirmer operador menor o igual que el segundo? ¿Es menor o igual que...?
>= ¿Primer operador mayor o igual que el segundo? ¿Es mayor o igual que...?
!= ¿Primer operador distinto que el segundo? ¿Es distinto que...?
== ¿Primer operador igual que el segundo? ¿Es igual que...?

En la siguiente modificación del programa anterior vamos a añadir la cláusula 'else' que trabaja a la par de la sentencia 'if'. En este caso, se evalúa la expresión condicional y, dependiendo de si es cierta, se ejecuta una orden u otra:

class MiPrimerPrograma
{
    public static void Main()
    {
        int num = 23;
        if (num % 2 == 0)
            System.Console.WriteLine("Número par."); // Si el resto de 23 es igual a cero.
        else
            System.Console.WriteLine("Número impar."); // Si el resto de 23 no es igual a cero.
        System.Console.WriteLine("Valor: " + num);
        System.Console.ReadKey();
    }
}

Al compilar y ejecutar el programa, el resultado que obtendremos en la consola será que el número es impar y que su valor es 23.

En el caso de que las sentencias que se deseen ejecutar después de una expresión condicional encerrada, por ejemplo, en un 'if', sean más de una, será necesario encerrarlas dentro de un bloque de llaves; igualmente para la sentencia 'else'. Por ejemplo:

int num = 101;
if (num ‹= 100)
    System.Console.WriteLine("Menor o igual que 100.");
else // Se ejecutarán las dos sentencias siguientes encerradas entre llaves.
{
    System.Console.WriteLine("Mayor que 100.");
    System.Console.WriteLine("Valor: " + num);
}
System.Console.ReadKey(); // Finalizó la sentencia 'if - else'. Se ejecutará en cualquier caso.

Además de los ya vistos, hay otros operadores condicionaes que son de suma importancia. Los siguientes operadores condicionales serán de suma importancia a la hora de implementarlos en las sentencias de control, ya que el resultado de la evaluación de expresiones con este tipo de operadores siempre dará como resultado un valor 'bool', es decitr, verdadero o falso.

& AND
| OR
^ XOR (OR exclusivo).
|| OR de cortocircuito.
&& AND de cortocircuito
! NOT