CodeGym /Cursos /C# SELF /El operador ternario en C#: condiciones compactas y matic...

El operador ternario en C#: condiciones compactas y matices

C# SELF
Nivel 3 , Lección 5
Disponible

1. Expresiones vs Sentencias

En C# todas las instrucciones se dividen en dos categorías: sentencias (Statement) y expresiones (Expression). De una sentencia se suele decir que se ejecuta, y de una expresión — que se evalúa. Pero eso no es lo principal.

La diferencia clave: una expresión tiene un resultado. Ese resultado tiene un tipo, y puedes asignarlo a una variable o usarlo en otra expresión.

Ejemplos:

Código Notas
int x;
Sentencia
(a < 10)
Expresión, tipo bool
i++;
Expresión, tipo igual al tipo de la variable i
x = 5;
Expresión, tipo igual al tipo de la variable x

¿Y esto para qué nos sirve?

Muchas sentencias en realidad son expresiones (tienen un resultado). Por ejemplo, este código funciona:
int x, y, z;
x = y = z = 1; 	// x = (y = (z = 1));
Puedes ignorar el resultado de una expresión si no lo necesitas:
Console.ReadLine();	// ignoramos el resultado de la entrada

Esto mola si la expresión, además de devolver un resultado, hace algo útil (como mostrar algo en pantalla o leer input).

2. Operador ternario

En C# hay un operador ternario (triple) especial. Es como una versión corta del if–else:


Condición ? Expresión1 : Expresión2;
Sintaxis del operador ternario

Si Condición es true, se evalúa Expresión1, si no — Expresión2. Después de la condición va ?, y las dos expresiones se separan con :.

La diferencia principal con if-else: el operador ternario es una expresión, puedes asignar su resultado a una variable o usarlo en otras expresiones.

Por ejemplo, calculemos el mínimo de dos números:

int a = 2;
int b = 3;
int min = a < b ?  a :  b;

O asignamos a una variable diferentes valores según la condición:


int age = 25;
int money;
if (age > 30)
   money = 100;
else
   money = 50;
El clásico if-else

Lo mismo con el operador ternario:


int age = 25;
int money = age > 30 ? 100 : 50;
Operador ternario — versión compacta

¿Qué es mejor usar: if-else o el operador ternario? En velocidad no hay diferencia, pero el operador ternario mola para condiciones cortas. Si el código no cabe en una línea — mejor usa if-else para que sea más legible.

3. Matices de uso

Tipos de valores
Ambas ramas del operador ternario (<valor_si_true> y <valor_si_false>) deben ser del mismo tipo o compatibles (por ejemplo, ambos string o ambos int).

Funciona:

int a = 10, b = 20;
int max = (a > b) ? a : b; // ambas ramas — int

Error de compilación:

int a = 10, b = 20;
// string e int no son compatibles
string result = (a > b) ? "mayor" : 0; // Error de compilación

Opción correcta:

int a = 10, b = 20;
string result = (a > b) ? "mayor" : "menor o igual";

Ejemplo: trabajar con números

int number = -5;
int abs = (number >= 0) ? number : -number;
Console.WriteLine(abs); // 5

4. Integrando el operador ternario en una app

Vamos a escribir una pequeña app de consola: además de saludar, el programa le dirá al usuario cuántos años tendrá el año que viene y si será mayor de edad.

Console.Write("Introduce tu nombre: ");
string name = Console.ReadLine();

Console.Write("Introduce tu edad: ");
string ageText = Console.ReadLine();
int age = int.Parse(ageText);

int nextYear = age + 1;
string status = (nextYear >= 18) ? "mayor de edad" : "menor de edad";

Console.WriteLine($"¡Hola, {name}! El año que viene tendrás {nextYear}. Serás {status}.");

Detalles explicados:

  • La variable status se calcula con el operador ternario: si la edad el año que viene es al menos 18, el usuario será mayor de edad (o seguirá siéndolo).
  • Puedes meter el operador ternario directamente en strings (por ejemplo, usando interpolación $"").

5. Operadores ternarios anidados — ¡ojo!

Puedes anidar operadores ternarios (en cada rama puede haber otro ternario). Pero… esto suele dar dolor de cabeza, sobre todo al que lea el código después de ti (aunque seas tú dentro de 2 días).

Ejemplo: determinar categoría por edad

string category = (age < 7) ? "preescolar" :
                  (age < 18) ? "escolar" :
                  (age < 65) ? "adulto" : "jubilado";

Tabla de decisión:

Edad Condición Resultado
< 7 age < 7 preescolar
7–17 age < 18 escolar
18–64 age < 65 adulto
65 y más si no jubilado

Este código aún se puede leer, pero si la lógica es más compleja — mejor usa if-else if-else.

6. Truco: operador ternario y tipo bool

A veces se ve este código:

bool adult = (age >= 18) ? true : false;

Pero esto es redundante. La expresión (age >= 18) ya devuelve bool. Así que puedes simplemente hacer:

bool adult = (age >= 18);
1
Cuestionario/control
Operador condicional, nivel 3, lección 5
No disponible
Operador condicional
Operador condicional
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION