SlideShare ist ein Scribd-Unternehmen logo
1 von 27
Downloaden Sie, um offline zu lesen
Programação FuncionalcomABAP
abap-pacheco raphaelpacheco @dev_pacheco
O queireifalar poraqui:
O queéprogramaçãofuncional;
Programação funcionalX Outrosparadigmas;
Programação funcionalnomundoABAP,oque
mudanasnossasvidas;
Algunscasosaplicados.
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.
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.
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...
Programação funcional com abap
Programação funcional com abap
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...
Alguns casos aplicados
(Hora da demo)
Fatorial:
Escrevaumprograma quemostreon!deumnúmeronaturaleapresentenatela.
Se omesmoforiguala zero,preenchercom1,senãocontinuara rotina.
DATAnTYPEi.
cl_demo_input=>request( EXPORTINGtext = 'Número:'CHANGINGfield = n ).
cl_demo_output=>display(COND#( WHENn=0 THEN 1
ELSEREDUCE#( INITn1 =1
FORi = 1THEN i +1 UNTILi > n
NEXTn1 =n1*i ) ) ).
Programação funcional com abap
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”.
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 ) ) ) ).
Programação funcional com abap
SequênciaFibonacci:
Escrever uma sequência de números baseando-se na fórmula Fn = Fn-1 + Fn-2,
iniciandoestacom0e1.
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 )).
Programação funcional com abap
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).
DATA: lat1 TYPEf VALUE'36.12',
lat2 TYPE f VALUE'33.94',
lon1 TYPEf VALUE'-86.67',
lon2 TYPEf VALUE'-118.40'.
cl_demo_input=>add_field( EXPORTINGtext = 'Latitude 1:' CHANGINGfield = lat1 ).
cl_demo_input=>add_field( EXPORTINGtext = 'Latitude 2:' CHANGINGfield = lat2 ).
cl_demo_input=>add_field( EXPORTINGtext = 'Longitude1: 'CHANGINGfield = lon1 ).
cl_demo_input=>add_field( EXPORTINGtext = 'Longitude2: 'CHANGINGfield = lon2 ).
cl_demo_input=>request( ).
cl_demo_output=>begin_section( title = |Formula Haversine| ).
cl_demo_output=>display( VALUEstringtab( LET pi = acos( -1 )
pi_180 = pi /180
x = ( lon2 *pi_180) -( lon1 *pi_180)
dist = 20000/ pi * acos( sin( lat1 * pi_180) *
sin( lat2 * pi_180 )+
cos( lat1 * pi_180) *
cos( lat2 * pi_180) *
cos( x ) )
IN
( |Distancia entreos dois pontos: | &&|{ dist }| &&| KM.| ) ) ).
Programação funcional com abap
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 ->
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.
Numachamadasimples,seriaassim:
DATA:stringtabTYPEstring_table.
APPEND|ABAP| TO stringtab.
DATA(curry)=zcl_curry=>curry(iv_func='Z_CURRYING'it_argument=stringtab).
CALLFUNCTIONcurryEXPORTING iv_second=|ELM|iv_third=|HANA|.
Algumas leituras querecomendo:
https://blogs.sap.com/2015/04/09/funtional-programming-in-abap/
https://blogs.sap.com/2015/04/09/why-we-must-take-functional-programming-seriously/
https://blogs.sap.com/2017/02/26/functional-programming-simulate-curry-in-abap/
https://en.wikipedia.org/wiki/List_of_programming_languages_by_type
“O maiorbem deumhomeméumamenteinquieta”
IssacAssimov
Vlw

Weitere ähnliche Inhalte

Was ist angesagt? (19)

Estrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listasEstrutura de dados - Implementação de filas com listas
Estrutura de dados - Implementação de filas com listas
 
Estrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas EncadeadasEstrutura de Dados - Listas Encadeadas
Estrutura de Dados - Listas Encadeadas
 
Pilha e Fila Dinamica
Pilha e Fila DinamicaPilha e Fila Dinamica
Pilha e Fila Dinamica
 
Pilha e filas
Pilha e filasPilha e filas
Pilha e filas
 
Estrutura de dados em Java - Filas
Estrutura de dados em Java - FilasEstrutura de dados em Java - Filas
Estrutura de dados em Java - Filas
 
Introdução à linguagem c
Introdução à linguagem cIntrodução à linguagem c
Introdução à linguagem c
 
Trabalho informatica educativa2 mary
Trabalho informatica educativa2 maryTrabalho informatica educativa2 mary
Trabalho informatica educativa2 mary
 
Pilha e Fila Estática
Pilha e Fila EstáticaPilha e Fila Estática
Pilha e Fila Estática
 
Aula14
Aula14Aula14
Aula14
 
Linguagem R
Linguagem RLinguagem R
Linguagem R
 
Aula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorioAula 01 práticaalgoritmo laboratorio
Aula 01 práticaalgoritmo laboratorio
 
Estrutura de Dados - PILHAS
Estrutura de Dados - PILHASEstrutura de Dados - PILHAS
Estrutura de Dados - PILHAS
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Aula5 introducao c
Aula5 introducao cAula5 introducao c
Aula5 introducao c
 
Apostila rpira
Apostila rpiraApostila rpira
Apostila rpira
 
Apostila estrutura de dados 2
Apostila estrutura de dados 2Apostila estrutura de dados 2
Apostila estrutura de dados 2
 
Pilha em C
Pilha em CPilha em C
Pilha em C
 
Pilhas e Filas
Pilhas e FilasPilhas e Filas
Pilhas e Filas
 
Light Talk sobre JavaScript Funcional
Light Talk sobre JavaScript FuncionalLight Talk sobre JavaScript Funcional
Light Talk sobre JavaScript Funcional
 

Ähnlich wie Programação funcional com abap

Python Funcional
Python FuncionalPython Funcional
Python Funcionalpugpe
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Ismar Silveira
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellSérgio Souza Costa
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem luaRafael Sanches
 
Inteligencia artificial 10
Inteligencia artificial 10Inteligencia artificial 10
Inteligencia artificial 10Nauber Gois
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?Denis Costa
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilabMarco Antônio
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcionalNatan Mai
 
O que é logaritmo matematica
O que é logaritmo matematicaO que é logaritmo matematica
O que é logaritmo matematicagustavo-516
 
Criptografia com curva_eliptica_dbetoni
Criptografia com curva_eliptica_dbetoniCriptografia com curva_eliptica_dbetoni
Criptografia com curva_eliptica_dbetonidrbetoni
 
Aula 6 1 linguagem pascal-parte_1
Aula 6   1 linguagem pascal-parte_1Aula 6   1 linguagem pascal-parte_1
Aula 6 1 linguagem pascal-parte_1Duane Bertoldo
 

Ähnlich wie Programação funcional com abap (20)

Python Funcional
Python FuncionalPython Funcional
Python Funcional
 
Pythonfuncional
PythonfuncionalPythonfuncional
Pythonfuncional
 
Introdução ao paradigma funcional com scala
Introdução ao paradigma funcional com scalaIntrodução ao paradigma funcional com scala
Introdução ao paradigma funcional com scala
 
Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2Paradigmas de Linguagens de programacao - Aula #2
Paradigmas de Linguagens de programacao - Aula #2
 
Paradigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo HaskellParadigma Funcional - Caso de Estudo Haskell
Paradigma Funcional - Caso de Estudo Haskell
 
Scheme
SchemeScheme
Scheme
 
Apresentação sobre a linguagem lua
Apresentação sobre a linguagem luaApresentação sobre a linguagem lua
Apresentação sobre a linguagem lua
 
Inteligencia artificial 10
Inteligencia artificial 10Inteligencia artificial 10
Inteligencia artificial 10
 
07-lambda.pdf
07-lambda.pdf07-lambda.pdf
07-lambda.pdf
 
Haskell - Introdução
Haskell - IntroduçãoHaskell - Introdução
Haskell - Introdução
 
O que é que o Java não tem?
O que é que o Java não tem?O que é que o Java não tem?
O que é que o Java não tem?
 
47612195 apostila-de-scilab
47612195 apostila-de-scilab47612195 apostila-de-scilab
47612195 apostila-de-scilab
 
CUSC.pptx
CUSC.pptxCUSC.pptx
CUSC.pptx
 
Programação funcional
Programação funcionalProgramação funcional
Programação funcional
 
Intro funcoes(2)
Intro funcoes(2)Intro funcoes(2)
Intro funcoes(2)
 
Utilizandoo winplot
Utilizandoo winplotUtilizandoo winplot
Utilizandoo winplot
 
O que é logaritmo matematica
O que é logaritmo matematicaO que é logaritmo matematica
O que é logaritmo matematica
 
Criptografia com curva_eliptica_dbetoni
Criptografia com curva_eliptica_dbetoniCriptografia com curva_eliptica_dbetoni
Criptografia com curva_eliptica_dbetoni
 
Aula 6 1 linguagem pascal-parte_1
Aula 6   1 linguagem pascal-parte_1Aula 6   1 linguagem pascal-parte_1
Aula 6 1 linguagem pascal-parte_1
 
Math
MathMath
Math
 

Programação funcional com abap

Hinweis der Redaktion

  1. Lembrar de provocar a participação do pessoal na internet.
  2. 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.
  3. É 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.