Sunday, August 13, 2006

Operador Ternario en VB.NET

Haciendo el articulo de sobrecarga de operadores he tenido que consultar cierta bibliografia en C# y de momento comienzo a tener conciencia de una cantidad de operadores que no conocia, en fin algo mas que aprender: Hay tres tipos de operadores (que yo sepa, de seguro hay más)

  1.  unarios (trabajan sobre un solo operando, ejemplo: N=-N aqui estamos marcando N que es un entero como negativo)
  2. binarios [no tiene nada que ver con 0 y 1] trabajan sobre dos operandos, ejemplo: l=2+2
  3. ternarios (trabajan sobre 3 operandos, ejemplo: Operador Condicional ?: en C# seria algo asi                                  double comision= ([condicion])? 0.10 : 0.20;                      ¿Qué significa?, pues bien si la condicion se cumple comision tomara el valor del segundo operando y de no serlo tomara el valor del tercero.

Una delicia esto del ternario, ahora bien como seria en visual basic.net aunque no es un operador lo que usaremos.Es una función:

dim comision as double= iif([condicion],0.10,0.20)

Y hace unos momentos, me topo con el blog de Cameron Beccario y veo un post que reza: Util Iff para Visual Basic 2005, y bien el url es este

 De todas formas lo explicare: Un costumbre de sabios es tener habilitado Option Strict, nos ahorramos el boxeo, digo el boxing, y como IIf devuelve object, no le podemos asignar eso a un double ya que recibiriamos una excepcion ya que las conversiones implicitas estan deshabilitadas, asi que nos queda hacer un cast:

CDouble(IIf([condicion],0.10,0.20))

y se complicaria con Ctypes y demas, aqui es cuando entra la función IIf util para VS2005: Haciendo Uso de Generics (en mi blog unos post mas abajo hay un articulo sobre esto) y Utilizando Type Inference eliminamos el cast, ya que el codigo es adaptado por el JIT en tiempo de ejecucion:

Function IIf(Of T)(ByVal Condicion As Boolean, ByVal ParteVerdadera _

As T, ByVal _ ParteFalsa As T) As T

 If Condicion Then

 Return ParteVerdadera

Else

Return ParteFalsa

End If

End Function Muchas Gracias a Beccario, y Felicidades a Paul Vick que sera padre, ;-)

3 comments:

Anonymous said...

Good afternoon


Use http://www.BuySellDirect.net new advance ebay website. to sell your new and used products to your local market only and/or the international market. You can even charge taxes for your local market. It is a free service to buyers and sellers.


Do your self a favorite buy introducing http://www.BuySellDirect.net FREE service to all my friends and family?

Constantine said...

Cuidado con los Nothings, es mejor usar if
ejemplo:
If objExcelCell.Value <> Nothing Then 'no usar iff, evalua los parametros
Output0Buffer.Usuario = objExcelCell.Value.ToString().Trim()
Else
Output0Buffer.Usuario = ""
End If

Constantine said...

Cuidado con los Nothings, es mejor usar if
ejemplo:
If objExcelCell.Value <> Nothing Then 'no usar iff, evalua los parametros
Output0Buffer.Usuario = objExcelCell.Value.ToString().Trim()
Else
Output0Buffer.Usuario = ""
End If