際際滷

際際滷Share a Scribd company logo
RomaJS June 2022
Settiamo le
aspettative
Si basa tutto su
esperienze personali e
di team
Un cheat sheet
volutamente
semplicistico
Linizio di un percorso
Molti dipende
in caso, siete ancora in
tempo per laperitivo
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
lapp 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 nellindividuare
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 dallaumento 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

RomaJS June 2022

  • 2. Settiamo le aspettative Si basa tutto su esperienze personali e di team Un cheat sheet volutamente semplicistico Linizio di un percorso Molti dipende in caso, siete ancora in tempo per laperitivo
  • 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 lapp 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 nellindividuare 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 dallaumento 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