Escenario
Imagina este escenario:
La declaración si es adecuada en esta situación.
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:
- Comprueba si satisface la condición.
- Si se cumple la condición, procesa la lógica en if_block.
- 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.