A palavra-chave CORRESPONDING
(ou sua forma abreviada CORR
) permite que comandos como ADD
, SUBTRACT
e MOVE
operem automaticamente sobre campos de mesmo nome entre dois grupos de dados. Isso reduz a repetição de código e facilita a manipulação de estruturas semelhantes.
📌 Para que serve
-
Realizar operações em grupo de forma automática, entre itens de dados que têm o mesmo nome.
-
Evita múltiplas instruções individuais para cada campo.
-
Pode ser usado com
ADD
,SUBTRACT
eMOVE
.
🧾 Sintaxe básica
ADD CORRESPONDING grupo-1 TO grupo-2.
SUBTRACT CORRESPONDING grupo-1 FROM grupo-2.
MOVE CORRESPONDING grupo-1 TO grupo-2.
grupo-1
é o grupo de origem egrupo-2
é o grupo de destino. Apenas campos elementares com mesmo nome serão processados.
✅ Regras de correspondência
Para que os campos correspondam, precisam seguir estas condições:
-
Estarem dentro de grupos (não são campos isolados).
-
Terem o mesmo nome e nível correspondente.
-
Não serem
FILLER
. -
Serem compatíveis com a operação (por exemplo, numéricos para
ADD
/SUBTRACT
). -
Não conterem
REDEFINES
,RENAMES
,OCCURS
, nemUSAGE POINTER
,FUNCTION-POINTER
,PROCEDURE-POINTER
ouOBJECT REFERENCE
.
✍️ Exemplo prático
01 GRUPO-ORIGEM.
05 VALOR1 PIC 9(5).
05 VALOR2 PIC 9(5).
05 TEXTO PIC X(10).
01 GRUPO-DESTINO.
05 VALOR1 PIC 9(5).
05 VALOR2 PIC 9(5).
05 TEXTO PIC X(10).
ADD CORRESPONDING GRUPO-ORIGEM TO GRUPO-DESTINO.
Neste exemplo, apenas VALOR1
e VALOR2
serão somados, pois TEXTO
não é numérico.
⚠️ Considerações
-
Campos com
REDEFINES
,INDEX
,COMP-1
,POINTER
, etc. são ignorados. -
CORRESPONDING
é útil para estruturas tabulares com mesmo layout. -
Pode reduzir código repetitivo, mas exige atenção aos nomes de campos.
-
Em caso de erro de tamanho (
ON SIZE ERROR
), o tratamento só ocorre após todas as operações individuais serem tentadas.
✅ Conclusão
A cláusula CORRESPONDING
é uma excelente forma de simplificar operações com estruturas semelhantes no COBOL. Quando usada corretamente, aumenta a produtividade, melhora a legibilidade do código e reduz o risco de erros ao evitar repetição desnecessária de instruções.