Executando verificação de segurança...
2

[SAP] Como declarar variáveis no ABAP

Fala galera! Olha eu aqui de novo...

Como alguns de vocês já devem saber, tenho publicado alguns conteúdos aqui sobre a linguagem de programação ABAP. Caso queira ler as publicações anteriores, dá uma olhada no agrupador que eu criei clicando aqui.

Hoje iremos falar sobre declaração de variáveis no ABAP. Sei que parece ser algo "simples", mas se nos aprofundarmos, tem bastante assunto. Então simbora!


O ABAP trabalha com variáveis tipadas?

Antes de responder esta pergunta, vamos responder uma outra: o que são variáveis tipadas?

Se você pesquisar por "variável tipada" no Google, com certeza vai encontrar explicações melhores do que a minha, mas vou tentar ser didático aqui. E também não vou me estender explicando o que é uma variável, pois estou assumindo que o público aqui do TabNews já tem esse conhecimento (mas caso você não tenha, sinta-se à vontade para questionar nos comentários).

Uma variável tipada é quando dizemos para o compilador/interpretador qual é o tipo da variável que vamos trabalhar. Por exemplo, vamos supor que eu quero trabalhar com uma variável que irá somar a quantidade de laranjas que o Joãozinho irá consumir (adoro esses exemplos acadêmicos que não fazem o menor sentido no nosso dia a dia como programadores). Sabemos que a quantidade de laranjas se trata de um número inteiro (ok, poderia ser decimal, mas para o bem do aprendizado aceite que trabalharemos somente com laranjas inteiras, ta?), então em uma linguagem de programação que trabalha com variáveis tipadas, precisamos informar que a variável responsável por armazenar esta informação será do tipo "inteiro".

Já em linguagens de programação que não necessariamente trabalham com variáveis tipadas (podem trabalhar, mas não é obrigatório), como o Javascript, por exemplo, você não precisa informar o tipo, pode simplesmente informar que tem uma variável que irá contar as laranjas e o compilador/interpretador que se vire para entender qual é o tipo daquela variável (que inclusive pode ser alterado durante o tempo de execução).

Mas então o ABAP trabalha com variáveis tipadas?

Nim! (essa é definitivamente a minha palavra não existente favorita, que é a soma de "não" e "sim").

Majoritariamente sim, o ABAP trabalha com variáveis tipadas. Porém, conseguimos trabalhar com variáveis que chamamos de TYPE any, ou seja, aceita qualquer coisa, e também com o TYPE REF TO data, que seria algo como o tipo mais primitivo do ABAP, o tipo mais genérico.

Mas se eu tivesse que responder somente com "sim" ou "não", a resposta seria sim! O ABAP é uma linguagem de programação que trabalha com variáveis tipadas, pois mesmo utilizando uma variável TYPE any, em algum momento eu vou ter que dizer para o interpretador qual é o tipo daquela variável (sim, o ABAP é interpretado, não compilado).


Como podemos então declarar as variáveis no ABAP?

Para declarar uma variável no ABAP é muito simples, basta utilizar o comando: DATA, seguido do comando TYPE. Como assim?

Voltando ao exemplo das laranjas do Joãozinho, e assumindo que para o ABAP o tipo "inteiro" é i, ficaria assim:

DATA laranjas TYPE i.

Vamos supor que agora eu precisasse delcarar, além das laranjas, uma variável que irá armazenar o nome do nosso personagem com o tipo string. Ficaria assim:

DATA laranjas TYPE i.
DATA nome TYPE string.

Ou então, eu posso ao invéis de usar duas vezes o data, com o ponto final, podemos substituir para:

DATA: laranjas TYPE i,
      nome     TYPE string.

(Na minha opinião a segunda opção fica mais agradável aos olhos)

Quando falei sobre as "variáveis não tipadas" do ABAP, a declaração da TYPE REF TO data ficaria assim:

DATA variavel_generica TYPE REF TO data.

Já a TYPE any é um pouco mais complexa. Para declararmos, precisamos entender o que sãoFIELD-SYMBOLS.

Não vou me estender com osFIELD-SYMBOLS nesta publicação (falaremos sobre no futuro), mas de forma muito muito muito básica, são ponteiros. E a declaração fica assim:

  FIELD-SYMBOLS <variavel_generica> TYPE any.

Para trabalhar com essas "variáveis não tipadas" é um pouco mais complexo, então por enquanto, nesta publicação, irei focar somente nas variáveis tipadas, ok?

Voltando para o Joãozinho, eu poderia ter uma constante do tipo string com o dado "Joãozinho", certo?

Certo! Fica assim:

CONSTANTS nome TYPE string VALUE 'Joãozinho'.

E eu posso utilizar o VALUE em uma variável, já inicializando ela com um valor, mas podendo alterar depois?

Mas é claro que sim, olha só:

DATA nome TYPE string VALUE 'Joãozinho'.

E na nova sintaxe do ABAP, como ficam as declarações?

Sim, o ABAP é uma linguagem de programação que está constantemente sendo atualizada. Atualmente separamos o ABAP em duas partes, quais alguns chamam de "ABAP clássico" e "nova sintaxe".

Eu vou me aprofundar neste tema no futuro, mas basicamente em versões mais atuais do ECC ou no S/4HANA, todos os códigos do "ABAP clássico" são possíveis de serem executados. Porém, em versões mais antigas do ECC a "nova sintaxe" não é suportada.

Ou seja, você pode continuar declarando as variáveis como sempre declarou no "ABAP clássico", se preferir. Mas garanto que a "nova sintaxe" deixou as coisas mais interessantes.

Por exemplo, agora (já faz um tempo) podemos declarar a variável direto nas instruções, já recebendo o valor, por exemplo:

DATA(nome) = 'Joãozinho'.

O interpretador irá automaticamente entender que esta variável não é do tipoi, mas sim do tipo string (na verdade irá entender que é uma variável do tipo char com 9 posições, mas ignore por enquanto.

Você pode até não entender com este exemplo a vantagem de utilizar a "nova sintaxe", mas isso pode ser muito útil em retorno de métodos, por exemplo:

DATA(nome) = get_name( ).

Se o método get_name tiver como retorno um parâmetro do tipo string, o interpretador vai entender que a variável nome deve ser tipada como string. No "ABAP clássico" teria que ser:

DATA nome TYPE string.

nome = get_name( ).

Viu a vantagem?


É só isso?

Como tudo no mundo da programação, nunca é só isso. As declarações no ABAP vão MUITO ALÉM do que eu expus aqui, principalmente na "nova sintaxe". Então segue acompanhando as minhas publicações que ainda vamos nos aprofundar muito nessa linguagem.

Abraço!

Carregando publicação patrocinada...
2

Eu vi desvanategm no segundo uso. O primeiro é bacana, o segundo torna o código menos legível, voê não tem mais nenhuma informação que bata o olho e saiba com o que está lidando, tem que olhar a documentação. É improdutivo e pode levar a erros.


Farei algo que muitos pedem para aprender a programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

1

kkkkkk é a velha discussão do tipado X não tipado. No ABAP sempre será tipado, mas concordo que só de ler o código, você precisará acessar o objeto que está sendo passado para saber qual é o tipo. Faz sentido!

2

Show, parabéns..

Basicamente então toda variavel preciso declarar com DATA, (ao menos que seja uma CONSTANTS e FIELD-SYMBOLS), seguido no seu (nome), e recebendo "=" um valor.
A nova sintaxe ja sabe de qual o tipo dessa variavel. Porem codigos mais antigos podemos encontrar o TYPE forçando esse tipo;

Sigo acompanhando ;)

1