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:
- O último assunto declarado é o assunto ausente.
- 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:
- Parênteses podem ser usados ??para alterar a ordem de avaliação dos operadores lógicos AND e OR.
- A palavra NÃO participa como parte do operador relacional quando é imediatamente seguida por GREATER THAN, > , LESS THAN, < , EQUAL TO ou =.
- 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.
- O operador NOT lógico pode aparecer em uma expressão entre parênteses que segue imediatamente um operador relacional.
- 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:
- Uma condição simples não pode aparecer no escopo da distribuição.
- Outro operador relacional não pode aparecer no escopo da distribuição.
- O operador lógico NOT pode aparecer imediatamente após o parêntese esquerdo, o que define o escopo da distribuição.
- A avaliação prossegue da condição menos para a mais abrangente.
- 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.
- O último assunto declarado é inserido no lugar do assunto ausente.
- O último operador relacional declarado é inserido no lugar do operador relacional ausente.
- A inserção do sujeito omitido ou do operador relacional termina quando:
- Outra condição simples é encontrada.
- Um nome da condição é encontrado.
- Um parêntese direito é encontrado e corresponde a um parêntese esquerdo que aparece à esquerda do sujeito.
- 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.
- 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.
|