martes, 13 de agosto de 2013

Operadores Condicionales en C#

Tabla de Contenido

0. Introducción
1. Uso de los Operadores &&, ||
2. Uso de los Operadores &, |
3. El Operador Condicional
4. Conclusiones
5. Glosario
6. Referencias

0. Introducción

En C# podemos encontrar operadores condicionales que nos permite crear expresiones simples o compuestas a la hora de evaluar el camino que debe tomar el flujo de ejecución de un algoritmo en particular basadas en entradas de usuario, peticiones de servicios, monitorización del estado de salud de una aplicación, etc. Estos operadores son: && (and), || (or).

1. Uso de los Operadores && ||

El uso de estos operadores es bastante práctico. En el ejemplo que se presenta a continuación, el método UsarParaguas retorna verdadero si el día está lluvioso o soleado, en caso contrario falso cuando esté venteando (dado que los paraguas no son útiles en estas situaciones):

Archivo C# OperadoresCondicionalesCortoCircuito.cs [enlace alternativo]:
Los operadores en el ejemplo anterior usan la técnica de evaluación de corto circuito, esto quiere decir que una vez la primera expresión se evalúe, en el caso de && a verdadero (true) el resto de las expresiones lógicas se continúan evaluando, en caso contrario, cuando la primera evaluación retorna falso (false), inmediatamente se interrumpe la evaluación de las expresiones lógicas restantes. Esto es eficiente debido a que no es necesario invertir recursos como espacio en memoria y tiempo de procesador en evaluar expresiones que no van alterar la evaluación general (como podría ocurrir con el encabezado de la instrucción de control condicional if (más adelante nos extenderemos en este interesante tópico)).

Por otro lado, la evaluación corto circuito sobre || (or), una vez la primera expresión lógica nos genere verdadero (true) se continúa con la siguiente instrucción, y no es necesario evaluar el resto de las expresiones. Si ocurre lo contrario, es decir, si se retorna falso (false) en la primera evaluación, se continúa probando con las expresiones lógicas restantes. Esto se debe a la naturaleza lógica inclusiva de este operador.

En el código fuente C# anterior, podemos observar que cuando !ventoso se evalúa a falso, la expresión lógica (lluvioso || soleado) no será evaluada. En su interior, esta última expresión sí lluvioso es verdadero (true), soleado no es evaluado (pues es posible que esté lloviendo y haciendo sol, y en cualquier de los casos se usará paraguas).

Además, la técnica de evaluación de corto circuito, es esencial en expresiones que pudieran generar excepciones (más acerca de tópica en artículos posteriores), por ejemplo:

if (cadenaTexto != null && cadenaTexto.Length > 0)

Comprueba que la variable cadenaTexto es distinta de null en la primera expresión (cadenaTexto != null) es útil (y necesario) para evitar el lanzamiento de la excepción NullReferenceException [2].

2. Uso de los Operadores & y |

C# también posee los operadores condicionales & y |, que a diferencia de && y ||, no evalúan las expresiones usando la técnica corto circuito. Un caso de utilidad de estos operadores es cuando las expresiones del encabezado de un if, por ejemplo, requieren cambiar el valor de una variable. Esta es una de las razones por lo que son poco utilizados, pues en la práctica hacer esto conduce a código poco legible.

Nota

A diferencia de otros lenguajes, como C y C++, C# también utiliza los operadores & y | no sólo para evaluaciones lógicas de corto circuito, sino además para operaciones bitwise (bit a bit) sobre operandos numéricos.

3. El Operador Condicional

Este operador condicional también se le conoce como operador ternario (debido a que su estructura sintáctica requiere de hasta 3 operandos para llevar a cabo la evaluación correspondiente). Es el único operador que requiere 3 operandos, y tiene la siguiente forma [4]:


condicion ? primera_expresion : segunda_expresion;

Si condicion es verdadero, primera_expresion es evaluado, sino segunda_expresion es evaluado. Veamos un ejemplo:

Archivo C# OperadorCondicional.cs [enlace alternativo]:

(En artículos posteriores veremos la utilidad de este operador en consultas LINQ.)

En [1] podemos encontrar algunos beneficios de este operador; por ejemplo, la escritura de instrucciones condicionales más cortas y expresivas, o la de asignación a variables constantes.

4. Conclusiones

Hemos comprendido la utilidad de los operadores condicionales útiles para crear instrucciones de alternación en el flujo de ejecución de un algoritmo. La evaluación de corto circuito ayuda a crear expresiones lógicas más eficientes en tiempo de procesador y espacio en memoria.

5. Glosario

- Corto circuito
- Ternario

6. Referencias

[1] c# - Benefits of using the conditional ?: (ternary) operator - http://stackoverflow.com/questions/3312786/benefits-of-using-the-conditional-ternary-operator
[3] C# 5.0 in a Nutshell by Joseph Albahari and Ben Albahari. Copyright 2012 Joseph Albahari and Ben Albahari, 978-1-449-32010-2.
[4] ?: Operator (C# Reference) - http://msdn.microsoft.com/en-us/library/ty67wk28.aspx


O

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.