SlideShare une entreprise Scribd logo
1  sur  37
Télécharger pour lire hors ligne
The Imminent Threat
   of Functional Programming
Dimitry Solovyov
‣   Haskell enthusiast and FP proponent
‣   Heavy user of Underscore (FP library for JavaScript)
‣   Former assistant teacher of FP course at TTI
‣   Developer at Amber Games and Livesheets
dresdencodak.com
FUNCTIONAL
PROGRAMMING
In programming land,
there are two kinds of problems
In programming land,
there are two kinds of problems




                   memory
                 management
In programming land,
      there are two kinds of problems




sequencing                     memory
(aka do it in what order?)   management
In programming land,
      there are two kinds of problems




sequencing                     memory
                                    E D
                                  LV
                             management
(aka do it in what order?)
                               SO
In programming land,
      there are two kinds of problems




                                    memory D                *
sequencing                              VE
(aka do it in what order?)
                                     O L
                                  management
                                    S
                             * Except for null pointer exceptions ;-)
In programming land,
      there are two kinds of problems


           ?
                                    memory D                *
sequencing                              VE
(aka do it in what order?)
                                     O L
                                  management
                                    S
                             * Except for null pointer exceptions ;-)
Sequencing in Java

   while cond stmt
  do stmt while cond
for init cond step stmt
   for x : xs stmt
Sequencing in Ruby
       loop stmt
   while cond stmt
   until cond stmt
   stmt while cond
   stmt until cond
   for x in xs stmt
     xs each stmt
     n times stmt
    n upto m stmt
   n downto m stmt
          ...
Sequencing in Ruby
                   loop stmt
               while cond stmt
How elegant!   until cond stmt
               stmt while cond
               stmt until cond
               for x in xs stmt
                 xs each stmt
                 n times stmt
                n upto m stmt
               n downto m stmt
                      ...
Imperative programming in a nutshell


10   BEGIN
20   DO SOMETHING
30
40
     DO THAT OTHER THING
     GOTO 20                       ✔
INSTRUCTIONS                     RESULT
Declarative programming in a nutshell



Dear computer,
I want a pony.
                    MAGIC         ✔
DESCRIPTION                     RESULT
INSTANT
SUCCESS
“        OO makes code understandable by
                encapsulating moving parts.

              FP makes code understandable by
                  minimizing moving parts.
                                                   ”
                                  -- Michael Feathers

“Functional Programming in C++”
      http://goo.gl/aVSXX
Abstraction and reusability in FP


Absolutely abstract
                               Category theory *
            ly reu sable
       High
 Exciting
            ly comp
                   osable
                             Mathematically proven
   Ex tremely fun              to be composable


                            * Check out Scalaz for CT in Scala
                              Guava for other FP patterns in Java
+
                  Some GoF pattern analogs
                  provided at semantic level


“Design Patterns in Haskell”
    http://goo.gl/T0Evt
You can get away without
      encapsulating in objects


                   Data types




                                 fo
                                 rm
               r
             fo




                                  ed
             d
          ne




                                      in
                                      to
        ig
         s
      de




                    operate on      Immutable
Combinators
                                  data structures
You can get away without
      encapsulating in objects


                   Data types




                                 fo
                                 rm
               r
             fo




                                  ed
             d
          ne




                                      in
                                      to
        ig
         s
      de




                    operate on      Immutable
Combinators
                                  data structures
You can get away without
      encapsulating in objects


                   Data types
              Ready for the
             age of multicore


                                 fo
                                 rm
               r
             fo




                                  ed
             d
          ne




                                      in
                                      to
        ig
         s
      de




                    operate on      Immutable
Combinators
                                  data structures
Traits instead of inheritance

        Thesis: Inheriting state creates brittle software.
                     Inheriting implementation tends to
                     become useless over time.




“Life without Objects”
 http://goo.gl/wlOyq
Traits instead of inheritance

        Thesis: Inheriting state creates brittle software.
                     Inheriting implementation tends to
                     become useless over time.


                              A
                          B                      Data type

“Life without Objects”
                              C                 Expected to behave
                                                  like A, B, and C
 http://goo.gl/wlOyq
“         In the exclusive sense, functional
                     means no side-effects.

               In the inclusive sense it means a
             programming style which composes
                 functions in interesting ways.
                                                     ”
                                     -- Martin Odersky

“In Defense of Pattern Matching”
      http://goo.gl/HaKQD
Origin of the “functional style”


  LISP                      ML
Common Lisp            Standard ML
  Scheme                  OCaml
   Dylan                    F#
  Racket                 Haskell
  Closure JVM              Frege JVM
                          Scala * JVM


                    * (cough) Close enough.
LISP                     ML

 Dynamic               Strong types
Code = data           Type inference
Metaproggin'               ADTs

       First-class functions
      Higher-order functions
        Pattern matching
LISP                     ML

 Dynamic               Strong types
Code = data           Type inference
Metaproggin'               ADTs

       First-class functions
      Higher-order functions
        Pattern matching
Linus says:
 “Words are cheap,
  show me the code.”
Fake first-class functions in Java

interface Func<A, B> {
    B apply(A x);
}



static <A, B, C> Func<A, C> compose(final Func<A, B> f,
                                    final Func<B, C> g) {
    return new Func<A, C>() {
        public C apply(A x) {
            return g.apply(f.apply(x));
        }
    };
}
Fake higher-order functions in Java



 static <A, B> List<B> map(final Iterable<A> xs,
                           final Func<A, B> f) {
     List<B> ys = new ArrayList<B>();
     for (A x : xs) {
         B y = f.apply(x);
         ys.add(y);
     }
     return ys;
 }
                                    map
Fake higher-order functions in Java



 static <A, B> B fold(final Iterable<A> xs,
                      final B init,
                      final Func2<A, B, B> f) {
     B acc = init;
     for (A x : xs) {
         acc = f.apply(x, acc);
     }
     return acc;
 }
                                     fold
REFERENTIAL
TRANSPARENCY
How logic works


  x=1
  y=2
  x+y=3
in languages
     How logic works with side-effects


         x=1
         y=2
         x + y = 3*


* But only if the moon is still young!
  Otherwise the answer is 5.
Functional programming on the JVM




                                   en l


                                 fe d
                               tio ss



                               ar ia


                              ef le



                              ch n
                            c o cy


                                       s
                           nc cla



                           sp nt
                  es




                           at er
                           e- rol
                                    ct
                                   ns




                                     g
                         an re




                                  in
              ur




                         m att
                         fu st-




                        sid nt
                       tr efe
             os




                              p
                            fir
             cl




                            r
   Clojure    ✔          ✔   ✔   ✘   ✘
   Fantom     ✔          ✔   ✔   ✘   ✘
    Frege     ✔          ✔   ✔   ✔   ✔
     Java     ✔          ✘   ✘   ✘   ✘
    JRuby     ✔          ✘   ✘   ✘   ✘
    Kotlin    ✔          ✔   ✔   ✘   ✔
    Scala     ✔          ✔   ✔   ✘   ✔
FP exploration checklist

❏ Start learning a functional language:
   Scala, Clojure, or even Haskell
❏ Get together @ Latvian FP Group:
   look for it on LinkedIn      http://goo.gl/YhlJl


❏ Talk to me!   dimituri@gmail.com

Contenu connexe

Similaire à Dimitry Solovyov - The imminent threat of functional programming

Reverse engineering
Reverse engineeringReverse engineering
Reverse engineering
Saswat Padhi
 
Coding style of Linux Kernel
Coding style of Linux KernelCoding style of Linux Kernel
Coding style of Linux Kernel
Peter Chang
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
elliando dias
 
Close encounters in MDD: when Models meet Code
Close encounters in MDD: when Models meet CodeClose encounters in MDD: when Models meet Code
Close encounters in MDD: when Models meet Code
lbergmans
 
Close Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet codeClose Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet code
lbergmans
 
Exploitation and State Machines
Exploitation and State MachinesExploitation and State Machines
Exploitation and State Machines
Michael Scovetta
 
Paulking dlp
Paulking dlpPaulking dlp
Paulking dlp
d0nn9n
 

Similaire à Dimitry Solovyov - The imminent threat of functional programming (20)

Simon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelismSimon Peyton Jones: Managing parallelism
Simon Peyton Jones: Managing parallelism
 
Ruby is dying. What languages are cool now?
Ruby is dying. What languages are cool now?Ruby is dying. What languages are cool now?
Ruby is dying. What languages are cool now?
 
IN4308 1
IN4308 1IN4308 1
IN4308 1
 
LISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love ParanthesesLISP: How I Learned To Stop Worrying And Love Parantheses
LISP: How I Learned To Stop Worrying And Love Parantheses
 
Lang Net
Lang NetLang Net
Lang Net
 
I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?I know Java, why should I consider Clojure?
I know Java, why should I consider Clojure?
 
Mud flash
Mud flashMud flash
Mud flash
 
The Forces Driving Java
The Forces Driving JavaThe Forces Driving Java
The Forces Driving Java
 
Reverse engineering
Reverse engineeringReverse engineering
Reverse engineering
 
Coding style of Linux Kernel
Coding style of Linux KernelCoding style of Linux Kernel
Coding style of Linux Kernel
 
the productive programer: mechanics
the productive programer: mechanicsthe productive programer: mechanics
the productive programer: mechanics
 
Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009Sugar Presentation - YULHackers March 2009
Sugar Presentation - YULHackers March 2009
 
F-Script
F-ScriptF-Script
F-Script
 
FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)FregeDay: Design and Implementation of the language (Ingo Wechsung)
FregeDay: Design and Implementation of the language (Ingo Wechsung)
 
Evolving as a professional software developer
Evolving as a professional software developerEvolving as a professional software developer
Evolving as a professional software developer
 
Close encounters in MDD: when Models meet Code
Close encounters in MDD: when Models meet CodeClose encounters in MDD: when Models meet Code
Close encounters in MDD: when Models meet Code
 
Close Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet codeClose Encounters in MDD: when models meet code
Close Encounters in MDD: when models meet code
 
Exploitation and State Machines
Exploitation and State MachinesExploitation and State Machines
Exploitation and State Machines
 
Paulking dlp
Paulking dlpPaulking dlp
Paulking dlp
 
Java Tools and Techniques for Solving Tricky Problem
Java Tools and Techniques for Solving Tricky ProblemJava Tools and Techniques for Solving Tricky Problem
Java Tools and Techniques for Solving Tricky Problem
 

Plus de Dmitry Buzdin

Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
Dmitry Buzdin
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
Dmitry Buzdin
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
Dmitry Buzdin
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
Dmitry Buzdin
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
Dmitry Buzdin
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
Dmitry Buzdin
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
Dmitry Buzdin
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
Dmitry Buzdin
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
Dmitry Buzdin
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
Dmitry Buzdin
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
Dmitry Buzdin
 
Pragmatic Java Test Automation
Pragmatic Java Test AutomationPragmatic Java Test Automation
Pragmatic Java Test Automation
Dmitry Buzdin
 

Plus de Dmitry Buzdin (20)

How Payment Cards Really Work?
How Payment Cards Really Work?How Payment Cards Really Work?
How Payment Cards Really Work?
 
Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?Как построить свой фреймворк для автотестов?
Как построить свой фреймворк для автотестов?
 
How to grow your own Microservice?
How to grow your own Microservice?How to grow your own Microservice?
How to grow your own Microservice?
 
How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?How to Build Your Own Test Automation Framework?
How to Build Your Own Test Automation Framework?
 
Delivery Pipeline for Windows Machines
Delivery Pipeline for Windows MachinesDelivery Pipeline for Windows Machines
Delivery Pipeline for Windows Machines
 
Big Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop InfrastructureBig Data Processing Using Hadoop Infrastructure
Big Data Processing Using Hadoop Infrastructure
 
Developing Useful APIs
Developing Useful APIsDeveloping Useful APIs
Developing Useful APIs
 
Whats New in Java 8
Whats New in Java 8Whats New in Java 8
Whats New in Java 8
 
Архитектура Ленты на Одноклассниках
Архитектура Ленты на ОдноклассникахАрхитектура Ленты на Одноклассниках
Архитектура Ленты на Одноклассниках
 
Dart Workshop
Dart WorkshopDart Workshop
Dart Workshop
 
Riding Redis @ask.fm
Riding Redis @ask.fmRiding Redis @ask.fm
Riding Redis @ask.fm
 
Rubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part IIRubylight JUG Contest Results Part II
Rubylight JUG Contest Results Part II
 
Rubylight Pattern-Matching Solutions
Rubylight Pattern-Matching SolutionsRubylight Pattern-Matching Solutions
Rubylight Pattern-Matching Solutions
 
Refactoring to Macros with Clojure
Refactoring to Macros with ClojureRefactoring to Macros with Clojure
Refactoring to Macros with Clojure
 
Poor Man's Functional Programming
Poor Man's Functional ProgrammingPoor Man's Functional Programming
Poor Man's Functional Programming
 
Rubylight programming contest
Rubylight programming contestRubylight programming contest
Rubylight programming contest
 
Continuous Delivery
Continuous Delivery Continuous Delivery
Continuous Delivery
 
Introduction to DevOps
Introduction to DevOpsIntroduction to DevOps
Introduction to DevOps
 
Thread Dump Analysis
Thread Dump AnalysisThread Dump Analysis
Thread Dump Analysis
 
Pragmatic Java Test Automation
Pragmatic Java Test AutomationPragmatic Java Test Automation
Pragmatic Java Test Automation
 

Dernier

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 

Dernier (20)

Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation StrategiesHTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
 
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 

Dimitry Solovyov - The imminent threat of functional programming

  • 1. The Imminent Threat of Functional Programming
  • 2. Dimitry Solovyov ‣ Haskell enthusiast and FP proponent ‣ Heavy user of Underscore (FP library for JavaScript) ‣ Former assistant teacher of FP course at TTI ‣ Developer at Amber Games and Livesheets
  • 5. In programming land, there are two kinds of problems
  • 6. In programming land, there are two kinds of problems memory management
  • 7. In programming land, there are two kinds of problems sequencing memory (aka do it in what order?) management
  • 8. In programming land, there are two kinds of problems sequencing memory E D LV management (aka do it in what order?) SO
  • 9. In programming land, there are two kinds of problems memory D * sequencing VE (aka do it in what order?) O L management S * Except for null pointer exceptions ;-)
  • 10. In programming land, there are two kinds of problems ? memory D * sequencing VE (aka do it in what order?) O L management S * Except for null pointer exceptions ;-)
  • 11. Sequencing in Java while cond stmt do stmt while cond for init cond step stmt for x : xs stmt
  • 12. Sequencing in Ruby loop stmt while cond stmt until cond stmt stmt while cond stmt until cond for x in xs stmt xs each stmt n times stmt n upto m stmt n downto m stmt ...
  • 13. Sequencing in Ruby loop stmt while cond stmt How elegant! until cond stmt stmt while cond stmt until cond for x in xs stmt xs each stmt n times stmt n upto m stmt n downto m stmt ...
  • 14. Imperative programming in a nutshell 10 BEGIN 20 DO SOMETHING 30 40 DO THAT OTHER THING GOTO 20 ✔ INSTRUCTIONS RESULT
  • 15. Declarative programming in a nutshell Dear computer, I want a pony. MAGIC ✔ DESCRIPTION RESULT
  • 17. OO makes code understandable by encapsulating moving parts. FP makes code understandable by minimizing moving parts. ” -- Michael Feathers “Functional Programming in C++” http://goo.gl/aVSXX
  • 18. Abstraction and reusability in FP Absolutely abstract Category theory * ly reu sable High Exciting ly comp osable Mathematically proven Ex tremely fun to be composable * Check out Scalaz for CT in Scala Guava for other FP patterns in Java
  • 19. + Some GoF pattern analogs provided at semantic level “Design Patterns in Haskell” http://goo.gl/T0Evt
  • 20. You can get away without encapsulating in objects Data types fo rm r fo ed d ne in to ig s de operate on Immutable Combinators data structures
  • 21. You can get away without encapsulating in objects Data types fo rm r fo ed d ne in to ig s de operate on Immutable Combinators data structures
  • 22. You can get away without encapsulating in objects Data types Ready for the age of multicore fo rm r fo ed d ne in to ig s de operate on Immutable Combinators data structures
  • 23. Traits instead of inheritance Thesis: Inheriting state creates brittle software. Inheriting implementation tends to become useless over time. “Life without Objects” http://goo.gl/wlOyq
  • 24. Traits instead of inheritance Thesis: Inheriting state creates brittle software. Inheriting implementation tends to become useless over time. A B Data type “Life without Objects” C Expected to behave like A, B, and C http://goo.gl/wlOyq
  • 25. In the exclusive sense, functional means no side-effects. In the inclusive sense it means a programming style which composes functions in interesting ways. ” -- Martin Odersky “In Defense of Pattern Matching” http://goo.gl/HaKQD
  • 26. Origin of the “functional style” LISP ML Common Lisp Standard ML Scheme OCaml Dylan F# Racket Haskell Closure JVM Frege JVM Scala * JVM * (cough) Close enough.
  • 27. LISP ML Dynamic Strong types Code = data Type inference Metaproggin' ADTs First-class functions Higher-order functions Pattern matching
  • 28. LISP ML Dynamic Strong types Code = data Type inference Metaproggin' ADTs First-class functions Higher-order functions Pattern matching
  • 29. Linus says: “Words are cheap, show me the code.”
  • 30. Fake first-class functions in Java interface Func<A, B> { B apply(A x); } static <A, B, C> Func<A, C> compose(final Func<A, B> f, final Func<B, C> g) { return new Func<A, C>() { public C apply(A x) { return g.apply(f.apply(x)); } }; }
  • 31. Fake higher-order functions in Java static <A, B> List<B> map(final Iterable<A> xs, final Func<A, B> f) { List<B> ys = new ArrayList<B>(); for (A x : xs) { B y = f.apply(x); ys.add(y); } return ys; } map
  • 32. Fake higher-order functions in Java static <A, B> B fold(final Iterable<A> xs, final B init, final Func2<A, B, B> f) { B acc = init; for (A x : xs) { acc = f.apply(x, acc); } return acc; } fold
  • 34. How logic works x=1 y=2 x+y=3
  • 35. in languages How logic works with side-effects x=1 y=2 x + y = 3* * But only if the moon is still young! Otherwise the answer is 5.
  • 36. Functional programming on the JVM en l fe d tio ss ar ia ef le ch n c o cy s nc cla sp nt es at er e- rol ct ns g an re in ur m att fu st- sid nt tr efe os p fir cl r Clojure ✔ ✔ ✔ ✘ ✘ Fantom ✔ ✔ ✔ ✘ ✘ Frege ✔ ✔ ✔ ✔ ✔ Java ✔ ✘ ✘ ✘ ✘ JRuby ✔ ✘ ✘ ✘ ✘ Kotlin ✔ ✔ ✔ ✘ ✔ Scala ✔ ✔ ✔ ✘ ✔
  • 37. FP exploration checklist ❏ Start learning a functional language: Scala, Clojure, or even Haskell ❏ Get together @ Latvian FP Group: look for it on LinkedIn http://goo.gl/YhlJl ❏ Talk to me! dimituri@gmail.com