6 de marzo de 2012

Operador ternario en VS


El operador ternario ? en programación es una forma de hacer operaciones condicionales con 3 parámetros. La forma básica de aplicarlo es la siguiente:

expresión1 ? expresión2 : expresión3

Se evalúa la expresión1, y si su resultado es verdadero, entonces se evalúa y devielve como resultado la expresión2. Si expresión1 es falso, se evalúa y devuelve expresión3. En este caso, es equivalente a escribir:

if (expresión1) { expresión2; } else { expresión3; }

Otra forma de interpretar el orden de los factores sería:

condición ? valorSiEsVerdadero : valorSiEsFalso


Operador ternario en C#

aquí tal como indica el nombre es un operador, osea un simbolo que interpreta el compilador
string comparacion = a > b ? "a es mayor que b" : "a es menor o igual que b";

Null Coalescing Operator (??) en C#

Imaginemos tenemos esta asignacion en C#, declaro una variable tipo string llamada nombre y luego este valor se lo asigno a otro variable tipo string llamada aka, si el nombre es vacío se asigna el valor aka de Sr y en caso no sea vacío se le asigna a la variable aka el valor de nombre

string nombre = Juan;
string aka = (nombre==null)?Sr:nombre;

Bien, C# nos ofrece el operador ?? que hace exactamente lo mismo que lo anterior y tiene las virtudes de ser conciso y a la vez legible, en caso de no ser nulo se asigna el valor de nombre a aka, en caso de ser nulo se asigna Sr.

string nombre = Juan;
string aka = nombre??Sr;


pero seguir viendo la utilidad, ahora imaginemos una funcion que en caso de que el resultado de calculando() sea null, retornará cero pero en caso contrario retornara el valor que la funcion trabajó

return (calculando() == null) ? 0 : calculando();


El problema es que evaluaria y ejecutaria dos veces la funcion calculando(), pero ahora con el ?? solo lo haria una vez, con el correspondiente ahorro de proceso en todas las lineas de codigo donde se evalue que una expresion es null y las sustituyamos por:


return claculando() ?? 0;



Ahora un ejemplo que ilustra el uso del IF, luego del operador ? y por ultimo el operador ??

IF
string nombre = obtenerNombre(id);
if (nombre==null)
  return "Desconocido";           
Else
  return nombre;


?
return obtenerNombre(id)==null?"Desconocido":obtenerNombre(id);

??
return obtenerNombre(id) ?? "Desconocido"; 



Operador ternario en VB 

Ahora, en VB tambien puede usarse el IIF a modo de imitar la comparación del operador ternario, pero en realidad no funciona de esta manera, ya que un operador ternario es eso: un operador y el IIF trabaja mas como una función la cual es invocada en tiempo de ejecución por lo que evalúa todos sus parámetros (no importa si la condición se cumple con el primero, siempre irá a evaluar el segundo) y en caso que los parámetros estén vacíos o no contengan una expresión valida, dará una Formatexception en tiempo de ejecución.

ademas de esto al ser una función lo que se devuelve en VB no es del mismo tipo que las variables o entidades que estamos manejando sino que devuelve un Object generico, que nos obliga a hacer una conversión al tipo deseado (CInt, CType…), miren este ejemplo donde se hace una conversión:

Dim s1 As String = Nothing
Dim s2 As String = IIf(s1 Is Nothing,"(undefined)", s1).ToString

o bien:

Dim s1 As String = Nothing
Dim s2 As String = CStr(IIf(s1 Is Nothing, "(undefined)",s1))


en Visual Basic 2010 ó 9 para ser mas exquisitos, se puede usar el operador ternario, aunque siempre precedido del if, des esta manera puede emular un operador y no una función y así, no esta en la necesidad de evaluar los dos parámetros, si con el primero cumple pues se ejecuta la condición

Dim comparacion as String = If( a>b ? "a es mayor que b", "a es menor o igual que b")


Pero de todas maneras el operador sigue retornando Object y por lo tanto desaconsejo el uso del mismo para evitar boxing, casteos y demas temas.


Related Posts:

  • Limpiar TextBox en VSEncontré este código para limpiar todos los textbox de un formulario, aquí lo pongo en VB, me imagino cada quien lo hace a su manera, yo solo lo tengo aquí por cualquier cosa 'Declaramos … Read More
  • Pasar entre TextBox con la tecla ENTER en VSPara pasar entre diferentes textbox con solo presionar enter primero agregare un vergo de textboxes a un formulario tal como se muestra ahora para definir el orden en que cada textbox tomara el foco se hace lo siguient… Read More
  • Solo letras en los TexTbox de Windows Forms para VSAquí se muestra para todos los textbox del formulario pero si solo lo necesitan para uno especifico controlen el mismo evento KeyPress para ese textbox y ya Para VB este es el código Public Class Form1   &… Read More
  • Try Catch para manejar errores en la AplicaciónCon este código pueden manejar el error que pueda producir algún método, Tales como error al conectar a internet un archivo invalido, etc. Try Process.Start(TextBox1.Text) Catch ex As Exception MessageBox.Show(ex.Message) E… Read More
  • ProgressBar y Timer en VSEl ProgressBar se maneja con un timer y la especificación de un limite que se mostrará al usuario cuando el progreso este finalizado, para este ejemplo se mostrara al ejecutar la aplicación un Formulario q… Read More