short-circuiting e &&  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Galera, surgiu uma dúvida meio besta aqui. Eu tenho o seguinte codigo:



O problema é que se a() for false, b() e c() não vão ser executados, e isso traz alguns problemas pra mim - eu vou precisar dos efeitos colaterais deles dentro do bloco else. Qual seria o melhor jeito de fazer isso de forma que a(), b() e c() fossem executados?

Às vezes a gente sente falta de uma linguagem que faça o que a gente quer dizer, não o que a gente diz
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
ricardolecheta
GUJ Master
[Avatar]

Membro desde: 17/05/2003 13:42:10
Mensagens: 1486
Localização: Curitiba
Offline

não daria de colocar o resultado dos metodos em variáveis?

boolean a = a();
boolean b = b();
...


if(a && b && c) {
...

assim os métodos seriam executados...

Ricardo R. Lecheta
Livro - Google Android (português)
http://www.livroandroid.com.br/
http://livroandroid.blogspot.com/
http://www.livetouch.com.br/
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

da para tirar os short circuit (substituir && por & )

mas o esquema complica no else, que em qualquer um dos casos, vai executar se a, e/ou b, e/ou c forem false, e não apenas se os 3 forem false.

para isto teria que armazenar os valores de retorno de a, b e c (para que eles não fossem executados novamente)
e transformar o else em else if (!(va && vb && vc)){}

ai, aqui o short circuit não tem mais problema

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
maxguzenski
Virtual Machine Man
[Avatar]

Membro desde: 07/03/2003 11:47:42
Mensagens: 549
Localização: Porto Alegre
Offline

if(a() & b() & c())


dessa forma todos sao executados, e so entra no "if" se todos forem verdadeiros

Maximiliano Ferreira Guzenski
Sun Certified Java Programmer 1.4
Sun Certified Web Component Developer 1.4
http://www.guzenski.com.br
[Email] [WWW] [MSN]
cv
Moderador
[Avatar]

Membro desde: 04/04/2003 00:32:12
Mensagens: 7842
Localização: São Paulo, SP
Offline

Valeu gente, era isso mesmo

Acabei usando a solução do urubatan, no fim das contas eu nao precisava entrar no else APENAS se a, b e c fossem false
[Email] [WWW] [Yahoo!] [MSN] [ICQ]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

usa a operacao de identidade do E com o OU que funciona:



quem disse que faculdade é completamente inutil...

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

segundo grau de eletrônica também tem isto ai
mas não entendi o que tu quis dizer, o que tu colocou ali seria uma simples substituição, não elimina o short circuit

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
louds
Moderador
[Avatar]

Membro desde: 29/04/2003 23:09:15
Mensagens: 4061
Localização: São Paulo
Offline

tem razao
viajei total
vai causar exatamente o mesmo problema

http://www.kumpera.net/blog/
http://www.mono-project.com/
"Each individual should work for himself. People will not sacrifice themselves for the company. They come to work at the company to enjoy themselves."
Soichiro Honda
[ICQ]
Guilherme
Thread.start()

Membro desde: 28/05/2003 23:22:35
Mensagens: 31
Offline

Isto se chama satisfatibilidade

Seja H uma fórmula ;
H = (A ^ B ^ C ^ D)

é satifatível, se e somente se

I[A] = I[B] = I[C] = I[D] = T;

mas se..

I[A] = I[B] = T
I[C] = I[D] = F

A fórmula H é insatistatível
urubatan
Moderador
[Avatar]

Membro desde: 21/09/2002 10:31:26
Mensagens: 2481
Localização: Porto Alegre/RS
Offline

agora fui eu quem viajou,
não entendi do que tu ta falando

entendi a formula que tu colocou e tudo,
mas isto tem a ver com o que mesmo??
se não me engano tu só explicou matematicamente como descobrir se uma "formula" é verdadeira ou falsa

[]'s
Rodrigo Urubatan
http://www.urubatan.com.br
Melhor livro de RoR do brasil: http://livro.urubatan.com.br
[WWW]
Guilherme
Thread.start()

Membro desde: 28/05/2003 23:22:35
Mensagens: 31
Offline

é, eu só expliquei matematicamente, só que usando síbolos da lógica proposicional.
Eu só bati o olho na pergunta e tive uma sacada, que só seria executado algo se fosse satisfatível.. hehehe..
agora eu usaria o loop switch

(também num to entendendo nada hehehe)
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team