1. Introducción
Vamos a empezar con una analogía de la vida diaria. Imagina una receta:
Mezcla la harina, los huevos y el azúcar bate añade la mantequilla bate otra vez.
¿Suena raro? Ahora imagina que entre las palabras "bate" y "añade" hay una coma o paréntesis. El orden de las acciones se entiende mucho mejor.
En programación pasa algo parecido cuando escribes una expresión compleja:
bool result = a > 0 && b < 10 || c == 3;
¿Cuál es el orden? ¿Qué se calcula primero: a > 0 && b < 10, luego || c == 3? ¿O al revés? Si no hay un orden claro de evaluación, el ordenador puede "mezclar los ingredientes" y el resultado será inesperado.
2. Prioridad de operadores en C#
C# (igual que la mayoría de los lenguajes de programación) usa una tabla de prioridades de operadores.
Los operadores con mayor prioridad se ejecutan antes que los de menor prioridad.
Mira la parte más importante de esta tabla (para expresiones condicionales):
| Operador | Descripción | Prioridad |
|---|---|---|
| () | Paréntesis | la más alta |
| ! | Lógico "NO" | alta |
| ==, != | Igual / no igual | media |
| <, >, <=, >= | Comparaciones | media |
| && | Lógico "Y" | más baja |
| || | Lógico "O" | aún más baja |
(También existen operadores aritméticos — tienen prioridad más alta que los lógicos.)
La regla principal
El operador "Y" (&&) tiene más prioridad que "O" (||),
o sea, primero se evalúa el "Y", luego el "O".
Diagrama de flujo de evaluación de prioridad de condiciones
En la práctica: a > 0 && b < 10 || c == 3 — primero se evalúa a > 0 && b < 10, luego el resultado se compara con c == 3 usando ||.
3. Dirección de los operadores: de izquierda a derecha y viceversa
Además de la prioridad, hay otra palabra: asociatividad.
Es la regla de en qué dirección se evalúan los operadores si están "juntos" y tienen la misma prioridad.
Ejemplo:
bool a = true, b = false, c = true;
bool result = a && b && c;
Pregunta: ¿cómo se calcula?
Respuesta: la asociatividad de && es de izquierda a derecha.
O sea, primero a && b, luego el resultado con c.
Aplicado a condiciones:
| Operador | Asociatividad |
|---|---|
| &&, || | de izquierda a derecha |
| ! | de derecha a izquierda |
4. Los paréntesis — tu mejor amigo en condiciones complejas
Aquí empieza la magia (y el salvavidas). Cuando escribes una expresión, los paréntesis cambian la prioridad y hacen tu código más claro y seguro.
Ejemplo 1 (sin paréntesis):
// Queremos: "Si el usuario es adulto y ciudadano, o si tiene pase especial"
bool isAdult = age >= 18;
bool isCitizen = country == "Bielorrusia";
bool hasPermit = hasSpecialPass == true;
if (isAdult && isCitizen || hasPermit)
{
Console.WriteLine("¡Acceso permitido!");
}
Cómo lo evalúa C#:
Primero evalúa isAdult && isCitizen, luego el resultado lo compara con || y hasPermit.
- Supón que isAdult = true, isCitizen = false, hasPermit = true
isAdult && isCitizen→true && false→falsefalse || true→true
O sea, si la persona tiene pase especial, igual entra.
Y si no tiene pase, pero es adulto y ciudadano — también entra.
Ejemplo 2 (con paréntesis):
if (isAdult && (isCitizen || hasPermit))
{
Console.WriteLine("¡Acceso permitido!");
}
Ahora el programa primero comprueba:
isCitizen || hasPermit, y luego ese resultado junto con isAdult.
O sea, tienes que ser adulto y (o ciudadano, o tener pase especial).
¡Una pequeña diferencia en los paréntesis — una gran diferencia en la lógica!
GO TO FULL VERSION