Que estilo de codificação que utiliza para ternário operador? [fechadas]
-
04-07-2019 - |
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.
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);