Saltar al contenido

Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 1 – si, de lo contrario

Escenario

Imagina este escenario:

La declaración si es adecuada en esta situación.

Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 1 – si, de lo contrario
Un recorrido exhaustivo de las declaraciones condicionales de C# Parte 1 – si, de lo contrario

Sintaxis

Antes de esto, permítame introducir la gramática de si en C#. Esta es la plantilla del código:

12345678if(condition){ if_block;}else{ else_block;}

csharp

La sentencia if se compone de la condición, if_block, y else_block.

  • La condición es una expresión booleana. Decide ejecutar if_block o else_block.
  • if_block representa la lógica si la condición es verdadera. Puede incluir múltiples declaraciones, incluso otro if block.
  • else_block representa la lógica si la condición es falsa. Es opcional. Elimina la rama else cuando no hay lógica en else.

Diagrama de flujo

Dibujé un diagrama de flujo de las declaraciones de «si no» para ayudarte a entender mejor el control del flujo.

Podemos averiguar el proceso según el diagrama de flujo:

  1. Comprueba si satisface la condición.
  2. Si se cumple la condición, procesa la lógica en if_block.
  3. Si no, procesa la lógica en else_block. else_block es opcional porque a veces no nos importa la rama else.

Práctica

Versión única si

Empecemos con la primera versión. Obviamente, sólo necesitamos si la rama:

12345// obtener la hora actualDateTime now = DateTime.Now;// si es sábado o domingoif(now.DayOfWeek == Día de la semana.Saturday || now.DayOfWeek == Día de la semana.Sunday) Console.WriteLine("¡Feliz fin de semana! ¡Es hora de divertirse!");

csharp

Discusión sobre la omisión de los aparatos ortopédicos rizados

Como muestra el ejemplo anterior, podemos omitir las llaves rizadas {} si sólo hay una sola declaración en el bloque.

Pero, ¿es esa una buena práctica?

Hay diferentes opiniones sobre eso. En cuanto a la discusión sobre Omitir los aparatos rizados o no? aquí, la omisión de los aparatos rizados hace el código más conciso y parece más legible, pero a veces puede traer potenciales errores al refactorizar el código de acuerdo a ¿Por qué se considera una mala práctica el omitir los aparatos rizados?.

Me remito a este consejo, y puede ser útil para su decisión.

si-else Version

Para esta nueva versión, necesitamos más para encargarnos del resto de la situación.

123456DateTime now = DateTime.Now;// DateTime usa el sistema de tiempo de 24 horas, 17:00 es 5:00 pmif(now.Hour <17) Console.WriteLine("good day");// antes de las 17:00else Console.WriteLine("good night");// después de las 17:00

csharp

Combinaciones

Incluido / Anidado

Podemos ver que hay dos si declaraciones en este requisito. La relación entre ellas es inclusiva y, como he explicado, el bloque if puede incluir otra declaración if. Por lo tanto, las combinamos de forma anidada:

123456789101112DateTime now = DateTime.Now;string gender =$0027female$0027;// DateTime utiliza un sistema de tiempo de 24 horas, 17:00 es 5:00 pm/// primero compruebe la hourif(now.Hour >17){/// luego compruebe la genderif(gender ==$0027male$0027) Console.WriteLine("good evening, sir");else Console.WriteLine("good evening, madam");}

csharp

Paralelo

Podemos lograrlo usando la técnica de anidado. Dividido por «mañana» primero, luego dividido por «tarde» en otro.

1234567891011121314151617/// anidado si declaracionesDateTime now = DateTime.Now;if(now.Hour <12)// 0:00 - 12:00{ Console.WriteLine("buenos días");}else// 12:00 - 24:00{if(now. Hour <17){ Console.WriteLine("buenas tardes");// 12:00 - 17:00}else{ Console.WriteLine("buenas tardes");// 17:00 - 24:00 }}

csharp

Pero la versión anidada parece complicada y carece de facilidad de lectura. Para evitarlo, combinamos las declaraciones if paralelas, y usamos else if {..} en lugar de else{ if {..} }.

12345678// paralelo si declaracionesDateTime now = DateTime.Now;if(now.Hour <12) Console.WriteLine("buenos días");// 0:00 - 12:00elseif(now.Hour <17) Console.WriteLine("buenas tardes");// 12:00 - 17:00else Console.WriteLine("buenas tardes");// 17:00 - 24:00

csharp

Alternativamente, podemos usar una declaración de cambio en tal condición, que será introducida en la próxima guía.