Pregunta

    

Esta pregunta ya tiene una respuesta aquí:

    
            
  •              Para ternarios o no ternaria? [Cerrado]                                      54 respuestas                          
  •     
    

Realmente me gusta mucho el operador condicional en C #. Hace que mi vida muy mucho más fácil de escribir la lógica de como este:

public  string FormattedFileName
    {
        get
        {
            return string.Format("{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 
             ? "0" + DateTime.Now.Month.ToString()
             : DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 
             ? "0" + DateTime.Now.Day.ToString()
             : DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
        }
    }

Por supuesto, eso significa que pierda la legibilidad del código. De todos modos, yo soy sólo curiosidad lo que la opinión de otros compañeros desarrolladores tienen en este enfoque de escribir código. Gracias. Aprecio tanto los comentarios positivos y negativos por igual.

¿Fue útil?

Solución

Al igual que él? Usar: No te

// if (Like it) then (Use it) else (Don't)

Otros consejos

Cuando lo necesita, el operador ternario es muy valiosa. Sin embargo, creo que a menudo hay mejores maneras de expresarse. En el ejemplo que dio, por qué no utilizar una cadena de formato que va a hacer exactamente lo que quiere: "{0:00}_{1:00}_{2}_{3}.xls", lo que le permite simplificar el código significativamente

?

Si usted quiere que sea más readble siempre se puede factorizar las llamadas en getCurrent Mes (), getCurrentYear, getCurrentDate llama ....

El ejemplo que se tiene es un abuso del condicional operador ,

Se puede expresar mucho más claramente de esta manera:

public string FormattedFileName
{
    get {
       return DateTime.Now.ToString("MM_dd_yyyy") +
          "_DownLoaded_From_Clients.xls";
    }
}

Me parece que el operador condicional bastante útil y uso a menudo. Cuando se utiliza correctamente, puede ayudar a simplificar el código por lo que es más concisa.

En general, voy a evitar el encadenamiento de múltiples condicionales en el mismo comunicado, se pone rápidamente muy confuso, lo que resulta en código que no se puede mantener.

También encuentro el ?? muy útil y muy a menudo encontrar ternarios que pueden ser fácilmente reemplazados con ??.

Por ejemplo:

a == null? "empty" : a

puede ser reemplazado con:

a ?? "empty"

chico cómic dice. "Lo peor uso del operador ternario nunca."

Legibilidad puede lograrse a través del uso de indentación, espacios en blanco, y, como se dijo Dave, comentarios.

Mi regla personal de oro es que si es claramente evidente lo que hace el ternario, entonces está bien. Si está embutida en una línea justo por lo que el codificador podría utilizar un ternario, entonces debería ser una corchetes sentencia if.

Yo sólo lo uso para simple si las declaraciones, dos a lo sumo. Algo más que eso y yo prefiero escribirlo el camino más largo, que tener que parezca que lo que usted envió. Por otra parte trato de no tener más de dos niveles de sentencias if anidadas en primer lugar, por lo que su realidad nunca surgen.

Estoy a favor de usar el operador condicional pero no lo necesito aquí ...

return string.Format("{0}_{1}_{2}_{3}.xls", 
    DateTime.Now.Month.ToString("00"), 
    DateTime.Now.Day.ToString("00"), 
    DateTime.Now.Year, 
    "DownLoaded_From_Clients");

Realmente no me gusta cómo ha utilizado la misma. Yo lo uso cuando puedo caber fácilmente en una línea en lugar de utilizar una línea múltiple sentencia if.

Me encanta el operador terciario. Es sólo un problema cuando usted no está familiarizado con la notación. Es difícil a veces para encontrar documentación sobre el operador solo, pero si se utiliza más en la documentación y los libros creo que ganaría mucho más popularidad.

Al echar un vistazo en el mundo 'funcional', donde no se puede 'hacer' cosas de forma condicional, el operador condicional es muy común. De una forma u otra, tengo la impresión de que el paradigma funcional está ganando interés, ya que lleva a cabo el flujo de control temporal causado por "si (este) DoThis demás dothat" declaraciones. Esto hace que sea más fácil realmente definir lo que quiere decir lugar de decirle a la computadora qué hacer.

La legibilidad es un problema, sin embargo, en idiomas que no es totalmente compatible con esta.

Debuggeability es otro: en, por ejemplo C ++, no se puede poner un punto de interrupción en una de las ramas.

No me gusta el operador ternario en absoluto - no es muy fácil de leer y me da muy mal humor cuando lo haga correcciones de errores y encontrar cosas por el estilo

.

Cards su código si usted está preocupado acerca de la legibilidad, de lo contrario no veo ninguna razón para no usarlo.

Algunos paréntesis ayuda legibilidad al máximo.

Tenga en cuenta la adición de ellos para ayudar a aclarar exactamente lo que su operador de alternancia está haciendo, y que debe estar bien. :)

¿Por qué no hacer algo más como esto?

public  string FormattedFileName
{
    get
    {
        return string.Format(
            "{0}_{1}_{2}_{3}.xls", 
            DateTime.Now.Month.ToString().Length == 1 ?
                "0" + DateTime.Now.Month.ToString() :
                DateTime.Now.Month.ToString(), 
            DateTime.Now.Day.ToString().Length == 1 ?
                "0" + DateTime.Now.Day.ToString() :
                DateTime.Now.Day.ToString(), 
            DateTime.Now.Year.ToString(), 
            "DownLoaded_From_Clients");
    }
}

Tenga en cuenta que no cambiar el código en absoluto, sólo el formato. Como se ha señalado, no es necesario utilizar el operador condicional aquí, pero un poco de cuidado con su muesca puede mejorar la legibilidad inmensamente. Me encanta el operador condicional, pero si se ejecuta todo el código en un bloque denso sin sangría, que va a ser ilegible, no importa lo que los operadores que esté utilizando.

Se llama operador ternario (no llamamos código binario código secundario , después de todo), y se ha preguntado antes:

Es esto un uso razonable del operador ternario?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top