Cuando hacemos una inserción como ésta:
public void EsStoredProcedure(ref SqlCommand comando, bool esSP) { if (esSP) comando.CommandType = CommandType.StoredProcedure; else comando.CommandType = CommandType.Text; }
Estamos haciendo mucho rollo para darle valor a una sola variable. Esto no solo afecta estéticamente a nuestro programa. También ocupa algunos bits de más si podemos resumirlo a una sola línea.
En C#, una inserción condicional es cuando «incluimos» el if dentro de la inserción, de esta manera:
public void EsStoredProcedure(ref SqlCommand comando, bool esSP) { comando.CommandType = (esSP ? CommandType.StoredProcedure : CommandType.Text); }
La inserción condicional se divide en tres partes: la condición (if), el resultado si la condición es positiva (true) y el resultado si la condición es negativa (false). La condición es seguida por un signo de interrogación, y los dos resultados se dividen con un signo de dos puntos.
En VB.NET, existe una función llamada Iif, que hace más o menos lo mismo:
Public Sub EsStoredProcedure(ByRef comando As SqlCommand, ByVal esSP As Boolean) comando.CommandType = Iif(esSP, CommandType.StoredProcedure, CommandType.Text) End Sub
La diferencia es que C# evalúa solamente la condición y la inserción que se va a realizar, mientras VB evalúa las tres expresiones en la función Iif. Esto es un punto negativo, pues nos podemos topar con esta situación:
Public Function ObtenerDato(ByRef tabla As DataTable) As String Return Iif (tabla.Rows.Count > 0, tabla.Rows(0)("columna").ToString(), "") End Function
En VB se evalúan las tres expresiones durante la ejecución. Suponiendo que la tabla no tiene ninguna fila, la aplicación generará un error de tipo NullReferenceException, pues la segunda parte de la función llama a una columna dentro de una fila inexistente.
Por cosas como ésta, prefiero C# sobre VB.NET.
Esto es operador ternario no?
Gracias maquina, me ayudo a comprender varios script de js que me estaba topando!