Sugestão de nova sintaxe de if (criando variável como no for) - o que acham?

7 respostas
P

Pessoal, me corrija se eu estiver postando na categoria errada, essa pareceu a mais adequada.

A questão é a seguinte… gostaria de saber qual a opinião de vocês sobre uma nova sintaxe de if (que não existe… seria uma sugestão para a Oracle).
Ela permitiria a criação de uma variável dentro do parênteses do if, como no for.

O “problema” (mas não muito um problema, na verdade) atual é o seguinte… eu tenho que das duas uma:
[list]ou criar a variável fora do if com o valor e dentro do if fazer a comparacao com null usando a variável, mas depois do if a variável ainda existe desnecessariamente;[/list]
[list]ou fazer if (get() != null) { Object o = get(); } e desnecessariamente invocar o método get() duas vezes.[/list]

Seria algo assim (só acho que poderia ser um pouco diferente para não começar com 2 “abre parênteses” pq fica estranho):

if ((Integer test = getNumber()) != null) {
	// codigo.. aqui eu teria variável test
} else {
	// aqui não mais, pois é null o valor mesmo
}
// aqui também não

Como seria atualmente um for… inclusive até consegui reproduzir o comportamento idealizado em um… só que não vou ter o else :S.

for (Integer test = getNumber(); test != null; test = null) {
	// codigo.. aqui eu tenho a variável test
}

O que acham?
E onde será que faço esse tipo de sugestão na Oracle?

Abs,
Paulo

7 Respostas

rmendes08

Na verdade, essa decisão não é da Oracle, e sim do JCP (Java Comunity Process). Para você incluir essa sugestão você deve mandar uma proposta de atualização da JSR 901, que define a linguagem de programação Java:

http://jcp.org/en/jsr/detail?id=901

Os detalhes sobre como encaminhar a sugestão eu não conheço, mas se você entrar em contato com o pessoal do SouJava eles podem te orientar melhor.

d34d_d3v1l

Juro que não entendi o objetivo.

d34d_d3v1l
String decisao;
int num = 2;

decisao = (num == 2) ? "Numero é o 2" : "Diferente de 2";

não né?

drsmachado
d34d_d3v1l:
String decisao;
int num = 2;

decisao = (num == 2) ? "Numero é o 2" : "Diferente de 2";

não né?


A idéia do paulo é fazer com que o if possa instanciar um objeto de alguma classe e permitir que este exista apenas se a condição for verdadeira.
A base disto vem do for (completo), onde podemos criar um objeto que existirá enquanto o laço estiver em execução.

P

Valeu rmendes08, vou ver com eles.

d34d_d3v1l , o objetivo é pensando nas 2 seguintes possibilidades q eu não acho boas pelos motivos:
Possibilidade 1:

Object obj = getValor();
if (obj != null) {
// faço algo aqui com obj
}

e a variável obj que não será mais utilizada continua existindo… o GC pode limpar, mas pode poluir na implementação com uma variável que não será mais usada.


Possibilidade 2:

if (getValor() != null) {
Object obj = getValor();
// faço algo aqui com obj
}

e a variável obj não existe mais, porém eu fiz invoquei getValor() duas vezes

Com o jeito que eu sugeri, dentro do () do if seria criada a variável, e fechando o escopo com }, a variável deixaria de existir… igualzinho ao for padrão.
Mais claro?

P
drsmachado:
d34d_d3v1l:
String decisao;
int num = 2;

decisao = (num == 2) ? "Numero é o 2" : "Diferente de 2";

não né?


A idéia do paulo é fazer com que o if possa instanciar um objeto de alguma classe e permitir que este exista apenas se a condição for verdadeira.
A base disto vem do for (completo), onde podemos criar um objeto que existirá enquanto o laço estiver em execução.

Isso mesmo!! vc resumiu mto bem rs.. é essa a ideia

d34d_d3v1l

ahh beleza.

legal cara. :slight_smile:

Criado 25 de junho de 2012
Ultima resposta 25 de jun. de 2012
Respostas 7
Participantes 4