[if(condicao){retorno} else{retorno}] x [(condicao)?(retorno):(retorno);]

Quando necessário atribuir valor a uma variável segundo alguma condição. Melhor usar if else? Melhor usar if ternário?
Depende do programador, creio eu.
Veja o exemplo de um algoritmo para calcular o IMC:

[code]public class CalculoIMC {
private double meuIndice;
private double meuPesoMininmoIdeal;
private double meuPesoMaximoIdeal;

public CalculoIMC(double pesoKG, double alturaM) {
	this.meuIndice = pesoKG / (alturaM * 2);
	this.meuPesoMininmoIdeal = 18.5 * (alturaM * 2);
	this.meuPesoMaximoIdeal = 24.9 * (alturaM * 2);
}

public void comIF(){
	String resposta = null;
	if(this.meuIndice < 18.5){
		resposta = "Você está abaixo do peso ideal";
	}
	else if(this.meuIndice < 24.9){
		resposta = "Parabéns ? você está em seu peso normal!";
	}
	else if(this.meuIndice < 29.9){
		resposta = "Você está acima de seu peso (sobrepeso)";
	}
	else if(this.meuIndice < 34.9){
		resposta = "Obesidade grau I";
	}
	else if(this.meuIndice < 29.9){
		resposta = "Obesidade grau II";
	}
	else{
		resposta = "Obesidade grau III";
	}
	this.escreva(resposta);
}

public void comIFTernario() {
	String resposta = 
			this.meuIndice < 18.5? "Você está abaixo do peso ideal":
			this.meuIndice < 24.9? "Parabéns ? você está em seu peso normal!":
			this.meuIndice < 29.9? "Você está acima de seu peso (sobrepeso)":
			this.meuIndice < 34.9? "Obesidade grau I":
			this.meuIndice < 29.9? "Obesidade grau II":
			"Obesidade grau III"
	;
	this.escreva(resposta);
}

private void escreva(String resposta) {
	System.out.printf("%s\nSeu IMC eh: [%.2f]\nSeu peso ideal estah entre: [%.2fkg e %.2fkg]\n",
			resposta,
			this.meuIndice,
			this.meuPesoMininmoIdeal,
			this.meuPesoMaximoIdeal);
}

public static void main(String[] args) {
	CalculoIMC calculoIMC = new CalculoIMC(80.0, 2.0);
	calculoIMC.comIF();
	System.out.println("*************************");
	calculoIMC.comIFTernario();
}

}
[/code]

Depende não só de se uma atribuição de valor vindo de uma expressão boolean.

Também depende da complexidade da condição e possibilidade de respostas.

Se for complexa a condição, fica mais claro utilizar IF normal.

Se você tiver muitos IFs, então é melhor do que utilizar ternário encadeado.

Se você quiser tornar mais simples sua atribuição complexa, a melhor maneira é a criação de uma função para abstrair a complexidade.

wiliamps

Só um detalhe. O nome é “operador ternário”, não “if ternário”. O operador ternário não é um if.

achei que era “if”. vlw

Sendo um pouco chato, o nome correto não é nem "operador ternário" nem "if ternário" e sim, segundo a "Java Language Specification" http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf , parágrafo 15, alínea 25 (pg. 521), "operador condicional".

O "operador condicional" casualmente é um operador ternário (no sentido que ele recebe três parâmetros), mas poderíamos ter outros operadores ternários na linguagem. É que normalmente ele costuma ser o único operador ternário em várias linguagens (como Perl, onde ele é "?? !!", C#, C++ etc.)

Esse operador foi herdado do C (infelizmente, em minha opinião.

Eu preferiria algo como:

x = if (a &lt; b) then y else z;

em vez do nosso operador condicional,

x = (a &lt; b) ? y : z;

[quote=Wikipedia]
Many programming languages that use C-like syntax feature a ternary operator, ?:, which defines a conditional expression. Since this operator is often the only existing ternary operator in the language, it is sometimes simply referred to as "the ternary operator". In some languages, this operator is referred to as "the conditional operator"[/quote]

@marcelojunior eu posso até estar enganado mas não deveria ser <= 24.9? Ou melhor, < 25?

Existe o problema da legibilidade. Tem muita gente que não conhece o operador ternário (ou condicional) e acabaria não entendendo o código.

Se fosse manter com if/else eu alteraria o código para:

[code] public void comIFTernario() {
this.escreva(resultado(this.meuIndice));
}

String resultado (double valor) {
	if (valor < 18.5)
		return "Você está abaixo do peso ideal";
	else if (valor < 24.9)
		return "Parabéns ) return você está em seu peso normal!";
	else if (valor < 29.9)
		return "Você está acima de seu peso (sobrepeso)";
	else if (valor < 34.9)
		return "Obesidade grau I";
	else if (valor < 29.9)
		return "Obesidade grau II";
	else
		return "Obesidade grau III";  
}[/code]