O ideal, e recomendado quando voce aprende lógica de programação é tratar
expressões de avaliação por parenteses conforme o critério de prioridade.
Você pode ajustar o o compilador pra fazer a avaliação baseada na primeira
condiçional "Complete boolean eval", esta condicional faz seu sistema ficar
um pouco mais lento pois ele irá avaliar a expressão toda. Se ela for
desabilitada, uma expressão "And" ele avaliaria apenas pela primeira
condicional. Se ela for falsa, já rejeita (visto que o "E" requer todas
verdadeiras) da mesma forma com o "or", se a primeira for verdadeira, já
passa (visto que o "OU" rejeita no caso de todas falsas)

Os parenteses determinam a prioridade da avaliação dos valores. Veja a
seguinte situação:

A + B + C

e

A + (B + C)


No primeiro caso, ele irá somar tudo sequencialmente e no segundo caso, ele
irá somar primeiramente B + C e o resultado somar a A.

Veja outro caso:

A + B * C

e

(A + B) * C

No primeiro caso, a prioridade é sempre da multiplicação, então ele irá
multiplicar B por C pra depois somar com A, mas no segundo caso você muda a
ordem das prioridades e ele irá somar A + B primeiro pra depois multiplicar
por C.

A mesma coisa se aplica pra expressões lógicas. O parentese determina a
ordem de prioridades.

Eu, opinião pessoal minha, trabalharia com:

if (not Prepared) or (not SQLIsValid)

Muito mais robusto e com menos chances de gerar bugs.



[]s

Walter Alves Chagas Junior
Projeto e desenvolvimento de sistemas
Telemont Engenharia de telecomunicações S/A
Belo Horizonte - MG - Brasil
[EMAIL PROTECTED]
Fone: (31) 3389-8215 Fax: (31) 3389-8200


-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED]
nome de Andrei Luís
Enviada em: sexta-feira, 12 de maio de 2006 08:30
Para: Delphi-br
Assunto: [delphi-br] Como o compilador interpreta essa linha?


Bom dia a todos,

Surgiu uma dúvida na lista do IBO e gostaria de postá-la aqui para ver a
opinião dos colegas, seria interessante também se o Andreano ou o Daniel
Polistchuck pudessem dar sua contribuição para o assunto.

A questão é a seguinte:

Como o compilador interpreta a seguinte linha:

if not Prepared or not SQLIsValid then

Assim:

if not (Prepared or not SQLIsValid) then

Ou assim?

if (not Prepared) or (not SQLIsValid) then
O comportamento que se deseja é o último, mas o código está de fato sem
nenhum parenteses, e o comportamento tem sido estranho. Poderia essa linha
ser interpretada de uma forma ou de outra de acordo com a versão do Delphi?

Existe alguma diretiva de compilação que possa afetar a forma de
interpretação dessa linha?

--
[]s
Andrei


[As partes desta mensagem que não continham texto foram removidas]



--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>



Links do Yahoo! Grupos









[As partes desta mensagem que não continham texto foram removidas]



--
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]



Yahoo! Grupos, um serviço oferecido por:
PUBLICIDADE


Links do Yahoo! Grupos

Responder a