Eu li em uma recente revisão de código que ambos ternary operator (condition ? foo : bar)
e o XOR operator ^
raramente são usados em Java. É verdade?
Se sim, é porque são menos legíveis? ou algum outro motivo.
java
operators
bitwise-operators
Kuldeep Jain
fonte
fonte
Respostas:
O operador ternário é bem usado, especialmente para verificações / padrões curtos de nulidade:
Algumas pessoas consideram isso não tão legível quanto um if / else, mas essa não era a questão.
O operador XOR bit a bit é usado apenas no processamento de bits. Se você precisar de um XOR bit a bit, não há como contorná-lo.
O operador lógico XOR é realmente tão raro, que eu não o vi nos últimos dez anos em Java em casos válidos . Isso também se deve ao fato de o XOR booleano "não escalar" como
||
ou&&
. O que eu quero dizer:No último caso, acho que o codificador significava "apenas um deveria ser verdadeiro". Mas XOR é uma fera. O codificador pegou a fera e não o que queria.
Essa seria uma pergunta interessante da entrevista: qual é o resultado da última
if
?fonte
!=
booleanos algumas vezes, e o XOR lógico nunca passou pela minha cabeça.Eu costumava achar o operador ternário difícil de analisar, mas desde então descobri que há alguns lugares onde é muito útil. Estes não tendem a ser a lógica do aplicativo, mas o log.
Por exemplo:
Para mim, isso é muito melhor do que qualquer um
Ou
Em resumo, é uma questão de onde está sendo usado e para isso.
Quanto aos bits, ainda luto com eles, mas é porque estou acostumado a trabalhar em um alto nível de abstração, como outros comentaristas sugeriram. Se eu me deparar com algum código que alguém decidiu usar para ser "eficiente", o tempo perdido enquanto eu descobri isso nega benefícios.
fonte
foo.setParam( bool ? ClassA.method() : ClassB.method )
. Funciona, mas é um pouco de cheiro, IMO.unless ( !bool ) {
. :)Esta é mais uma resposta baseada em opinião, mas no meu caso:
De fato, por alguma razão, acho o operador ternário menos legível do que uma construção if-else.
Quanto ao XOR, provavelmente a maioria dos programas Java não tem utilidade para manipulações bit a bit de baixo nível. Na maioria das vezes, parece ser apenas uma relíquia herdada de C.
fonte