Lección 3 · ~12 min · ← Lección 2
Tomar decisiones: if, else, switch
Los programas se vuelven interesantes cuando reaccionan. C# tiene exactamente tres formas de elegir — la cadena, la tabla y el one-liner — y una regla de oro: las condiciones siempre son bool.
if: haz una pregunta de sí/no
int temperatura = 22;
if (temperatura > 30)
{
Console.WriteLine("hace calor"); // no entra: 22 no es > 30
}
else
{
Console.WriteLine("la temperatura está bien");
}
else if: una cadena de controles
La cadena corre de arriba abajo y para en la PRIMERA condición verdadera — el orden es lógica:
int puntuacion = 85;
if (puntuacion >= 90)
{
Console.WriteLine("A");
}
else if (puntuacion >= 80) // solo llega aquí porque >= 90 fue falso
{
Console.WriteLine("B");
}
else if (puntuacion >= 70)
{
Console.WriteLine("C");
}
else
{
Console.WriteLine("F");
}
Combinar preguntas: && y ||
&& = "y" (ambos deben cumplirse). || = "o" (al menos uno). ! = "no". Hacen cortocircuito: en cuanto la respuesta es clara, el resto no se evalúa.
int dia = 6; // sábado
bool festivo = false;
if (dia == 6 || dia == 7)
{
Console.WriteLine("fin de semana, ¡disfruta!");
}
if (dia == 6 && !festivo) // && necesita AMBOS lados verdaderos
{
Console.WriteLine("tiempo de proyecto personal");
}
else
{
Console.WriteLine("no es festivo");
}
La regla de oro: las condiciones son bool, nada más
¿Vienes de C, C++ o JavaScript? Esto pilla a todos: if (1) es un error de compilación en C#. Un número no es un valor de verdad:
int cuenta = 3;
if (cuenta) // error CS0029: no se puede convertir 'int' a 'bool'
{
Console.WriteLine("tres");
}
int cuenta = 3;
if (cuenta == 3) // di lo que quieres decir: una comparación produce un bool
{
Console.WriteLine("tres");
}
switch: un valor, muchas coincidencias exactas
Cuando comparas la MISMA expresión contra muchos constantes, switch se lee más limpio que una cadena de else if:
string pedido = "expreso";
switch (pedido)
{
case "expreso":
Console.WriteLine("expreso — pequeño y fuerte");
break;
case "latte":
case "capuchino": // etiquetas apiladas: dos pedidos, una receta
Console.WriteLine("con leche y grande");
break;
default:
Console.WriteLine("pedido desconocido");
break;
}
La única ley del switch en C#: cada case no vacío termina en break;, return; o throw;. Olvidarlo es el error CS0163 — C# rechaza el "fall-through" que causó tantos bugs en C.
El ternario: un if que cabe en una expresión
int edad = 20;
string estado = edad >= 18 ? "adulto" : "menor"; // condición ? si-verdad : si-falso
Console.WriteLine(estado);
Console.WriteLine(15 >= 18 ? "adulto" : "menor");
Úsalo cuando ambas ramas producen un valor. En el momento en que te tiente anidar un ternario dentro de un ternario — escribe un if de verdad, tu yo futuro lo agradecerá.
Practica ahora
- Escribe un clasificador de edad: niño (<13), adolescente (13–19), adulto (20–64), mayor (65+) — como una cadena
else if. Predice y luego ejecuta. - Reescríbelo como una cadena de condiciones
||dentro de un soloif. ¿Cuál se lee mejor? - ¿Listo para que te corrijan? Máximo de tres es puro ramificado con casos límite ocultos (negativos, empates).
- Siguiente lección: Lección 4 — Bucles.