Os blocos de código devem ser curtos
Infelizmente isto não acontece no código Z dos clientes onde tenho trabalhado. Tanto os IFs como os LOOPs tendem a ser tão grandes que ninguém percebe nada do que lá está. Ainda no outro dia vi um LOOP
com mais de 1500 linhas.
A única vantagem que há em ter blocos de código gigantes é magoar o próximo. E isso só é uma vantagem quando o próximo merece ser magoado.
Porquê que os programadores ABAP se andam todos a magoar uns aos outros?
Falha rápido
Muitas vezes, a forma mais simples de evitar ter blocos grandes é falhar rápido ou, como se diz em inglês, fail fast.
Em vez de fazer isto:
IF c1.
" 5000
" linhas
" de
" código
ENDIF.
é preferível fazer isto:
IF NOT c1.
RETURN.
ENDIF.
" 5000
" linhas
" de
" código
Magoa menos.
Código pouco profundo
Outra vantagem de falhar rápido é, como o Clean ABAP aconselha, manter o código pouco profundo.
Em vez de fazer isto:
IF c1.
IF c2.
IF c3.
" Mais
" montes
" de
" linhas
" de
" código
ENDIF.
ENDIF.
ENDIF.
é melhor fazer isto:
IF NOT c1.
RETURN.
ENDIF.
IF NOT c2.
RETURN.
ENDIF.
IF NOT c3.
RETURN.
ENDIF.
" Mais
" montes
" de
" linhas
" de
" código
Tão mais simples de entender, não é?
E no entanto vejo tanta vez código com mais de 10 níveis de profundidade. Para quê magoar os outros?
Modulariza
Mas a melhor estratégia de todas para manter os blocos de código curtos é modularizar.
Em vez de fazer isto:
IF c1.
" 5000
" linhas
" de
" código
ELSE.
" mais
" 5000
" linhas
" de
" código
" às
" vezes
" até
" muito
" parecidas
" com
" as
" outras
" 5000
ENDIF.
é preferível fazer isto:
IF c1.
faz_isto( ).
ELSE.
faz_aquilo( ).
ENDIF.
Ou, se os métodos forem funções que retornam um valor:
DATA(result) = COND #( WHEN c1 THEN da_isto( ) ELSE da_aquilo( ) ).
E mandas os milhares de linhas para dentro das rotinas. Se nessas rotinas fizeres a mesma coisa acabas com muitas rotinas pequenas que vão magoar muito menos que poucas rotinas grandes.
Vamos lá parar de nos magoar uns aos outros.
O Abapinho saúda-vos.