O que significa ? no java [Resolvido ]

25 respostas
A
Olá estou com uma duvida ... Gostaria de saber o que significa esse ponto de interrogação no java .
valorAtual = itrAlunos.hasNext() ? itrAlunos.next() : null;

Obrigada.

25 Respostas

Felagund

esse é o operador ternario, é como se fosse um IF else

o ? representa o if e o : o else

AnDrOiDe

serve google tbm…não precisaria postar uma coisa dessa aqui !

saulods

http://www.guj.com.br/posts/list/3333.java

A

obrigada [ Exeto par ao AnDrOiDe ] por terem esclarecido a minha duvida …
Fico muito Grata .

fabiomazzo

AnDrOiDe: Pelo que percebi ele postou no “Java Básico”. Se não quer ajudar, não ajude, mas pelo menos não tumultue os tópicos.

LucasAdri07

Geralmente o pessoal prefere usar if e else mesmo, mais usar ? e : também é uma alternativa.

AnDrOiDe

só falei pro cara buscar no GOOGLE como todo mundo fala , tbm lek niguem esta causando aki naum hein!!!

LucasAdri07

só falei pro cara buscar no GOOGLE como todo mundo fala , tbm lek niguem esta causando aki naum hein!!!

Se ele está na area de “Java Basico”, e o assunto for referido a este, provavelmente o usuario precisa de ajuda…
Por esse motivo está aqui…

ViniGodoy

A ? é um operador, não um comando. O if é um comando.

A diferença é que operadores retornam valor e, portanto, podem ser usados onde ifs não podem.

Por exemplo, se você tiver uma função:

public void fazQualquerCoisa(int valor)

Vai precisar duplicar a chamada num if:

if (x == 0) { fazQualquerCoisa(10); } else { fazQualquerCoisa(20); }

Mas não precisará com o ternário:

fazQualquerCoisa(x == 0 ? 10 : 20);
LucasAdri07

ViniGodoy:
A ? é um operador, não um comando. O if é um comando.

A diferença é que operadores retornam valor e, portanto, podem ser usados onde ifs não podem.

Por exemplo, se você tiver uma função:

public void fazQualquerCoisa(int valor)

Vai precisar duplicar a chamada num if:

if (x == 0) { fazQualquerCoisa(10); } else { fazQualquerCoisa(20); }

Mas não precisará com o ternário:

fazQualquerCoisa(x == 0 ? 10 : 20);

Nossa, tentei ajudar ela e acabei me atrapalhando…

Mas em fazQualquerCoisa(x == 0 ? 10 : 20); ele não acaba tendo a mesma função que o if/else?

L

só falei pro cara buscar no GOOGLE como todo mundo fala , tbm lek niguem esta causando aki naum hein!!!

Se ele está na area de “Java Basico”, e o assunto for referido a este, provavelmente o usuario precisa de ajuda…
Por esse motivo está aqui…

então pq o cara esta falando que ele esta tumultuando naum vi nd d++ só falou pra o cara buscar no google…ou pq o cara é corinthiano e vem tirar o cara!!!palhaçada…to defendendo niguem !

LucasAdri07

só falei pro cara buscar no GOOGLE como todo mundo fala , tbm lek niguem esta causando aki naum hein!!!

Se ele está na area de “Java Basico”, e o assunto for referido a este, provavelmente o usuario precisa de ajuda…
Por esse motivo está aqui…

então pq o cara esta falando que ele esta tumultuando naum vi nd d++ só falou pra o cara buscar no google…ou pq o cara é corinthiano e vem tirar o cara!!!palhaçada…to defendendo niguem !

É, mais ele falou, “não precisaria postar essas coisas aqui”, se a pessoa derrepente quer uma explicação melhor, pois não compreendeu muito bem, ela pode vim consultar nossos colegas do GUJ.

L

só falei pro cara buscar no GOOGLE como todo mundo fala , tbm lek niguem esta causando aki naum hein!!!

Se ele está na area de “Java Basico”, e o assunto for referido a este, provavelmente o usuario precisa de ajuda…
Por esse motivo está aqui…

então pq o cara esta falando que ele esta tumultuando naum vi nd d++ só falou pra o cara buscar no google…ou pq o cara é corinthiano e vem tirar o cara!!!palhaçada…to defendendo niguem !

É, mais ele falou, “não precisaria postar essas coisas aqui”, se a pessoa derrepente quer uma explicação melhor, pois não compreendeu muito bem, ela pode vim consultar nossos colegas do GUJ.

entendi sim…mas naum precisava falar que o cara estava tumultuando e pronto…hahaha manu ponto final acabo essa discussão!!!

Hellmanss

AnDrOiDe:
serve google tbm…não precisaria postar uma coisa dessa aqui !

Respeito é uma coisas que os “manos” não tem :lol:

L

cada um fala o que quer manu , todo mundo tem sua boca e seu jeito de ser se o cara foi assim o problema é dele e pronto!

agora vão vir mo par de genet falando merda agora tenhu certeza!!!

ViniGodoy

Sim, sim. Tem a mesma função, mas com apenas 1 única chamada a fazQualquerCoisa, já que ele pode ser usado como um valor, diretamente. E isso evita que um programador desatento corrija só o que está dentro do if, esquecendo de corrigir o que está dentro do else, caso tenha que, por exemplo, mudar o nome da função.

Ele também é um pouco mais limitado, por ser um operador. As duas expressões devem, necessariamente, retornar o mesmo tipo de dado (ou dados compativeis). Isso aqui, não é possível reescrever com ternário:

if (x.getClass() == String.class) escrever(x.toString()); else escrever((Integer)x);

Simplesmente pq isso faria um ternário que metade da expressão retornaria String e metade Integer. Também não é possível chamar funções void, já que o ternario deve retornar valor.

ViniGodoy

Ah sim, por ser um operador, você também pode usar o ternário dentro de expressões matemáticas. Isso é útil para representar, por exemplo, funções descontínuas ou como esta:

public void someFunction(float y) return (y < 0 ? -(y*y) : y*y) + 1000; }

Mas é claro, seria possível substituir esse código por ifs. Só ficaria mais complicado, e novamente com código duplicado.

LucasAdri07

Sim, sim. Tem a mesma função, mas com apenas 1 única chamada a fazQualquerCoisa, já que ele pode ser usado como um valor, diretamente. E isso evita que um programador desatento corrija só o que está dentro do if, esquecendo de corrigir o que está dentro do else, caso tenha que, por exemplo, mudar o nome da função.

Ele também é um pouco mais limitado, por ser um operador. As duas expressões devem, necessariamente, retornar o mesmo tipo de dado (ou dados compativeis). Isso aqui, não é possível reescrever com ternário:

if (x.getClass() == String.class) escrever(x.toString()); else escrever((Integer)x);

Simplesmente pq isso faria um ternário que metade da expressão retornaria String e metade Integer. Também não é possível chamar funções void, já que o ternario deve retornar valor.

Mais a maior vantagem dele seria na hora da correção de algum erro, seria visivel a necessidade de mudar tanto o ? quanto o :, correto?
E tambem se pode usar um por exemplo fazQualquerCoisa(x == 0 ? 10 : 20 : 30); no caso de o uso de dois else?

A

OBRIGADA pelas explicações …
A propoito gostaria de esclarecer algumas coisas …
A primeira ale[vou mudar] é de alessandra , ou seja não é ele é ela hahahahahah …

Eu consultei o google primeiro , só que é dificil procurar bo google um ponto de interrogação . hahhaha …

E a explicações de vc´s foram 10000000 …
não fiquei com nenhuma duvida por isso agradeço mais uma vez… :smiley:

LucasAdri07

alepsilva14:
OBRIGADA pelas explicações …
A propoito gostaria de esclarecer algumas coisas …
A primeira ale[vou mudar] é de alessandra , ou seja não é ele é ela hahahahahah …

Eu consultei o google primeiro , só que é dificil procurar bo google um ponto de interrogação . hahhaha …

E a explicações de vc´s foram 10000000 …
não fiquei com nenhuma duvida por isso agradeço mais uma vez… :D

Que eu saiba o GUJ não permite troca de nick…
Só entrando em contato com eles acho…

ViniGodoy

LucasAdri07:
Mais a maior vantagem dele seria na hora da correção de algum erro, seria visivel a necessidade de mudar tanto o ? quanto o :, correto?
E tambem se pode usar um por exemplo fazQualquerCoisa(x == 0 ? 10 : 20 : 30); no caso de o uso de dois else?

Na sua frase, a quem você se refere quando fala “a maior vantagem dele”? Quem é “dele” na frase?

No caso de usar dois elses, você também terá duas condições.

int y = x == 0 ? 10 : (x == 20 ? 1 : 2);

Mas nesse caso, já prefiro não usar o ternário. A legibilidade fica seriamente comprometida.

LucasAdri07

ViniGodoy:
LucasAdri07:
Mais a maior vantagem dele seria na hora da correção de algum erro, seria visivel a necessidade de mudar tanto o ? quanto o :, correto?
E tambem se pode usar um por exemplo fazQualquerCoisa(x == 0 ? 10 : 20 : 30); no caso de o uso de dois else?

Na sua frase, a quem você se refere quando fala “a maior vantagem dele”? Quem é “dele” na frase?

No caso de usar dois elses, você também terá duas condições.

int y = x == 0 ? 10 : (x == 20 ? 1 : 2);

Mas nesse caso, já prefiro não usar o ternário. A legibilidade fica seriamente comprometida.

Me refiro ao uso de ternário no caso, ? e :

É realmente ficaria muito dificil de ser lido o código, por isso falei da vantagem de se usar ternário seria na hora da correção de um erro.

ViniGodoy

alepsilva14:
OBRIGADA pelas explicações …
A propoito gostaria de esclarecer algumas coisas …
A primeira ale[vou mudar] é de alessandra , ou seja não é ele é ela hahahahahah …

Eu consultei o google primeiro , só que é dificil procurar bo google um ponto de interrogação . hahhaha …

E a explicações de vc´s foram 10000000 …
não fiquei com nenhuma duvida por isso agradeço mais uma vez… :D

Oi. Mudar de nick não é um processo tão fácil. É preferível você adicionar uma assinatura no seu perfil.
Caso realmente sinta necessidade, mande diretamente um e-mail para [email removido]

Mas geralmente esse processo só é feito para quem tem um nick que ficou acidentalmente constrangedor, muito difícil de digitar, ou para pessoas que cadastram o e-mail como nick e só depois veem a besteira que fizeram.

fabiomazzo

Vixiw, que repercussão.

Só achei errado o Androide falar pra ela procurar no Google e resolvi intervir, se o ofendi, ao falar que estava tumultuando, me desculpe.
O intuito do fórum é ajudar todos, e mandar procurar no google não ajuda ninguém (Salvo casos que o usuário quer na verdade que a comunidade faça um trabalho da faculdade). Você mesmo androide, já perguntou coisas básicas, é só olhar o histórico. Imagine se a cada pergunta, viesse alguém e pedisse pra vc procurar no Google?

Abs

pedroroxd

ViniGodoy:

No caso de usar dois elses, você também terá duas condições.

int y = x == 0 ? 10 : (x == 20 ? 1 : 2);

Mas nesse caso, já prefiro não usar o ternário. A legibilidade fica seriamente comprometida.


Mas na hora de ler esse código eu converto na minha mente para os if…
Não consigo ler o código assima do geito que está, eu penso como ficaria com os if… De ser questão de custume, sei lá
Na hora de ler o código acima eu iria ler:

int y; if (x==0) y=10 if (x==20) y=1; else y=2;
Sempre axei que fosse syntax sugar, mas ficou claro que um é operador e outro comando… =P
Afinal, se ? é o if, e : é o else, o ?: é o if else? =P

Criado 19 de abril de 2010
Ultima resposta 19 de abr. de 2010
Respostas 25
Participantes 10