Este sitio web usa cookies de terceros para analizar el tráfico y personalizar los anuncios. Si no está de acuerdo, abandone el sitio y no siga navegando por él. ×


2.1.6. El peligro de la asignación en un "if"

Cuidado con el comparador de igualdad: hay que recordar que el formato es if (a==b) ... Si no nos acordamos y escribimos if (a=b), estamos intentando asignar a "a" el valor de "b".

En algunos compiladores de lenguaje C, esto podría ser un problema serio, porque se considera válido hacer una asignación dentro de un "if" (aunque la mayoría de compiladores modernos al menos nos avisarían de que quizá estemos asignando un valor sin pretenderlo, pero no es un "error" que invalide la compilación, sino un "aviso", lo que permite que se genere un ejecutable, y podríamos pasar por alto el aviso, dando lugar a un funcionamiento incorrecto de nuestro programa).

En el caso del lenguaje C#, este riesgo no existe, porque la "condición" debe ser algo cuyo resultado sea "verdadero" o "falso" (lo que pronto llamaremos un dato de tipo "bool"), de modo que obtendríamos un error de compilación "Cannot implicitly convert type 'int' to 'bool'" (no puedo convertir un "int" a "bool"). Es el caso del siguiente programa:

// Ejemplo_02_01_06a.cs
// Condiciones con if: comparación incorrecta
// Introducción a C#, por Nacho Cabanes

using System;

public class Ejemplo_02_01_06a
{
    public static void Main()
    {
        int numero;

        Console.WriteLine("Introduce un número");
        numero = Convert.ToInt32(Console.ReadLine());
        if (numero = 0) 
            Console.WriteLine("El número es cero.");
        else
            if (numero < 0) 
                Console.WriteLine("El número es negativo.");
            else
                Console.WriteLine("El número es positivo.");
    }
}

Nota: en lenguajes como C y C++, en los que sí existe este riesgo de asignar un valor en vez de comparar, se suele recomendar plantear la comparación al revés, colocando el número en el lado izquierdo, de modo que si olvidamos el doble signo de "=", obtendríamos una asignación no válida y el programa no compilaría:

if (0 == numero)  ...

Ejercicios propuestos:

Ejercicio propuesto 2.1.6.1: Crea una variante del ejemplo 02_01_06a, en la que la comparación de igualdad sea correcta y en la que las variables aparezcan en el lado derecho de la comparación y los números en el lado izquierdo.