Introducción a C#
Por Nacho Cabanes, versión 0.93 de 16-abr-2010


(Nota: Estás viendo una versión del curso antigua, creada en 2009. Es recomendable que sigas la versión 2015, mucho más actualizada, con contenidos más detallados, más ejemplos y más ejercicios propuestos)

3.1.5. Operadores lógicos: &&, ||, !

Estas condiciones se puede encadenar con "y", "o", etc., que se indican de la siguiente forma


  Operador  Significado
     &&        Y
     ||        O
     !         No

De modo que podremos escribir cosas como

   if ((opcion==1) && (usuario==2))  ...
   if ((opcion==1) || (opcion==3))   ...
   if ((!(opcion==opcCorrecta)) || (tecla==ESC))   ...

Ejercicios propuestos:

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

Cuidado con el operador 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 nos avisarían de que quizá estemos asignando un valor por error). En el caso del lenguaje C#, la "condición" debe ser algo cuyo resultado sea "verdadero" o "falso" (un dato de tipo "bool"), de modo que obtendríamos un mensaje de error "Cannot implicitly convert type 'int' to 'bool'" (no puedo convertir un "int" a "bool"), en casos como el del siguiente programa:

/*---------------------------*/
/*  Ejemplo en C# nº 16:     */
/*  ejemplo16.cs             */
/*                           */
/*  Condiciones con if (7)   */
/*    comparacion incorrecta */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo16
{
  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.");
  }
}
 

3.1.7. Comparaciones y variables de tipo "bool"

En muchas ocasiones, cuando las condiciones que aparecen dentro de un "if" sean complejas, el programa resultará más legible si empleamos variables de tipo "bool" (verdadero o falso), de forma que ciertos fragmentos de nuestro programa no sean "if ((vidas==0) || (tiempo == 0) || ((enemigos ==0) && (nivel == ultimoNivel)))" sino simplemente "if (partidaTerminada) ..."

A las variables "bool" se les da un valor casi como a cualquier otra variable, con la diferencia de que en la parte derecha de la asignación aparece "true" , "false" o una comparación, así:

partidaTerminada = false;
partidaTerminada = (enemigos ==0) && (nivel == ultimoNivel);
if (vidas ==0) partidaTerminada = true;

Lo emplearemos a partir de ahora en los fuentes que usen condiciones un poco complejas. Un ejemplo que pida una letra y diga si es una vocal, una cifra numérica u otro símbolo, usando variables "bool" podría ser:

/*---------------------------*/
/*  Ejemplo en C# nº 17:     */
/*  ejemplo17.cs             */
/*                           */
/*  Condiciones con if (8)   */
/*    Variables bool         */
/*                           */
/*  Introduccion a C#,       */
/*    Nacho Cabanes          */
/*---------------------------*/
 
using System;
 
public class Ejemplo17
{
  public static void Main()
  {
    char letra;
    bool esVocal, esCifra;
 
    Console.WriteLine("Introduce una letra");
    letra = Convert.ToChar(Console.ReadLine());
 
    esCifra = (letra >= '0') && (letra <='9');
    esVocal = (letra == 'a') || (letra == 'e') || (letra == 'i') ||
      (letra == 'o') || (letra == 'u');
 
    if (esCifra) 
      Console.WriteLine("Es una cifra numérica.");
    else if (esVocal) 
        Console.WriteLine("Es una vocal.");
      else
        Console.WriteLine("Es una consonante u otro número.");
  }
}