Pergunta

Dadas as seguintes expressões:

1)

variable = value1
if condition
  variable = value2

2)

variable = value2
if not condition
  variable = value1

3)

if condition
  variable = value2
else
  variable = value1

4)

if not condition
  variable = value1
else
  variable = value2

O que você prefere e por quê?

Assumimos o caminho de execução mais comum ser o de condition ser falso.

Eu tendem a aprender no sentido de utilizar 1), embora eu não sei exatamente por isso que eu gosto mais.

Nota: Os exemplos a seguir pode ser mais simples e, portanto, possivelmente, mais legível, mas não todas as línguas fornecer tal sintaxe, e eles não são adequados para estender a atribuição de variável para incluir mais de uma instrução no futuro <. / em>

variable = condition ? value2 : value1
...
variable = value2 if condition else value1
Foi útil?

Solução

Em teoria, eu prefiro # 3, uma vez que evita a necessidade de atribuir um valor à variável duas vezes. No mundo real, apesar de eu usar qualquer um dos quatro acima que seria mais legível ou se expressar mais claramente a minha intenção.

Outras dicas

Eu prefiro o método 3, porque é mais concisa e uma unidade lógica. Ele define o valor apenas uma vez, ele pode ser movido ao redor como um bloco, e não é isso propenso a erros (o que acontece, esp. No método 1 se ajuste-a-value1 e verificando-and-opcionalmente-setting-se value2 são separadas por outras declarações)

3) é a expressão mais clara do que você quer que aconteça. Penso que todos os outros exigem algum pensamento extra para determinar qual valor vai acabar na variável.

Na prática, gostaria de usar o operador ternário (? :) se eu estava usando uma linguagem que o apoiaram. Eu prefiro escrever em estilo funcional ou declarativa mais imperativo sempre que posso.

I tendem a usar # 1 monte mim. if condition lê mais fácil do que if !condition, especialmente se você acidentally perca o '!', pelo menos na minha opinião pelo menos.

A maioria de codificação que faço é em C #, mas eu ainda tendem a afastar-se do operador terniary, a menos que eu estou trabalhando com (principalmente) variáveis ??locais. Linhas tendem a ficar muito tempo muito rapidamente em um operador ternário se você estiver ligando três camadas profundamente em alguma estrutura, o que diminui rapidamente a legibilidade novamente.

Nota: Os exemplos a seguir pode ser mais simples e, portanto, possivelmente, mais legível, mas não todas as línguas fornecer tal sintaxe

Este não é um argumento para não usá-los em idiomas que fornecem tais sintaxe a. Aliás, que inclui todas as linguagens mainstream atual depois da minha última contagem.

e eles não são adequados para estender a atribuição de variável para incluir mais de uma instrução no futuro.

Isso é verdade. No entanto, muitas vezes é certo que essa prorrogação absolutamente nunca ocorrerá porque o condition sempre produzirá um dos dois casos possíveis.

Em tais situações, eu vou sempre preferir a variante de expressão sobre a variante declaração porque reduz a desordem sintática e melhora a expressividade. Em outras situações que tendem a ir com a declaração switch mencionado antes - se a linguagem permite esse uso. Se não, queda-back para if genérico.

declaração switch também funciona. Se é simples e mais de 2 ou 3 opções, que é o que eu uso.

Numa situação em que a condição pode não acontecer. Eu iria com 1 ou 2. Caso contrário é apenas com base no que eu quero o código para fazer. (Ie. Eu concordo com o Cruizer)

I tendem a usar não se ... retorno.

Mas isso é se você estiver olhando para retornar uma variável. Obtendo disqualifiers fora do caminho primeira tende a torná-lo mais legível. Realmente depende do contexto da declaração e também a língua. Uma declaração caso pode funcionar melhor e ser legível na maioria das vezes, mas sofre de desempenho sob VB assim uma série de if / else faz mais sentido nesse caso específico.

Método 1 ou 3 para mim. Método 1 pode evitar um extra de entrada âmbito / saída, mas o método 3 evita uma atribuição extra. Eu tendem a evitar Método 2, como eu tento manter a lógica condição mais simples possível (neste caso, o! É estranho como poderia ser reescrita como método 1 sem ele) e pela mesma razão se aplica para o método 4.

Depende do que a condição é que eu estou testando.

Se é uma condição sinalizador de erro, então eu vou usar 1) definindo o sinalizador de erro para capturar o erro e, em seguida, se a condição for bem sucedida limpar o sinalizador de erro. Dessa forma, não há nenhuma chance de perder uma condição de erro.

Para tudo o resto eu usaria 3)

A NÃO lógica só aumenta a confusão quando a leitura do código - bem na minha cabeça, não posso falar por eveyone outra coisa: -)

Se a variável tem um valor padrão natural que eu iria com # 1. Se qualquer valor é igualmente (in) apropriado para um padrão, então eu iria com # 2.

Depende. Eu como os operadores ternários, mas às vezes é mais claro se você usar um 'if'. Qual dos quatro alternativas que você escolher depende do contexto, mas eu tendem a ir para o que faz a função do código mais claro, e que varia de situação para situação.

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