Pergunta

Esta questão já tem uma resposta aqui:

Eu realmente gosto muito do operador condicional em C #. Ele faz minha vida muito mais fácil, por escrito, a lógica 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");
        }
    }

Claro, isso significa que eu perder a legibilidade do código. Enfim, eu sou apenas curioso que a opinião de outros colegas desenvolvedores têm sobre esta abordagem de escrever código. Obrigado. I apreciar ambos negativos e positivos igualmente observações.

Foi útil?

Solução

Gosta? Usá-lo: Não

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

Outras dicas

Quando você precisar dele, o operador ternário é inestimável. No entanto, penso que muitas vezes há melhores maneiras de se expressar. No exemplo que você deu, por que não usar uma seqüência de formato que vai fazer exatamente o que você quer: "{0:00}_{1:00}_{2}_{3}.xls", o que lhe permite simplificar o seu código significativamente

?

Se você quiser torná-lo mais readble você poderia sempre fator as chamadas em getCurrent Month (), getCurrentYear, chamadas getCurrentDate ....

O exemplo que você tem é um abuso do condicional operador ,

Pode ser expresso com muito mais clareza desta forma:

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

I encontrar o operador condicional bastante útil e usá-lo muitas vezes. Quando usado corretamente, pode ajudar a simplificar o código, tornando-a mais concisa.

Em geral, vou evitar o encadeamento de várias condicionais na mesma declaração, ele rapidamente se torna muito confuso, resultando em código que não pode ser mantida.

Eu também encontrar o ?? muito útil e muitas vezes encontrar ternários que podem ser facilmente substituídos por ??.

Por exemplo:

a == null? "empty" : a

pode ser substituída por:

a ?? "empty"

A banda desenhada cara diz. "Pior uso de ternário operador nunca."

legibilidade pode ser conseguido através do uso de recuo, espaço em branco, e, como disse Dave, comenta.

A minha regra prática pessoal é que se é por demais evidente que o ternário faz, então é ok. Se ele é amontoados em uma linha só para o codificador poderia usar um ternário, então ele deve ser um entre colchetes if.

Eu só usá-lo para simples se declarações, dois no máximo. Qualquer mais do que isso e eu prefiro escrevê-lo pelo caminho mais longo do que ter que pareça que você postou. Então, novamente eu tento não ter mais do que dois níveis de instruções IF aninhadas, em primeiro lugar, por isso é realmente nunca chegar.

Eu sou tudo para usar o operador condicional, mas você não precisa dele aqui ...

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

Eu realmente não gosto de como você usou-lo. Eu usá-lo quando eu posso facilmente se encaixar em uma linha em vez de usar uma multilinha se-declaração.

Eu amo o operador terciário. É apenas um problema quando você não está familiarizado com a notação. É difícil às vezes para encontrar documentação sobre o operador solitário, mas se fosse usado mais em documentação e livros que eu acredito que ele iria ganhar muito mais popularidade.

Ao tomar uma olhada no mundo 'funcional', onde você não pode 'fazer' coisas de forma condicional, o operador condicional é muito comum. De uma forma ou de outra, eu tenho a impressão de que o paradigma funcional está ganhando interesse, porque leva o fluxo de controle temporal causado por declarações "if (isso) doThis else doThat". Ela torna mais fácil para realmente definir o que quer dizer, em vez de dizer ao computador o que fazer.

Readability é um problema, porém, em idiomas que não totalmente suporta isto.

Debuggeability é outra: no exemplo C ++, você não pode colocar um ponto de interrupção em apenas um dos ramos.

Eu não como o operador ternário em tudo -. Não é muito legível e eu fico muito irritado quando eu faço correções de bugs e encontrar coisas assim

Ties seu código se você está preocupado com a legibilidade, caso contrário, não vejo razão para não usá-lo.

Alguns parêntese ajuda legibilidade immensly.

Considere a adição-los para ajudar a esclarecer exatamente o que o seu operador de alternância está fazendo, e você deve ser fino. :)

Por que não fazer algo mais parecido com isso?

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");
    }
}

Nota eu não alterar o código em tudo, apenas a formatação. Como se observa, você não precisa usar o operador condicional aqui, mas um pouco de cuidado com o seu recuo pode melhorar a legibilidade imensamente. Eu amo o operador condicional, mas se você executar todo o seu código juntos em um bloco denso sem recuo, que vai ser ilegível, não importa o que os operadores que você está usando.

É chamado de operador ternário (não chamamos código binário código secundário , depois de tudo), e tem sido solicitado antes:

Este é um uso razoável do operador ternário?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top