Pergunta

Eu mantê-lo em uma única linha, se é curta. Ultimamente tenho vindo a utilizar este estilo para expressões operador ternário mais longos ou aninhadas. Um exemplo artificial:

$value = ( $a == $b ) 
            ? 'true value # 1'
            : ( $a == $c )
                ? 'true value # 2'
                : 'false value';

Pessoalmente qual estilo você usa, ou encontrar mais legível?

Editar: (sobre quando usar ternário do operador)

Eu costumo evitar o uso de mais de 2 níveis operador ternário profundo. I tendem prefere 2 níveis de operador profunda ternário mais de 2 nível if-else, quando estou ecoando variáveis ??em scripts de modelo PHP.

Foi útil?

Solução

O operador ternário é geralmente a ser evitada, mas esta forma pode ser bastante legível:

  result = (foo == bar)  ? result1 :
           (foo == baz)  ? result2 :
           (foo == qux)  ? result3 :
           (foo == quux) ? result4 : 
                           fail_result;

Desta forma, a condição eo resultado são mantidos juntos na mesma linha, e é bastante fácil de roçar-se e entender o que está acontecendo.

Outras dicas

Eu tento não usar um operador ternário para escrever condições aninhadas. Ele desafia a legibilidade e não fornece nenhum valor extra sobre usando uma condicional.

Só se pode caber em uma única linha, e é cristalino o que significa, eu usá-lo:

$value = ($a < 0) ? 'minus' : 'plus';

Pessoalmente, eu só uso o operador ternário se ele se encaixa em uma linha. Se ele precisar de espaço, então é hora para o bom e velho

if else if else

um estilo I às vezes uso, o que eu estou trazendo à tona uma vez que não foi mencionado, é assim:

$result = ($x == y)
        ? "foo"
        : "bar";

.. mas normalmente só se colocar tudo em uma única linha torna muito longo. Eu acho que ter o = ? : toda a linha se torna olhar mais puro.

PHP aninhados operadores ternários comportar de maneira diferente.

Esta sintaxe passa todos os testes a seguir. Baseado em http://deadlytechnology.com/web-development-tips/php- ternário-sintaxe /

$myvar = ($x == $y)
?(($x == $z)?'both':'foo')
:(($x == $z)?'bar':'none');

.

Veja: http://au.php.net/ternary

Exemplo # 3 "não-óbvio comportamento do ternário" explica porque o seguinte não funciona no PHP.

$x = 1;
$y = 2;
$z = 3;   
$myvar = ($x == $y) 
       ? "foo" 
       : ($x == $z) 
         ? "bar" 
         : "none";  
$myvar == 'none'; // Good

$x = 1;
$y = 2;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Good

$x = 1;
$y = 1;
$z = 3;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

$x = 1;
$y = 1;
$z = 1;   
$myvar = ($x == $y) ? "foo" : ($x == $z) ? "bar" : "none";  
$myvar == 'bar'; // Bad!

operadores ternários são curtos formas eficazes para escrever simples se declarações. Eles não devem ser aninhada ou difícil de ler. Lembre-se: Você escreve o software uma vez, mas está é lido 100 vezes. Deveria ser mais fácil de ler do que escrever.

Eu tendem a colocar a condição entre parênteses: (a == b)? 1: 0

Eu vou discordar com a opinião comum. Eu sou uma espécie de como Imran com o meu estilo operador condicional. Se ele se encaixa de forma limpa em uma linha, eu mantê-lo em uma linha. Se ele não se encaixa de forma limpa em uma linha, eu quebrá-lo, mas eu uso apenas uma única guia (4 vagas; eu tenho VS definido para inserir espaços para guias) para o travessão. Eu não saltar imediatamente para if-else, porque uma grande parte do tempo o operador condicional faz mais sentido contextualmente. (Se ele não faz sentido contextualmente, no entanto, eu simplesmente não usá-lo.)

Além disso, eu não ninho operadores condicionais. Nesse ponto, eu achar que é muito difícil de ler, e é hora de ir para o mais detalhado estilo if-else.

O "exemplo inventado" é como eu iria recuar, exceto que eu iria recuar a partir da margem esquerda, não com base em onde o (ou o que está na linha acima.

Para os detratores ternários - legibilidade é o ponto. Se você não acha que ele faz para o código mais legível, não usá-lo. Mas acho que o contrário seja o caso, pelo menos por algum tempo.

O ternário condicional pode tornar o código mais limpo e elegante, eo mais importante, ajuda você colocar ênfase nas coisas certas e evitar repetir-se. Considerar usá-los, mas não tornar o código menos legível ao fazê-lo. Em VB.NET:

'before refactoring 
If x = 0 Then                    ' If-Then-Else puts emphasis on flow control
    label = "None"
Else
    label = Foo.getLabel(x)      '  If-Then-Else forces repeat of assignment line
End If

'after refactoring    
label = If(x = 0, "None", Foo.getLabel(x)) ' ternary If puts emphasis on assignment

Note que "é menos legível" não é a mesma coisa que "eu não estou acostumado a ver isso."

Eu não usá-lo. Ele sempre cheirava-me como tentar economizar espaço e digitar o código-fonte com a expectativa de que a pequena fonte == código compilado mais eficiente.

Eu não encontrá-lo legível em tudo, mas muito do que é porque eu nunca usá-lo.

Eu não tendem a usar o operador ternário em tudo que eu encontrar, se .. outra coisa muito mais legível.

Imran, você formatou este lindamente. No entanto, o operador ternário não tendem a obter ilegível como você ninho mais de dois. um bloco de if-else pode dar-lhe um nível extra de nidificação compreensível. Além disso, usar uma função ou programação orientada a mesa.

$foo = (isset($bar)) ? $bar : 'default';

Eu, pessoalmente, só usá-lo para uma atribuição de uma variável (em java), por exemplo:

String var = (obj == null) ? "not set" : obj.toString();

e (outro exemplo) quando se utiliza a função que não permite nulo parâmetro tais como:

String val; [...]
int var = (val == null) ? 0 : Integer.parseInt(val);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top