Como funciona o operador ternário?
-
19-08-2019 - |
Pergunta
Por favor, demonstrar como o operador ternário funciona com um if / else bloco regular. Exemplo:
Boolean isValueBig = value > 100 ? true : false;
Exact Duplicate: Como faço para usar o operador ternário?
Solução
Boolean isValueBig = ( value > 100 ) ? true : false;
Boolean isValueBig;
if( value > 100 ) {
isValueBig = true;
} else {
isValueBig = false;
}
Outras dicas
A diferença entre a operação ternária e if / else é que a expressão ternária é uma declaração que avalia um valor, enquanto if / else não é.
Para usar o seu exemplo, a alteração do uso de uma expressão ternária de if / else você poderia usar a seguinte declaração:
Boolean isValueBig = null;
if(value > 100)
{
isValueBig = true
}
else
{
isValueBig = false;
}
Neste caso, porém, a sua declaração é equivalente a esta:
Boolean isValueBig = (value > 100);
Quando eu era novo para C ++, eu achei que ele ajudou a ler esta construção da seguinte forma:
Boolean isValueBig = if condition ? then x else: y;
(Note que este não é um código válido. É apenas o que eu me treinei para ler na minha cabeça.)
Boolean isValueBig;
if (value > 100)
{
isValueBig = true;
}
else
{
isValueBig = false;
}
Boolean isValueBig;
if(value > 100) { isValueBig = true; } else { isValueBig = false; }
Eu nunca fui um fã do operador ternário, porque eu pensei que era difícil de ler. Por acaso, Jon Skeet e seu livro, C # in Depth finalmente atingido este velho sobre a cabeça e comecei a afundar-se. Jon disse, e eu parafrasear, pense nisso como uma pergunta.
valor> 100?
"sim": "não"
Agora, o cego pode ver.
Espero que isso ajude você faz uma segunda natureza.
Como citado a partir da :? Page Operador MSDN , "o operador condicional (? :) retorna um dos dois valores, dependendo do valor de uma expressão booleana."
Assim você pode usar o operador ternário para retornar mais do que apenas booleans:
string result = (value > 100 ) ? "value is big" : "value is small";
<?php
// Example usage for: Ternary Operator
$action = (empty($_POST['action'])) ? 'default' : $_POST['action'];
// The above is identical to this if/else statement
if (empty($_POST['action'])) {
$action = 'default';
} else {
$action = $_POST['action'];
}
?>
"A expressão (expr1) (expr2): (expr3) avalia a expr2 se expr1 avalia a true e expr3 se expr1 avalia a false . "
Certifique-se de que você não misture tipos de verdadeiro / falso peças em Java. Ela produz resultados estranhos: - (
Bad exemplo, porque você poderia facilmente escrever
Boolean isValueBig = value > 100 ? true : false;
como:
bool isValueBig = value > 100
Além disso, todos os outros já respondeu ele. Eu não recomendo o uso de operadores ternários para definir os valores bool, pois o que você está avaliando já é um valor booleano.
Eu percebi que era apenas um exemplo, mas valeu a pena apontar.
Outros têm respondido já mas aqui está uma coisa que você realmente deve saber sobre o uso do ternário e com isso quero dizer não nunca fazê-lo.
Vamos supor que você tem um pedaço de código que é suposto para retornar um objeto diferente para cada possível variação de algum valor, digamos que por amor de simpliticy um inteiro entre 1 e 5. Seus olhares código como este:
if(i==1) {
return new ObjectOne();
} else if(i==2) {
return new ObjectTwo();
} else if(i==3) {
return new ObjectThree();
} else if(i==4) {
return new ObjectFour();
} else if(i==5) {
return new ObjectFive();
} else {
return new DefaultObject();
}
É fácil de entender, mas um pouco pesado. Desde ternário é apenas outra maneira de escrever uma declaração if..else , que pode ser reformulado para esta ??p>
return (i==1) ? new ObjectOne() :
(i==2) ? new ObjectTwo() :
(i==3) ? new ObjectThree() :
(i==4) ? new ObjectFour() :
(i==5) ? new ObjectFive() : new DefaultObject();
É chamado aninhada ternário . É mau, agora que você sabe sobre isso nunca use-o. Pode parecer ter seus usos, como o caso acima, mas é muito provável que, em situações da vida real que você precisa para usá-lo em algum lugar onde ele perde a legibilidade (pense configurações alterando com quantidade variável de parâmetros e tal).
setor Bonus: Nunca ajuste os valores de atributos dentro if (), basta olhar para isto: if(bool=true!=false) { .. }
Como citado da MSDN (observado em um post anterior)
resultado string = (valor> 100)? "Valor é grande": "valor é pequeno";
poderia ser lido como:
é um valor superior a 100? Se sim, resultado de cadeia é "valor é grande", se não, resultado de cadeia é "valor é pequeno".