Trabalho com Java há alguns anos, mas até recentemente não encontrei essa construção:
int count = isHere ? getHereCount(index) : getAwayCount(index);
Esta é provavelmente uma pergunta muito simples, mas alguém pode explicar isso? Como eu o leio? Tenho certeza de que sei como isso funciona.
- se
isHere
for verdade,getHereCount()
é chamado, - se
isHere
for falsogetAwayCount()
é chamado.
Corrigir? Como se chama essa construção?
java
syntax
ternary-operator
conditional-operator
mainstringargs
fonte
fonte
Respostas:
Sim, é uma forma abreviada de
É chamado de operador condicional . Muitas pessoas (erroneamente) o chamam de operador ternário , porque é o único operador ternário (três argumentos) em Java, C, C ++ e provavelmente muitas outras linguagens. Mas, teoricamente, poderia haver outro operador ternário, enquanto que só pode haver um operador condicional .
O nome oficial é fornecido na Java Language Specification :
Observe que os dois ramos devem levar a métodos com valores de retorno:
Portanto, se
doSomething()
edoSomethingElse()
são métodos nulos, você não pode compactar isso:nisso:
Palavras simples:
fonte
the
na itálica dethe ternary operator
, e é isso que ele quer dizer com erro, não comternary operator
erro. O operador ternário implica que, como Michael diz, é o único, que por sua vez poderia levar a supor não pode haver outros operadores ternários, que é o que Michael está dizendo é errônea, e eu concordo, ele iria ser uma suposição errônea.Outros responderam isso em extensão razoável, mas geralmente com o nome "operador ternário".
Sendo o pedante que sou, gostaria de deixar claro que o nome do operador é o operador condicional ou "operador condicional?:". É um operador ternário (na medida em que possui três operandos) e é o único operador ternário em Java no momento.
No entanto, a especificação é bastante clara de que seu nome é operador condicional ou "operador condicional?:" Para ser absolutamente inequívoco. Eu acho que é mais claro chamá-lo com esse nome, pois indica o comportamento do operador até certo ponto (avaliando uma condição) e não apenas quantos operandos ele possui.
fonte
&&
o operador condicional - e o operador||
condicional - ou, mas usa apenas "o operador condicional" para?:
.)De acordo com a Sun Java Specification , é chamado de Operador Condicional. Veja a seção 15.25. Você está certo quanto ao que faz.
O operador condicional? : usa o valor booleano de uma expressão para decidir qual das outras duas expressões deve ser avaliada.
O operador condicional é sintaticamente associativo à direita (agrupa da direita para a esquerda), de modo que a? B: c? D: e? F: g significa o mesmo que a? B: (c? D: (e? F : g)).
O operador condicional possui três expressões de operando; ? aparece entre a primeira e a segunda expressões e: aparece entre a segunda e a terceira expressões.
A primeira expressão deve ser do tipo booleano ou booleano, ou ocorre um erro em tempo de compilação.
fonte
significa :
fonte
Não exatamente correto, para ser preciso:
Que "retornou" é muito importante. Isso significa que os métodos devem retornar um valor e esse valor deve ser atribuído em algum lugar.
Além disso, não é exatamente sintaticamente equivalente à versão if-else. Por exemplo:
Se codificado com if-else sempre resultará em mais bytecode.
fonte
Ternário, condicional; tomate, tomate. O que é realmente valioso é a inicialização variável. Se (como eu) você gosta de inicializar variáveis onde elas são definidas, o operador ternário condicional (pois são os dois) permite que você faça isso nos casos em que há condicionalidade sobre seu valor. Particularmente notável nos campos finais, mas útil em outros lugares também.
por exemplo:
Sem esse operador - por qualquer nome - você teria que tornar o campo não final ou escrever uma função simplesmente para inicializá-lo. Na verdade, isso não está certo - ele ainda pode ser inicializado usando if / else, pelo menos em Java. Mas acho esse limpador.
fonte
Se a condição for
true
, avalie a primeira expressão. Se a condição forfalse
, avalie a segunda expressão.É chamado de Operador Condicional e é um tipo de Operação Ternária .
fonte
Esse construto é chamado Operador Ternário de Ciência da Computação e técnicas de Programação.
E a Wikipedia sugere a seguinte explicação:
Não apenas em Java, esta sintaxe também está disponível no PHP, Objective-C.
No link a seguir , fornece a seguinte explicação, que é muito boa de entender:
Isso pode ser legível para algumas condições lógicas que não são muito complexas, caso contrário, é melhor usar o bloco If-Else com a combinação pretendida de lógica condicional.
Podemos simplificar os blocos If-Else com este operador Ternary para uma linha de instrução de código.
Por exemplo:
Pode ser igual ao seguinte:
Portanto, se nos referirmos à sua declaração:
Na verdade, é o equivalente a 100% do seguinte bloco If-Else :
É isso aí!
Espero que isso tenha sido útil para alguém!
Felicidades!
fonte
Corrigir. É chamado o operador ternário . Alguns também o chamam de operador condicional .
fonte
Seu operador ternário (? :)
fonte
Você pode estar interessado em uma proposta para alguns novos operadores semelhantes ao operador condicional. Os operadores com segurança nula habilitarão códigos como este:
Seria especialmente conveniente onde ocorre o desembaraço automático.
Foi selecionado para uma análise mais aprofundada no "Project Coin" do JDK 7.
fonte
Na verdade, pode levar mais de 3 argumentos. Por exemplo, se queremos verificar se um número é positivo, negativo ou zero, podemos fazer o seguinte:
o que é melhor do que usar if, else if, else.
fonte
É o operador condicional e é mais do que apenas uma maneira concisa de escrever declarações if.
Como é uma expressão que retorna um valor, pode ser usada como parte de outras expressões.
fonte
Sim você está correto. ?: normalmente é chamado de "operador condicional ternário", geralmente chamado de "operador ternário". É uma versão abreviada do padrão if / else condicional.
Operador condicional ternário
fonte
Eu realmente gosto deste operador, mas o leitor deve ser levado em consideração.
Você sempre precisa equilibrar a compactação do código com o tempo gasto na leitura e com algumas falhas bastante graves.
Primeiro de tudo, existe o caso do Asker Original. Ele passou uma hora postando sobre isso e lendo as respostas. Quanto tempo levaria o autor a escrever cada um?: Como um se / então ao longo de toda a sua vida. Nem uma hora para ter certeza.
Em segundo lugar, em idiomas do tipo C, você tem o hábito de simplesmente saber que os condicionais são a primeira coisa na linha. Percebi isso quando eu estava usando Ruby e me deparei com linhas como:
Se eu fosse usuário Ruby há muito tempo, provavelmente não teria problemas com essa linha, mas vindo de C, quando você vê "callMethodWhatever" como a primeira coisa na linha, espera que seja executado. O?: É menos enigmático, mas ainda incomum o suficiente para deixar um leitor de fora.
A vantagem, no entanto, é uma sensação muito legal em sua barriga quando você pode escrever uma declaração if de 3 linhas no espaço de 1 das linhas. Não posso negar isso :) Mas, honestamente, não é necessariamente mais legível por 90% das pessoas por aí simplesmente por causa de sua raridade.
Quando é realmente uma atribuição baseada em um valor booleano e em valores, não tenho problema com isso, mas pode ser facilmente abusada.
fonte
Expressões condicionais estão em um estilo completamente diferente, sem explícito se na instrução.
A sintaxe é: expressão booleana? expressão1: expressão2;
O resultado dessa expressão condicional é
expression1 se expressão booleana for verdadeira;
caso contrário, o resultado será expressão2.
Suponha que você queira atribuir o número maior de variáveis num1 e num2 a max. Você pode simplesmente escrever uma declaração usando a expressão condicional: max = (num1> num2)? num1: num2;
Nota: Os símbolos? e: aparecem juntos em uma expressão condicional. Eles formam um operador condicional e também chamado de operador ternário porque ele usa três operandos. É o único operador ternário em Java.
citado em: Introdução à Programação Java 10ª edição por Y. Daniel Liang página 126 - 127
fonte