O documento discute programação funcional em ABAP, incluindo o que é programação funcional, como se compara a outros paradigmas e como é implementada em ABAP. Exemplos como fatorial, FizzBuzz, sequência de Fibonacci e fórmula de Haversine são demonstrados.
2. O queireifalar poraqui:
O queéprogramaçãofuncional;
Programação funcionalX Outrosparadigmas;
Programação funcionalnomundoABAP,oque
mudanasnossasvidas;
Algunscasosaplicados.
3. O queé programação funcional:
É um dos paradigmas mais antigos já criados, teve inicio com o cálculo lambda (λ),
um sistema formal criado na década de 1930, com pouca aceitação no passado, mas
que ultimamente vem crescendo e aparecendo nas mais diversas linguagens,
divididas em duas categorias: linguagens puras tais como ELM, Haskell, Miranda e
impuras,comoC#,Java e nossoqueridoABAP.
4. O queé programação funcional:
Trata-se de programar estruturando algoritmos seguindo o conceito de funções
matemáticas, objetivando o imutabilidade dos dados. São classificadas em funções
de primeira classe e alta ordem. Funções de primeira classe são classificadas como
parâmetros, sendo usado assim em outrasfunções,jáfunções dealtaordem recebem
outrasfunçõescomoparâmetroeapresentamcomoresultado.
5. Programação funcionalx Outros Paradigmas:
Programaçãofuncional:Funções,expressõeslambda,recursão,estadoimutáveis...
Programação procedural:Execuçãoporsequênciasdepassos,condições,loops...
Programação OrientadaaObjetos:Classes,interfaces,métodos,polimorfismo...
8. ABAP adquiriu a possibilidade de se programar funcionalmente a partir do
componente SAP_ABAP 7.40 SP02, mas foi no SP08 que foi liberada todas as
características para tal. Dentre todas as linguagens impuras, o ABAP acaba sendo o
mais impuro, por não possuir uma característica importante para este paradigma, a
possibilidadedesecriar funçõesdealtaordem...
13. FizzBuzz:
Escreva um programa que imprima números de 1 a 100. Nesta sequência, para
números múltiplos de 3 imprima “FIZZ”, para múltiplos de 5 imprima “BUZZ” e para
múltiplosdeambos,imprima“FIZZBUZZ”.
14. cl_demo_output=>display(VALUEstringtab(FOR i =1 WHILEi <=100 ( COND#( LETm3 = i MOD 3m5 = i MOD 5 IN
WHENm3 = 0AND m5= 0 THEN|FIZZBUZZ|
WHENm3 = 0 THEN |FIZZ|
WHENm5 = 0 THEN |BUZZ|
ELSEi ) ) ) ).
17. cl_demo_output=>display(REDUCE#( INIT fibnm= VALUEstringtab(( |0|) ( |1|) )
n TYPEstring
x= `0`
y= `1`
FORi = 1 WHILEi <=100
NEXTn= ( x+ y)
fibnm= VALUE#( BASEfibnm ( n ) )
x= y
y= n )).
19. Formula deHaversine:
Calcular a distancia em KM entre dois pontos de uma esfera (de raio R) comlatitudes
φ1 e φ2, separação de latitude Δφ = φ1 − φ2, e separação de longitude Δλ, onde
os ângulos são em radianos, a distância d entre dois pontos (entre um círculo maior)
daesfera).
22. Currying:
Currying é uma técnica alta ordem na linguagem funcional que cria funções parciais,
ou seja, quando é aplicada a somente uma parte dos parâmetros que se espera. Em
linguagenspurasdeprogramaçãofuncionaléfeitodaseguinteforma:
F:: a -> b ->
23. Currying:
No ABAP está técnica não é totalmente viável pois não há a possibilidade de criação
de instruções de altonível, porém, como apresentado por Jerry Wang na comunidade
SAP, essa técnica é possível criando-se um clone de uma função já criada
anteriormente(ViaSE37)ealgumastécnicasdeorientaçãoa objetose imperativo.
Lembrar de provocar a participação do pessoal na internet.
Trata-se de programar estruturando algoritmos seguindo o conceito de funções matemáticas, objetivando o imutabilidade dos dados. São classificadas em funções de primeira classe e alta ordem. Funções de primeira classe tem como característica a passagem de funções como parâmetro, sendo usado assim em outras funções, já funções de alta ordem recebem outras funções como parâmetro e apresentam como resultado outras funções.
É um dos paradigmas mais antigos já criados, teve inicio com o cálculo lambda (λ), um sistema formal criado na década de 1930, com pouca aceitação no passado, mas que ultimamente vem crescendo e aparecendo nas mais diversas linguagens, divididas em duas categorias: linguagens puras tais como ELM, Haskell, Miranda e impuras, como C#, Java e nosso querido ABAP.
Trata-se de programar estruturando algoritmos seguindo o conceito de funções matemáticas, objetivando o imutabilidade dos dados. São classificadas em funções de primeira classe e alta ordem. Funções de primeira classe são classificadas como parâmetros, sendo usado assim em outras funções, já funções de alta ordem recebem outras funções como parâmetro e apresentam como resultado.