Condiciones en C Sharp
SOLUCIONARIO
Condiciones en C Sharp
2024-12-20
Por
Occam's Razor

using System;

class Program {
    static void Main () {
    const int n = 42;
    
    Console.Write ("Adivina en que número estoy pensando ? ");
    int v = Int32.Parse(Console.ReadLine ());
    
    if (v < 0) {
        Console.WriteLine ("Solo Números postitivos");
        return;
    }
    if (v == n) Console.WriteLine ("Bien Hecho!!!");
    else {
        Console.WriteLine ("El número es " +  ((v < n) ? "MAYOR" : "MENOR"));
        Console.Write ("Pista : ");
        int h = (v > n) ? v - n : n - v;
        if      (h < 5)  Console.WriteLine (" TE QUEMAS!");
        else if (h < 10) Console.WriteLine (" CALIENTE");
        else if (h < 15) Console.WriteLine (" TEMPLADO");
        else             Console.WriteLine (" FRIO");
    }
    }
    
}

C# no nos va a sorprender en ámbito de las expresiones condicionales. Como era de esperar, nos ofrece, más o menos, las mismas posibilidades que Java y un modelo basado en el introducido por el lenguaje C, incluyendo el operador ternario ?: y bloques if-else sin utilizar la palabra clave then.

SABÍAS QUE

C# se parece muchísimo a Java, pero esta lleno de pequeñas diferencias tontas, quizás para dar la impresión de que los lenguajes no se parezcan tanto. Una de estas diferencias tiene que ver con la forma estándar para nombrar los métodos. Java sigue el estilo de C++ en el que se utilizan mayúsculas camello (Camel Case), para los nombre, pero la primera letra es mayúscula para las clases y minúscula para los métodos. C# utiliza letra mayúscula también para los métodos… lo que hace que resulte incómodo cambiar de lenguaje, una vez que te acostumbras a cada uno de los formatos de los identificadores.

C# ofrece una instrucción switch con la misma sintaxis que C, pero con algunas extensiones como permitir definir casos con diferentes tipos. Además ofrece una clausura when con la que añadir condiciones adicionales sobre los casos. Esto es especialmente útil para código que trabaja con colecciones heterogéneas (por ejemplo arrays de objetos de distintos tipos).

El siguiente código muestra un ejemplo clásico de este uso.


Shape sh = new Circle (10);

switch (sh) {
    case null:
        Console.WriteLine ("Objeto no inicializado");
        break;
    case Shape shape when sh.Area == 0:
        Console.WriteLine ("Forma mal definida");
        break;
    case Circle c when c.radious == 1:
        Console.WriteLine ("Circulo Unidad....");
        break;
    default:
        Console.WriteLine ("Ninguno de los anteriores");
        break;
    
}

Al momento de escribir este texto, C# no soporta el uso de switch o if como una expresión, si bien parece que se considera como una propuesta para futuras versiones. De la misma forma el uso de expresiones o patrones relacionales en los casos de switch también es posible que lo veamos muy pronto. Quizás cuando estés leyendo esto ya se hayan integrado estas mejoras.

C# ofrece tipos booleanos (tipo bool) que pueden tomar valores true y false los cuales no pueden ser convertidos de forma automática en otros tipos como sucede en C o C++. El equivalente a esa conversión, la que realiza C/C++, basada en el convenio de que el valor 0 es false y cualquier otro valor es true, se puede simular en C@ con una comparación con el valor 0.

C# también soporta la declaración de constantes usando la palabra clave const de forma similar a otros lenguajes, si bien, esta construcción solo se puede utilizar con tipos básicos. De nuevo, es muy probable que veamos en futuras versiones del lenguaje el soporte para la declaración de constantes usando tipos complejos, pero al momento de escribir este texto, todavía no es posible.

Resumen

  • Soporta if ... [else if] ...[else] ...
  • No ofrece forma reducida para if
  • Soporta operador terciario cond ? val1 : val2
  • Soporta booleanos: bool (ofrece la clase Boolean)
  • Soporta switch mejorado con soporte para usar tipos y añadir condiciones adicionales con when
  • Soporta constantes nativamente (const Tipo CONSTANTE = val ) solo con tipos básicos. readonly se puede utilizar con tipos complejos (clases, estructuras o vectores).

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)