Nível 88 não define variáveis booleanas
A rigor, o nível 88 serve para definir “nomes de condição”, ou condition names. Por serem usadas no programa de maneira semelhante às variáveis booleanas de outras linguagens, muita gente confunde os dois conceitos.
Variáveis booleanas podem assumir dois valores – verdadeiro ou falso – e são usadas em comandos condicionais. Elas existem em muitas linguagens de programação, mas não no COBOL.
Para entender a diferença, vamos começar observando como as variáveis booleanas funcionam. O código abaixo mostra como uma variável desse tipo pode ser usada no Java:
import java.io.*;
public class Nivel88 {
public static void main(String[] args) throws Exception {
boolean flag = true;
if (flag) {
System.out.println("Flag=True");
} else {
System.out.println("Flag=False");
}
System.exit(0);
}
}
Repare que a variável booleana flag é usada aqui para simplificar o comando if, pois não foi necessário escrever “if (flag == true) {“.
Já o nível 88 do COBOL oferece mais opções. Ele dá nome a determinadas condições mas não apenas para verificar se o valor de uma variável é true ou false.
Observe o exemplo abaixo. Definimos uma variável chamada estado-civil, e embaixo dela, quatro nomes condicionais: solteiro, casado, divorciado e viúvo. Condition names sempre são definidos abaixo de um item elementar.
03 estado-civil pic x(001) value spaces. 88 solteiro value "S". 88 casado value "C". 88 divorciado value "D". 88 viuvo value "V".
Agora, ao invés de comparar a variável estado-civil com um dos valores do seu domínio, podemos codificar o programa fazendo referência direta ao nome da condição.
Ou seja, ao invés de escrever…
if estado-civil = "C" perform solicita-certidao-casamento else if estado-civil = "D" perform solicita-averbacao-divorcio else if estado-civil = "V" perform solicita-atestado-obito end-if end-if end-if
…podemos escrever…
if casado perform solicita-certidao-casamento else if divorciado perform solicita-averbacao-divorcio else if viuvo perform solicita-atestado-obito end-if end-if end-if
Diferentemente do que fizemos no Java, aqui não estamos verificando se o valor da variável estado-civil é verdadeiro ou falso. Nós demos nomes às condições para simplificar a codificação do programa e aumentar a clareza do código.
Condition names podem ser definidos também com uma lista ou um range de valores, o que na prática dá nomes a condições compostas. No exemplo abaixo, demos nomes a diversas condições envolvendo a variável wt-cd-rubrica:
01 wt-cd-rubrica pic x(003). 88 rendimentos-tributaveis value "005" "019" "021" "022" "023" "024" "051" "053" "055" "056" "061" "062" "063" "064" "077" "078" "079" "709" "710" "711" "712" "713" "718" "719". 88 rendimento-bruto value "005" "019" "021" "022" "023" "024" "051" "053" "055" "056" "061" "062" "063" "064" "077" "078". 88 assistencia-medica value "095" "097" "098" "470" "510" "512" "516" "534" "738" "114" "722" "050" "085" "092" "462" "463". 88 abono-anual value "052" "730" "754" "912" "923" "928" "939" "940". 88 pensao-alimenticia value "483" "484" "485" "486" "535" "538" "549" "634" "911" "420" "421" "423" "400" thru "417". 88 abono-pensao-alimenticia value "418" "430" "431" "438" "460" "461" "468" "469" "478" "479" "480" "481" "482" "931" "961" "487" "424" "459".
Com isso, podemos simplificar bastante a codificação do programa substituindo um longo if ou evaluate por um único nome autoexplicativo:
Ao invés de…
if wt-cd-rubrica = "052" or "730" or "754" or "912"or "923" or "928" or "939" or "940" perform calcula-abono-anual end-if
…escrevemos simplesmente…
if abono-anual
perform calcula-abono-anual
end-if
Repare ainda na declaração da variável que além de listar os valores de cada condição, podemos também definir um range de valores, como em “400” thru “417”.