A instrução COMPUTE
permite realizar expressões aritméticas e atribuir diretamente o resultado a um campo ou variável. É uma alternativa mais flexível ao ADD
, SUBTRACT
, MULTIPLY
e DIVIDE
, pois permite combinar múltiplas operações numa única linha.
📌 Para que serve
-
Executar cálculos matemáticos complexos.
-
Atribuir o resultado direto da expressão a uma variável.
-
Substitui instruções aritméticas simples com uma forma mais concisa e legível.
🧾 Sintaxe básica
COMPUTE destino = expressão-aritmética
[ROUNDED]
[ON SIZE ERROR instruções]
[NOT ON SIZE ERROR instruções]
END-COMPUTE.
A cláusula
END-COMPUTE
é opcional, mas recomendada em códigos modernos, especialmente quando usado dentro de blocos condicionais.
✍️ Exemplos simples
COMPUTE TOTAL = VALOR1 + VALOR2 - DESCONTO.
COMPUTE MEDIA = (NOTA1 + NOTA2 + NOTA3) / 3.
COMPUTE RESULTADO = (A + B) * C.
🧮 Com cláusula GIVING (alternativa ao MOVE com cálculo)
COMPUTE WS-RESULTADO = (VALOR1 + VALOR2) * 0.1
ON SIZE ERROR
DISPLAY 'Erro: resultado excedeu tamanho do campo'.
🔄 Utilização com tabelas (arrays)
COMPUTE SOMA-TABELA = VALORES(1) + VALORES(2) + VALORES(3).
COMPUTE RESULTADO = ITENS(INDICE) * QUANTIDADE(INDICE).
🎯 Cláusulas importantes
🔹 ROUNDED
Arredonda o resultado quando há casas decimais que ultrapassam a precisão do campo.
COMPUTE RESULTADO ROUNDED = VALOR1 / VALOR2.
🔹 ON SIZE ERROR
Define ações a serem tomadas caso o resultado não caiba no campo de destino.
COMPUTE TOTAL = A + B
ON SIZE ERROR
DISPLAY "ERRO DE TAMANHO".
⚠️ Regras e boas práticas
-
O resultado será truncado se o campo de destino não tiver espaço suficiente e a cláusula
ROUNDED
não for usada. -
A ordem das operações segue a precedência matemática tradicional.
-
Ideal para evitar múltiplos
ADD
,SUBTRACT
ouMOVE
seguidos. -
Permite usar tabelas, literais, variáveis e expressões combinadas.
-
O destino pode ser um campo numérico, indexado ou até um elemento de grupo (com cuidados).
✅ Conclusão
A instrução COMPUTE
é poderosa e flexível, permitindo realizar cálculos complexos de forma direta e clara no COBOL. Seu uso contribui para melhor legibilidade, manutenção do código e economia de instruções. Utilize ROUNDED
e ON SIZE ERROR
sempre que trabalhar com valores sensíveis a arredondamentos ou limites de tamanho, garantindo maior controle e segurança no processamento aritmético.