Reconstantes

images/thumbnail.jpg - Thumbnail

O meu projecto tem constantes espalhadas por todo o lado, com nomes confusos ou errados. Uma salgalhada. Encontrei uma forma de reorganizar e rearrumar as constantes para que o código novo possa usar constantes bonitas sem espatifar o código antigo que pode continuar a usar as confusas.

Há centenas de constantes em vários includes, classes e interfaces. E todas elas são utilizadas em dezenas e mesmo centenas de sítios.

Já por várias vezes, ao escrever código novo, considerei começar a arrumá-las, mas sempre abandonei a ideia porque isso obrigaria a mexer em código antigo que continua a usá-las. Também considerei criar cópias das antigas já no sítio certo e com um nome decente, mas também abandonei essa ideia porque ficariam duplicadas, o que seria perigoso e trapalhão.

Hoje, assim de repente sem mais nem menos, lembrei-me de uma forma de conseguir o melhor dos dois mundos: ter novas arrumadas sem mexer nem duplicar as antigas. Imagina que tens estas constantes antigas:

(class ZCL_OLD)

CONSTANTS c_status_001 TYPE i VALUE '001'. " Start
CONSTANTS c_Status_002 TYPE i VALUE '002'. " End

Podes fazer isto:

(class ZIF_NEW)

CONSTANTS:
  BEGIN OF c_status,
    start TYPE i VALUE zcl_old=>c_status_001,
    end   TYPE i VALUE zcl_old=>c_status_002,
  END OF c_status.

Topas?

Crias novas constantes, com o nome certinho, no sítio certo, e no VALUE fazes referência à antiga.

No dia em que o código antigo deixar de usar a antiga podes facilmente apagá-la e a nova constante passa a definir o valor em vez de apontar para a antiga. Até lá vives com as duas: o código novo usa a nova, o código velho continua a usar a antiga, mas estão explicitamente ligadas uma à outra.

O Abapinho saúda-vos.