Saltar al contenido
Portada » Artículos » Condicionales

Condicionales

En la mayoría de los casos buscamos tener un manojo de posibilidades, es por ello que en la programación esto juega una gran parte de nuestra lógica, ya sea en algoritmos, soluciones o comprobaciones de datos tendremos una solución posiblemente certera con ellos.

En el lenguaje de C# tenemos las soluciones habituales de las mayorías de lenguajes modernos y que en si son un estándar en la programación, antes que todo se debe tener una noción de lo que son los operadores lógicos booleanos, de comparación e igualdad, los cuales competen las operaciones básicas para poder realizar condiciones efectivas.

Operadores

Operadores utilizados para condicionales u operaciones booleanas

OperadorFuncionamientoSímbolo
Es igualCompara dos valores, y da true si son iguales, de lo contrario da false.==
No es igualCompara dos valores, y da true si no son iguales, de lo contrario da false.!=
Mayor queCompara dos valores, si el de la izquierda es mayor que el de la derecha dará el resultado de true, de lo contrario false.>
Mayor o igual queSimilar a «mayor que» pero con la diferencia de que si los dos son iguales dará el resultado de true, si no, false. o >=
Menor queCompara dos valores, si el de la izquierda es menor que el de la derecha dará el resultado de true, de lo contrario false.<
Menor o igual queSimilar a «menor que» pero con la diferencia de que si los dos son iguales dará el resultado de true, si no, false. o <=
NegaciónGenera un resultado adverso (invertido) al que posee o se espera, si era true genera false, y viceversa.!
Y (AND)Si los dos valores son true, se evalúa la operación como true, de lo contrario si alguno de los dos es false, todo se evaluará como false.&
Y (AND) condicionalSimilar al «y» pero este solo evalúa el operando derecho si es necesario.&&
O (OR)Si alguno de los valores es true, toda la operación se evalúa como true, de lo contrario, si los dos son false, la operación quedará en false.|
O (OR) condicionalSimilar al «o» pero este solo evalúa el operando derecho si es necesario.||
O (XOR) exclusivoGenera un resultado similar al operador de negación ! debido a que si los dos elementos a comparar son desiguales dará true, pero si son iguales dará false.^
❔ Estas serían las comprobaciones más habituales en condicionales, existen un par más que se utilizan para operaciones de bit a bit, comprobación de nulos, operadores de acceso y demás que se verán en el transcurso de otros artículos. Para más información visite este documento de Microsoft.

Ya conociendo los diferentes tipos de operadores a utilizar, los ejemplos y práctica deberían ampliar el entendimiento y lógica que desearíamos emplear en nuestro código en un posible presente o futuro no tan lejano.

Uso de operadores en las condicionales

Instrucción if

Se puede entender este elemento como un indicador de SI, es decir, si lo que está dentro de sus paréntesis o condición es verdadero, hará lo que incluya el cuerpo de esta instrucción.

if (3 > 2)
{
		// Tres es mayor que dos, por ende se ejecuta el código y es true
}

// Fin del codigo

if (20 < 10)
{
		// No se ejecutará este código porque 20 no es menor que 10
		// Por ende su resultado es false
}

Instrucción else

Sucede que también queremos generar un sistema de efecto adverso, es decir cuando sea verdadero haga algo y cuando sea falso haga algo totalmente diferente. Esta instrucción solo funciona como cadena de continuación de un if o un else if.

int numberOne = 5;
int numberTwo = 7;
int result = numberOne + numberTwo;

if ( result == 15 )
{
		// Si el resultado fuera 15, entraria aqui
}
else
{
		// Cualquier otro resultado entrara aca y mostrara un mensaje, algo como...
		// El resultado no da el número esperado
}

Instrucción else if

Si lo que deseamos es proveer más posibilidades a nuestro código esta instrucción ofrece una nueva posibilidad a nuestra cadena de condiciones, funciona como un SI pero que se produce luego de comprobar la condición principal, es decir que primero se comprueba el primer if y luego sigue bajando de manera lineal al siguiente else if y así sucesivamente, hasta llegar al final o a un else.

int myLuckyNumber = 7;

if ( myLuckyNumber < 7 )
{
		// Entra aqui si la variable es menor que 7 y dira algo como...
		// Este número no parece muy afortunado
}
else if ( myLuckyNumber == 7 ) 
{
		// Entrará aqui si la variable es igual a 7.
		// Realmente eres afortunado
}
else
{
		// Aqui entraria si sobrepasa el numero 7, debido a que las dos validaciones anteriores no se cumplen
		// Este numero esta muy sobrevalorado...
}

Instrucción switch

Debido que el uso de else if puede llegar a crear niveles complejos de comprobación y extensiones de código relativamente inmensas, existe una formalidad más sencilla, práctica y en ciertos casos más eficiente la cual es esta. Su sintaxis difiere de todo lo anterior establecido en el if, else if y else. En este tipo de instrucción se trabaja con casos, los cuales cada uno especificaría un estado de la variable a comprobar.

string optionRecived = "Continuar";

switch (optionRecived)
{
		case "Salir":
						// Has salido del lugar...
				break;
		case "Detenerse":
						// Te has detenido
				break;
		case "Continuar":
						// En este caso entramos aquí debido a que optionRecived es "Continuar"
						// Continuas hacia lo desconocido
				break;
		default:
						// No se ha encontrado una opción válida
				break;
}
❔ Este tipo de instrucciones utiliza además una palabra clave llamada break la cual cumple la función de romper, si así mismo, romper la el cuerpo de una instrucción en ese punto, es decir si nosotros comprobamos el caso "Salir" y nuestra variable también tiene el mismo valor las demás comprobaciones no se efectúan por que son innecesarias ya y por ello el break rompe el cuerpo del switch para continuar con la lógica del programa.
❔ También existe una palabra reservada que se denomina default, esto podría ser algo similar a un else, pues se ejecuta si ninguna de las demás comprobaciones se satisface, normalmente se escribe de ultimo.

Pareciera que los switch no necesitan de operadores de condición pero si es posible anexar más lógica e implementarlos, pero para ello se necesita una palabra clave llamada when, luego de la comprobación del caso, esto es debido a que el switch ya de por si esta igualando el caso con la variable.

string actionToDo = "Entrar";
decimal money = 3.5M;
decimal requirement = 5M;

switch (actionToDo)
{
		case "Preguntar" when money < requirement:
				// Tu no tienes suficiento dinero...
				break;
		case "Preguntar" when money >= requirement:
				// Oye, tienes el dinero suficiente para entrar aqui
				break;
		case "Entrar" when money < requirement:
				// No puedes entrar, largo de aquí
				break;
		case "Entrar" when money >= requirement:
				// Adelante, pase
				break;
		case "Evitar":
				// No entro al establecimiento...
				break;
		default:
				// No conozco la acción o no tengo los requerimientos necesarios
			break;    
}

‼️ Ya con ello agregamos mas lógica pero a la vez complejidad a nuestra instrucción lo que puede llegar a ser igual de compleja que realizar un ifelse ifelse, pero quizás con un entendimiento más sencillo.

Condicional con operador ternario ?

Es una manera optima, reducida y eficaz de comprobar valores booleanos y asignarlos a una variable en una sola línea de código. Su versatilidad nos dará una gran ayuda a la hora de hacer lógicas rápidas y concisas. Se utiliza un nuevo operador el cual es el símbolo de pregunta ? , y las dos condiciones se separan luego con el símbolo de dos puntos : el cual la opción del lado izquierdo será la parte del verdadero y la de la derecha la del falso, pero, este operador tiene otros usos a lo largo del lenguaje C#.

float intelligence = 17.5f;
float spellRequirement = 20f;

string message = intelligence >= spellRequirement ? "Poder aprendido" : "Aun me falta conocimiento";
// En este caso no tenemos los requerimientos, la inteligencia no es mayor ni igual que lo que pide la condición
// Asi que la opción luego de los dos puntos que seria el false, se nos asignará en nuestra variable message.

Más casos al respecto

Ya podemos tener una idea de como se puede trabajar a la par con el ordenador para hacer procesos lógicos los cuales nos brindan de múltiples resultados y condiciones que a la hora de trabajar en un programa más complejo será de total agradecimiento.

Aunque cabe por destacar que existen más posibilidades añadidas, el uso de los operadores es en si una herramienta indispensable pero tanto poder necesita una gran responsabilidad, y es por ello que a más nivel de lógica y complejidad es más difícil comprar errores y lograr que todo sea entendible a simple vista.

Por ende, daré más ejemplos que se puedan aprovechar, mayormente gamificados 🕹.

Utilizando OR ||

string petClass = "Dragon";
int petAge = 6;

if ( petClass == "Dragon" || petAge >= 10)
{
		// Tu mascota a ganado un premio por ser genial
}
else if ( petAgre < 10 )
{
		// Aun tu mascota es muy joven para participar
}

Utilizando AND &&

int levelsUnlocked = 7;
int score = 9877;
int trophies 5;

if ( levelsUnlocked >= 5 && trophies >= 10 )
{
		// ¡Puedes acceder al nivel BONUS!
}
else if (score >= 9000)
{
		// Su puntuación es sobre 9000, ¡IMPOSIBLE! Te mereces un nivel BONUS
}
else
{
		// ¿Que intentas hacer con esas estadísticas?
}

Deja una respuesta