"
Apoiado por

Macros – Velocidade de ponta

Normalmente quando há um pedaço de código que pretendemos reutilizar várias vezes, transformamo-lo numa sub-rotina que pode depois ser invocada repetidamente. Embora a SAP não saiba estruturar o seu próprio código, ainda assim, o ABAP, coitadinho, permite-o. E até disponibiliza várias alternativas para modularizar o código. Eu conto quatro alternativas que listo aqui, da mais rígida para a mais flácida: METHOD, FUNCTION, FORM, DEFINE. Se os 3 primeiros são já familiar de todos, o último – DEFINE – quase ninguém usa. O DEFINE permite definir macros em ABAP. E o que são macros? São sub-rotinas aparentes.

Aparentes porquê?


Porque enquanto nos outros três casos há de facto uma estruturação da lógica de execução do programa, no caso dos macros, esta estruturação acontece apenas a fingir, porque durante a compilação, na verdade os macros são substituídos pelo código que representam.

Então um exemplo: vou definir um macro para fazer continhas.


DEFINE faz_continha.
  &1 = &1 + &2.
END-OF-DEFINITION.

DATA: var type i.
var = 0.
DO 100000 TIMES.
  faz_continha var 1.
ENDDO.

Aparentemente isto é semelhante à utilização de FORMs. A diferença é que, durante a compilação, os macros são directamente substituídos pelo código que representam. Por isso mesmo nem sequer há qualquer validação de tipos de dados.

Além de ser, portanto, uma forma meio manhosa de estruturar o código, ainda sofre do problema não permitir fazer debug.

Então afinal qual é a vantagem? Vamos ver. A alternativa normal seria:


DATA: var type i.
var = 0.
DO 1000000 TIMES.
  PERFORM faz_continha USING 1 CHANGING var.
ENDDO.

FORM faz_continha USING v2 CHANGING v1.
  v1 = v1 + v2.
ENDFORM.

Se usarmos a transacção SE30 para comparar o tempo que cada uma demora, temos uma surpresa:

DEFINE: 6.439ms
FORM: 773.882ms

Ou seja, a versão que usa macros é mais de 100x mais rápida do que a versão normal com sub-rotinas. Conclusão: a grande vantagem dos macros é velocidade.

O Abapinho saúda-vos.

6 comentários a “Macros – Velocidade de ponta”

  1. Renan Paulino Diz:

    Olá, boa tarde!
    Interessante a maneira que você usou para comprovar que de fato as macros possuem execução mais rápida..! Contudo… eu entendo que o fato de vc não poder debugar é um impeditivo grande ao seu uso. Na minha visão, utilizar macro é uma forma de dificultar (e muito!) o trabalho de manutenção no código.
    Mas de qualquer forma, muito legal a explicação que você usou!
    Até mais
    Renan

  2. nununo Diz:

    Olá, pois, concordo inteiramente, eu também acho muito mau isso de não poder debugar mas como é uma coisa que pouca gente conhece achei que seria interessante falar disto.
    Abraço

  3. Vagnão Diz:

    Opa… eu uso macros em muitos dos meus programas, mas sempre em rotinas simples, poucas linhas que se repetem várias vezes no código. E macro é justamente para isso: trechos simples. Não uso em código complexo.

    Abraço
    Vagnão

  4. Wiliam Diz:

    Há um motivo para o desuso de macros hoje em dia: reusabilidade.

    Nas últimas duas empresas em que prestei serviços era até proibido o uso de macros em novos programas Z. Até mesmo nas academias SAP não se ensina mais (na 6.4 era só mencionado).

    Concordo que devemos pensar na performance, mas repetir trechos de código não é a solução para isso. A ineficiência, em termos de velocidade, de muitos códigos OO no ABAP é um problema da linguagem e que deve ser solucionado pelos mantenedores da mesma (lembram do início do Java?). Não deve servir como desculpa para continuarmos desenvolvendo programas como a 10 anos atrás.

    Quanto ao problema de não poder depurar, há uma solução para isso. Não sei mais dizer qual é, mas a usei muito 8 anos atrás, quando tinha que depurar muitos programas “standard”. Na época recebi a dica numa lista de discussão (em inglês). Também não sei se funcionaria atualmente; até o R/3 4.6C funcionava.

    Abs
    Wiliam

  5. Amy Diz:

    Olá, pois, concordo inteiramente, eu também acho muito mau isso de não poder debugar mas como é uma coisa que pouca gente conhece achei que seria interessante falar disto.
    Abraço

  6. Nilson Diz:

    Adorei seu template.
    Pode me passar uma cópia ou me dizer como você montou.
    Trabalho com abap também.

    Nilson.

Deixe um comentário


Acerca do Abapinho
O Abapinho é suportado pelo WordPress
Artigos (RSS) e Comentários (RSS).