SlideShare a Scribd company logo
Settiamo le
aspettative
Si basa tutto su
esperienze personali e
di team
Un cheat sheet
volutamente
semplicistico
L’inizio di un percorso
Molti “dipende”
in caso, siete ancora in
tempo per l’aperitivo
Emanuele De Cupis
Senior Software Engineer @ PagoPA s.p.a.
● Usata da 16M di Cittadini
● Più di 7000 Enti locali e nazionali
● ~6M messaggi/settimana
App IO
l’app dei servizi pubblici italiani
github.com/pagopa/io
PagoPA S.p.A.
società pubblica ad alto livello
specialistico
www.pagopa.it
● Sviluppa progetti innovativi e
gestisce piattaforme tecnologiche
● Molti progetti attivi per la
digitalizzazione
Agenda
1. fp-ts: cos’è e perché usarla
2.Tipi ed operazioni essenziali
3.railway-oriented programming
https://bit.ly/fpts-code
Il codice lo
trovate qui
https://bit.ly/fpts-code
Cos’è fp-ts e
perché usarla
Una libreria Typescript per
browser e Node.js
Ispirata a Haskell, PureScript e
Scala, permette di sviluppare
con i più popolari pattern della
programmazione funzionale
github.com/gcanti/fp-ts
Si basa su regole, teoremi e assiomi che
determinano la capacità di due o più
oggetti (funzioni?) di combinarsi tra loro, e
il comportamento di questa interazione
● A e B possono combinarsi?
● In quanti e quali modi?
● Che significato ha il risultato della loro
combinazione?
Functional Programming
Un motore di regole
e che regolano la
componibilità
Un sistema di
tipi che analizza
il codice
Un motore di regole
e che regolano la
componibilità
Un sistema di
tipi che analizza
il codice
● il compilatore guida nell’individuare
tutti i path e gli edge case
● continua challenge con il
compilatore
● tight feedback loop
Esperienza di sviluppo
Esperienza di sviluppo nella realtà
Tipi ed operazioni
essenziali
● 3 Data Type
● 5 Operazioni
Data Type Si usa per
Option Un valore che c'è o è null-ish
Either Validazione, operazione che può fallire
TaskEither Operazione asincrona che può fallire
Operazione Si usa per
is* type narrowing di un TypeClass in un sotto-tipo
from* Costruire un Data Type a partire da un valore o un altro Data Type
map Applicare una trasformazione al valore contenuto senza cambiare
il sotto-tipo
chain Applicare una trasformazione al valore contenuto cambiando il
sotto-tipo
fold Far convergere i due rami della computazione
Vediamo un po’
di codice
https://bit.ly/fpts-code
Railway-oriented
programming
“Many examples in functional programming
assume that you are always on the
‘happy path’. But to create a robust real
world application you must deal with
validation, logging, network and service
errors, and other annoyances.
So, how do you handle all this in a clean
functional way?”
Scott Wlashin
Tecnica di programmazione resa famosa da
Scott Wlashin
Domain
Modeling Made
Functional
F# for fun
and profit
Railway-oriented programming
+
Railway-oriented programming
+
???
Railway-oriented programming
+
Railway-oriented programming
+
Railway-oriented programming
+ + + +
Railway-oriented programming 💙 fp-ts
Come
smart constructor (from*, tryCatch,
right, some, etc)
Esempio
Railway-oriented programming 💙 fp-ts
Come
map()
Esempio
Railway-oriented programming 💙 fp-ts
Come
mapLeft()
Esempio
Railway-oriented programming 💙 fp-ts
Come
chain()
Esempio
Railway-oriented programming 💙 fp-ts
Come
fold() (se torna un data type)
Esempio
Railway-oriented programming 💙 fp-ts
Come
fold() (se torna un valore)
Esempio
Due parole
conclusive
● Quanto presentato è sufficiente per iniziare a
implementare funzionalità nei nostri progetti
web con fp-ts
○ fp-ts è molto più profonda di così, offre
funzionalità e costrutti evoluti e sofisticati
○ Nella nostra esperienza abbiamo notato che,
usando costrutti più potenti, il vantaggio di
codice viene vanificato dall’aumento della
curva di apprendimento
● Onboarding, onboarding, onboarding!
● Ci ha aiutato a convergere su uno modo comune
di scrivere il codice
“un Monoid rimane un Monoid
che tu lo conosca o meno”
cit. Federico Biccheddu
つづく

More Related Content

Similar to RomaJS June 2022

Iefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategyIefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategy
Andrea Colombetti
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
Luca Masini
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Whymca
 
Angelo_Bai_Curriculum
Angelo_Bai_CurriculumAngelo_Bai_Curriculum
Angelo_Bai_CurriculumAngelo Bai
 
Sviluppare una app mobile net oriented
Sviluppare una app mobile net orientedSviluppare una app mobile net oriented
Sviluppare una app mobile net oriented
Alessandro Morvillo
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
Andrea Carratta
 
API Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaAPI Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole Italia
Profesia Srl, Lynx Group
 
Invisible infrastructures
Invisible infrastructuresInvisible infrastructures
Invisible infrastructures
Giulio Roggero
 
Fuse webinar
Fuse webinarFuse webinar
Fuse webinar
Ugo Landini
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
Daniele Mondello
 
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
Paolo Dadda
 
OCP - Overview del progetto
OCP - Overview del progettoOCP - Overview del progetto
OCP - Overview del progetto
opencityplatform
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
Igor Antonacci
 
Ocp overview del progetto
Ocp overview del progettoOcp overview del progetto
Ocp overview del progetto
opencityplatform
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
Daniele Mondello
 
Acadevmy - PWA Overview
Acadevmy - PWA OverviewAcadevmy - PWA Overview
Acadevmy - PWA Overview
Francesco Sciuti
 
Ocp overview
Ocp overviewOcp overview
Ocp overview
opencityplatform
 
La piattaforma OCP.pptx
La piattaforma OCP.pptxLa piattaforma OCP.pptx
La piattaforma OCP.pptx
opencityplatform
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
marcocasario
 

Similar to RomaJS June 2022 (20)

Iefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategyIefficiency 2-bernasconi ibm power strategy
Iefficiency 2-bernasconi ibm power strategy
 
SVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROIDSVILUPPO DI SERVIZI REST PER ANDROID
SVILUPPO DI SERVIZI REST PER ANDROID
 
Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini Sviluppo di servizi REST per Android - Luca Masini
Sviluppo di servizi REST per Android - Luca Masini
 
Angelo_Bai_Curriculum
Angelo_Bai_CurriculumAngelo_Bai_Curriculum
Angelo_Bai_Curriculum
 
Sviluppare una app mobile net oriented
Sviluppare una app mobile net orientedSviluppare una app mobile net oriented
Sviluppare una app mobile net oriented
 
Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?Cloud & No-Coding: come fare su Azure?
Cloud & No-Coding: come fare su Azure?
 
API Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole ItaliaAPI Transformation in Crédit Agricole Italia
API Transformation in Crédit Agricole Italia
 
Invisible infrastructures
Invisible infrastructuresInvisible infrastructures
Invisible infrastructures
 
Fuse webinar
Fuse webinarFuse webinar
Fuse webinar
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
GAE python GDG Milano - L01
GAE python GDG Milano - L01GAE python GDG Milano - L01
GAE python GDG Milano - L01
 
OCP - Overview del progetto
OCP - Overview del progettoOCP - Overview del progetto
OCP - Overview del progetto
 
cv Armando Maglio
cv Armando Magliocv Armando Maglio
cv Armando Maglio
 
Machine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devopsMachine learning models continuous deployment on azure using devops
Machine learning models continuous deployment on azure using devops
 
Ocp overview del progetto
Ocp overview del progettoOcp overview del progetto
Ocp overview del progetto
 
Designing with microservices - Daniele Mondello
Designing with microservices - Daniele MondelloDesigning with microservices - Daniele Mondello
Designing with microservices - Daniele Mondello
 
Acadevmy - PWA Overview
Acadevmy - PWA OverviewAcadevmy - PWA Overview
Acadevmy - PWA Overview
 
Ocp overview
Ocp overviewOcp overview
Ocp overview
 
La piattaforma OCP.pptx
La piattaforma OCP.pptxLa piattaforma OCP.pptx
La piattaforma OCP.pptx
 
Enterprise Spring and Flex applications
Enterprise Spring and Flex applicationsEnterprise Spring and Flex applications
Enterprise Spring and Flex applications
 

RomaJS June 2022

  • 1.
  • 2. Settiamo le aspettative Si basa tutto su esperienze personali e di team Un cheat sheet volutamente semplicistico L’inizio di un percorso Molti “dipende” in caso, siete ancora in tempo per l’aperitivo
  • 3. Emanuele De Cupis Senior Software Engineer @ PagoPA s.p.a.
  • 4. ● Usata da 16M di Cittadini ● Più di 7000 Enti locali e nazionali ● ~6M messaggi/settimana App IO l’app dei servizi pubblici italiani github.com/pagopa/io PagoPA S.p.A. società pubblica ad alto livello specialistico www.pagopa.it ● Sviluppa progetti innovativi e gestisce piattaforme tecnologiche ● Molti progetti attivi per la digitalizzazione
  • 5. Agenda 1. fp-ts: cos’è e perché usarla 2.Tipi ed operazioni essenziali 3.railway-oriented programming https://bit.ly/fpts-code
  • 6. Il codice lo trovate qui https://bit.ly/fpts-code
  • 7. Cos’è fp-ts e perché usarla Una libreria Typescript per browser e Node.js Ispirata a Haskell, PureScript e Scala, permette di sviluppare con i più popolari pattern della programmazione funzionale github.com/gcanti/fp-ts
  • 8. Si basa su regole, teoremi e assiomi che determinano la capacità di due o più oggetti (funzioni?) di combinarsi tra loro, e il comportamento di questa interazione ● A e B possono combinarsi? ● In quanti e quali modi? ● Che significato ha il risultato della loro combinazione? Functional Programming
  • 9. Un motore di regole e che regolano la componibilità Un sistema di tipi che analizza il codice
  • 10. Un motore di regole e che regolano la componibilità Un sistema di tipi che analizza il codice
  • 11. ● il compilatore guida nell’individuare tutti i path e gli edge case ● continua challenge con il compilatore ● tight feedback loop Esperienza di sviluppo
  • 12. Esperienza di sviluppo nella realtà
  • 13. Tipi ed operazioni essenziali ● 3 Data Type ● 5 Operazioni
  • 14. Data Type Si usa per Option Un valore che c'è o è null-ish Either Validazione, operazione che può fallire TaskEither Operazione asincrona che può fallire Operazione Si usa per is* type narrowing di un TypeClass in un sotto-tipo from* Costruire un Data Type a partire da un valore o un altro Data Type map Applicare una trasformazione al valore contenuto senza cambiare il sotto-tipo chain Applicare una trasformazione al valore contenuto cambiando il sotto-tipo fold Far convergere i due rami della computazione
  • 15. Vediamo un po’ di codice https://bit.ly/fpts-code
  • 16. Railway-oriented programming “Many examples in functional programming assume that you are always on the ‘happy path’. But to create a robust real world application you must deal with validation, logging, network and service errors, and other annoyances. So, how do you handle all this in a clean functional way?” Scott Wlashin Tecnica di programmazione resa famosa da Scott Wlashin Domain Modeling Made Functional F# for fun and profit
  • 22. Railway-oriented programming 💙 fp-ts Come smart constructor (from*, tryCatch, right, some, etc) Esempio
  • 23. Railway-oriented programming 💙 fp-ts Come map() Esempio
  • 24. Railway-oriented programming 💙 fp-ts Come mapLeft() Esempio
  • 25. Railway-oriented programming 💙 fp-ts Come chain() Esempio
  • 26. Railway-oriented programming 💙 fp-ts Come fold() (se torna un data type) Esempio
  • 27. Railway-oriented programming 💙 fp-ts Come fold() (se torna un valore) Esempio
  • 28. Due parole conclusive ● Quanto presentato è sufficiente per iniziare a implementare funzionalità nei nostri progetti web con fp-ts ○ fp-ts è molto più profonda di così, offre funzionalità e costrutti evoluti e sofisticati ○ Nella nostra esperienza abbiamo notato che, usando costrutti più potenti, il vantaggio di codice viene vanificato dall’aumento della curva di apprendimento ● Onboarding, onboarding, onboarding! ● Ci ha aiutato a convergere su uno modo comune di scrivere il codice
  • 29. “un Monoid rimane un Monoid che tu lo conosca o meno” cit. Federico Biccheddu つづく

Editor's Notes

  1. https://excalidraw.com/#json=QXGqi7-On6oHydmtpvFQg,iqfgVUjmjg8NlI6uTK4Owg