COBOL - Conditional expressions - Abbreviated combined relation conditions



Desenvolvido por DORNELLES Carlos Alberto - Analista de Sistemas - Brasília DF. - cad_cobol@hotmail.com

COBOL - Conditional expressions - Abbreviated combined relation conditions
Enterprise COBOL for z/OS, V4.2, Language Reference

Quando as condições de relação são gravadas consecutivamente, qualquer condição de relação após a primeira pode ser abreviada de uma de duas maneiras:

  • Omissão do sujeito
  • Omissão do sujeito e operador relacional

Em qualquer sequência consecutiva de condições de relação, ambas as formas de abreviação podem ser especificadas.
A condição abreviada é avaliada como se:

  1. O último assunto declarado é o assunto ausente.
  2. O último operador relacional declarado é o operador relacional ausente.

A condição combinada resultante deve obedecer às regras para seqüências de elementos em condições combinadas, conforme mostrado em Condições combinadas.

Se NOT for seguido imediatamente por GREATER THAN, > , LESS THAN, < , EQUAL TO ou =, então o NOT participará como parte do operador relacional.
NOT em qualquer outra posição é considerado um operador lógico (e, portanto, resulta em uma condição de relação negada).

Usando parênteses

Você pode usar parênteses em condições de relação combinadas para especificar uma ordem de avaliação pretendida.
O uso de parênteses também pode ajudar a melhorar a legibilidade das expressões condicionais.

As regras a seguir regem o uso de parênteses em condições de relação combinada abreviadas:

  1. Parênteses podem ser usados ??para alterar a ordem de avaliação dos operadores lógicos AND e OR.
  2. A palavra NÃO participa como parte do operador relacional quando é imediatamente seguida por GREATER THAN, > , LESS THAN, < , EQUAL TO ou =.
  3. NOT em qualquer outra posição é considerado um operador lógico e, portanto, resulta em uma condição de relação negada.
    Se você usar NOT como um operador lógico, apenas a condição de relação imediatamente após o NOT será negada; a negação não é propagada pela condição de relação combinada abreviada junto com o sujeito e o operador relacional.
  4. O operador NOT lógico pode aparecer em uma expressão entre parênteses que segue imediatamente um operador relacional.
  5. Quando um parêntese esquerdo aparece imediatamente após o operador relacional, o operador relacional é distribuído para todos os objetos entre parênteses.
    No caso de um operador relacional "distribuído", o sujeito e o operador relacional permanecem atualizados após o parêntese direito que termina a distribuição.
    As três restrições a seguir se aplicam aos casos em que o operador relacional é distribuído por toda a expressão:
    1. Uma condição simples não pode aparecer no escopo da distribuição.
    2. Outro operador relacional não pode aparecer no escopo da distribuição.
    3. O operador lógico NOT pode aparecer imediatamente após o parêntese esquerdo, o que define o escopo da distribuição.
  6. A avaliação prossegue da condição menos para a mais abrangente.
  7. Deve haver uma correspondência individual entre parênteses esquerdo e direito, com cada parêntese esquerdo à esquerda do parêntese direito correspondente.
    Se os parênteses estiverem desequilibrados, o compilador inserirá um parêntese e emitirá uma mensagem de nível E.
    No entanto, se o parêntese inserido pelo compilador resultar no truncamento da expressão, você receberá uma mensagem de diagnóstico em nível S.
  8. O último assunto declarado é inserido no lugar do assunto ausente.
  9. O último operador relacional declarado é inserido no lugar do operador relacional ausente.
  10. A inserção do sujeito omitido ou do operador relacional termina quando:
    1. Outra condição simples é encontrada.
    2. Um nome da condição é encontrado.
    3. Um parêntese direito é encontrado e corresponde a um parêntese esquerdo que aparece à esquerda do sujeito.
  11. Em qualquer sequência consecutiva de condições de relação, você pode usar as condições de relação abreviadas que contêm parênteses e aquelas que não.
  12. Operadores NOT lógicos consecutivos se cancelam e resultam em uma mensagem de nível S.
    Observe, no entanto, que uma condição de relação combinada abreviada pode conter dois operadores NOT consecutivos quando o segundo NOT faz parte de um operador relacional.
    Por exemplo, você pode abreviar a primeira condição como a segunda condição listada abaixo.
       A = B and not A not = C
       A = B and not not = C

A tabela a seguir resume as regras para formar uma condição de relação combinada abreviada.

Tabela 1. Condições combinadas abreviadas: sequências de elementos permitidas

Elemento de condição combinado Mais à esquerda Quando não estiver mais à esquerda, pode ser imediatamente precedido por: Mais à direita Quando não estiver mais à direita, pode ser imediatamente seguido por:
Subject Yes

NOT
(

No Relational operator
Object No

Relational operator
AND
OR
NOT
(

Yes

AND
OR
)

Relational operator No

Subject
AND
OR
NOT

No

Object
(

AND
OR

No

Object
)

No

Object
Relational operator
NOT
(

NOT Yes

AND
OR
(

No

Subject
Object
Relational operator
(

( Yes

Relational operator
AND
OR
NOT
(

No

Subject
Object
NOT
(

) No

Object
)

Yes

AND
OR
)

A tabela a seguir mostra exemplos de condições de relação combinadas abreviadas, com e sem parênteses, e seus equivalentes não abreviados.

Tabela 2. Condições combinadas abreviadas: equivalentes não abreviados

Condição de relação combinada abreviada Equivalente
A = B AND NOT < C OR D ((A = B) AND (A NOT < C)) OR (A NOT < D)
A NOT > B OR C (A NOT > B) OR (A NOT > C)
NOT A = B OR C (NOT (A = B)) OR (A = C)
NOT (A = B OR < C) NOT ((A = B) OR (A < C))
NOT (A NOT = B AND C AND NOT D) NOT ((((A NOT = B) AND (A NOT = C)) AND (NOT (A NOT = D))))


© Copyright IBM Corp.