quinta-feira, outubro 15, 2015

INIT versus REDEFINE

INIT nos permite eliminar declarações da seção de "inicialização" dos nossos programas, isto é, as declarações imediatamente antes da linha principal. (ver exemplo de código associado, "Considerando INIT (e formatos de dados)") Pena que não podemos usar INIT para redefinições.

Programa 1

Muitas vezes, nós definimos uma grande variável alfa, em seguida, redefini-la para especificar seus componentes (estrutura). A palavra-chave INIT não é permitido nas redefinições, por isso, codificar declarações ASSIGN explícitas. No nosso exemplo, nós usamos a redefinição do valor inicial de um superdescriptor do arquivo de funcionários.
 >                                       > +  Program     AAFPCS01 Lib NAT2CUR
 All    ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
   0010 DEFINE DATA LOCAL
   0020 1 EMP    VIEW EMPLOYEES
   0030   2 DEPT
   0040   2 NAME
   0050 1 #DEPT-PERSON (A26)    1 REDEFINE #DEPT-PERSON
   0060   2 #DEPT (A6)          /* INIT <"ADMA01">
   0070   2 #PERSON (A20)       /* INIT <"MADSen">
   0080 END-DEFINE
   0090 ASSIGN #DEPT   = "ADMA01"
   0100 ASSIGN #PERSON = "MADSEN"
   0110 FIND EMP WITH DEPT-PERSON = #DEPT-PERSON
   0120   DISPLAY DEPT
   0130           NAME
   0140 END
   0150
   0160
   0170
   0180
   0190
   0200
        ....+....1....+....2....+....3....+....4....+....5....+... S 14   L 1
Resultado do Programa
 MORE
 PAG      1                                                   14/10/15  12:37:19

 DEPARTMENT         NAME
    CODE
 ---------- --------------------

 ADMA01     MADSEN
Program 2

Para as pequenas estruturas, como no nosso exemplo, temos a opção de inicializar o "grande alpha", mas para estruturas complexas isso seria complicado e difícil de ler e manter.
 >                                       > +  Program     AAFPCS01 Lib NAT2CUR
 All    ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
   0010 DEFINE DATA LOCAL
   0020 1 EMP    VIEW EMPLOYEES
   0030   2 DEPT
   0040   2 NAME
   0050 1 #DEPT-PERSON (A26)    INIT <"ADMA01MADSEN">
   0060 END-DEFINE
   0070 FIND EMP WITH DEPT-PERSON = #DEPT-PERSON
   0080   DISPLAY DEPT
   0090           NAME
   0100 END
   0110
   0120
   0130
   0140
   0150
   0160
   0170
   0180
   0190
   0200
        ....+....1....+....2....+....3....+....4....+....5....+... S 10   L 1
Resultado do Programa
 MORE
 PAG      1                                                   14/10/15  12:37:56

 DEPARTMENT         NAME
    CODE
 ---------- --------------------

 ADMA01     MADSEN
Programa 3

Uma solução simples é virar as redefinições. Começamos com uma estrutura e redefinindo-a para ser o "large alpha."
 >                                       > +  Program     AAFPCS01 Lib NAT2CUR
 All    ....+....1....+....2....+....3....+....4....+....5....+....6....+....7..
   0010 DEFINE DATA LOCAL
   0020 1 EMP    VIEW EMPLOYEES
   0030   2 DEPT
   0040   2 NAME
   0050 1 #DP-DEF                                   /* Define a structure
   0060   2 #DEPT (A6)     INIT <"ADMA01">
   0070   2 #PERSON (A20)  INIT <"MADSEN">
   0080                         1 REDEFINE #DP-DEF  /* Define the block
   0090   2 #DEPT-PERSON (A26)
   0100 END-DEFINE
   0110 FIND EMP WITH DEPT-PERSON = #DEPT-PERSON
   0120   DISPLAY DEPT
   0130           NAME
   0140 END
   0150
   0160
   0170
   0180
   0190
   0200
        ....+....1....+....2....+....3....+....4....+....5....+... S 14   L 1
Resultado do Programa
 MORE
 PAG      1                                                   14/10/15  12:38:30

 DEPARTMENT         NAME
    CODE
 ---------- --------------------

 ADMA01     MADSEN
Original - Clique Aqui

0 comentários:

Enviar um comentário