Duvida básica

7 respostas
andrejusti

Pessoal
como se chama essa tecnica…

String teste = null; String a = teste == null ? "-" : "";
e pra que ela exatamente serve…

7 Respostas

ViniGodoy

O operador ternário é uma espécie de if, que retorna um valor.

Escrever:

String a; if (teste == null) a = "-"; else a = "";

É equivalente ao seu código. Mas o teste para null é muito usado quando queremos obter um valor de um objeto, ou retornar null, caso nem sequer esse objeto exista. Por exemplo:

public int getPontosMelhorCliente() { Cliente c = obterMelhorCliente(); //Pode retornar null, caso não haja um. return c == null ? null : c.getPontos(); }

Note que se c fosse nulo, chamar c.getPontos() resultaria numa NullPointerException. Algumas linguagens já estão simplificando essa construção. O groovy, por exemplo, incluiu o “safe navigation operator”, justamente com esse fim:

return c?.getPontos();
Marky.Vasconcelos

E é previsto que no Java 7 vai ter o “safe null navigator”.

furutani

Interessante, e o que aconteceria no lugar do NullPointerException?

M

Interessante, e o que aconteceria no lugar do NullPointerException?
No caso de métodos void, creio que nada. No caso de métodos com retorno deve retornar null (isso tudo é um palpite, é claro). Algo como:

PreparedStatement = null;
// instancia o dito cujo e trabalha com ele
finally {
    ps?.close();
}

Seria o equivalente a:

PreparedStatement = null;
// instancia o dito cujo e trabalha com ele
finally {
    if (ps != null) {
        ps.close();
    }
}

E o código:

Object a = instaciacaoDoObjetoQuePodeRetornarNull();
String s = a?.toString();

Seria equivalente a:

Object a = instaciacaoDoObjetoQuePodeRetornarNull();
String s;
if (a == null) {
    s = null;
} else {
    s = a.toString();
}

Mas o NullPointerException deve continuar ocorrendo se fizermos da maneira que fazemos atualmente (sem usar o safe null navigator).

andrejusti

Muito Obrigado pessoal,
muito bem respondida minha pergunta…
Abraços

andrejusti

Agora testando código me veio uma duvida, tudo ou quase tudo que faço com “if” consigo fazer com operador ternário, quando usar um ou outro…?

M

Use if/else com if’s aninhados, com condições complexas ou qualquer outra situação em que usar um if ternário deixará seu código sujo e ruim de ler. Para condições simples, pode-se perfeitamente usar um if ternário.

Criado 30 de janeiro de 2010
Ultima resposta 31 de jan. de 2010
Respostas 7
Participantes 5