1
Les concepts de la
programmation fonctionnelle
illustrés avec Java 8
by Yannick Chartois
@ychartois
2
Bodil Stokke
What Every Hipster Should Know About Functional
Programming
Vimeo / Parleys
Twitter: @ychartois – Github: h...
3
Question
Maintenant que nous avons les lambdas, peut-on faire la
même chose avec Java 8?
Twitter: @ychartois – Github: h...
4
First Class Function
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
“Les fonctions ...
5
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Code
Résultat
Function<String, String> hello = ...
6
Higher order function
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
“C'est une fon...
7
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Code
Résultat
List<String> filter( Predicate<St...
8
Functor
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
“C'est une collection d'élém...
9
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Code
Résultat
List<String> map( Function<String...
10
Reduction / Aggregation
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
Higher orde...
11
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Code
Résultat
String reduce( BinaryOperator<St...
12
Combinator
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
“C'est une fonction qui ...
13
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Problème
Solution
List< String > confs2 = Arra...
14
Composition
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Définition
“Combine plusieurs fonc...
15
Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
Code
Résultat
Function<String, String> compose...
16
Twitter: @ychartois
Github: https://github.com/ychartois/ProgFoncJava8
Upcoming SlideShare
Loading in …5
×

Les concepts de la programmation fonctionnelle illustrés avec java 8

1,093 views

Published on

Ma présentation à Devoxx France 2014: Ce Quickie est basé sur le talk de Bodil Stokke: What Every Hipster Should Know About Functional Programming. C'est un petit exercice basé sur la question suivante: peut-on transposer tous les exemples JS de son talk en Java 8 avec des lambdas? Au programme donc: First Class Function, Functor, High Order Function, Reduction, Combinator, Composition.

Published in: Software
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,093
On SlideShare
0
From Embeds
0
Number of Embeds
23
Actions
Shares
0
Downloads
15
Comments
0
Likes
2
Embeds 0
No embeds

No notes for slide

Les concepts de la programmation fonctionnelle illustrés avec java 8

  1. 1. 1 Les concepts de la programmation fonctionnelle illustrés avec Java 8 by Yannick Chartois @ychartois
  2. 2. 2 Bodil Stokke What Every Hipster Should Know About Functional Programming Vimeo / Parleys Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
  3. 3. 3 Question Maintenant que nous avons les lambdas, peut-on faire la même chose avec Java 8? Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8
  4. 4. 4 First Class Function Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition “Les fonctions sont traitées par le langage comme des valeurs de première classe.”
  5. 5. 5 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Code Résultat Function<String, String> hello = (String s) -> "hello " + s; hello ; // BaseConcepts$$Lambda$1@a09ee92 // != BaseConcepts@30f39991 hello.apply("Erouan") ; // hello Erouan
  6. 6. 6 Higher order function Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition “C'est une fonction qui prend une ou plusieurs fonctions comme entrée et/ou qui renvoie une fonction”
  7. 7. 7 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Code Résultat List<String> filter( Predicate<String> f, List<String> values ) { List<String> toReturn = new ArrayList<>(); for( String current : values ) { if ( f.test(current) ) toReturn.add( current ); } return toReturn; } List<String> confs = Arrays.asList("jug", "devoxx", "javaone"); filter(s -> s.contains("j"), confs) ; // [jug, javaone] Filter Java 8 confs.stream().filter( s -> s.contains("j") ).collect(Collectors.toList())
  8. 8. 8 Functor Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition “C'est une collection d'éléments X qui peut s'appliquer une fonction f: X -> Y pour créer une collection Y”
  9. 9. 9 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Code Résultat List<String> map( Function<String, String> f , List<String> values ) { List<String> toReturn = new ArrayList<>(); for( String current : values ) { toReturn.add( f.apply(current) ); } return toReturn; } List<String> confs = Arrays.asList( "jug", "devoxx", "javaone" ); map( s -> s.toUpperCase(), confs ); // [JUG, DEVOXX, JAVAONE] Map Java 8 confs.stream().map( s -> s.toUpperCase() ).collect( Collectors.toList() )
  10. 10. 10 Reduction / Aggregation Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition Higher order function dont le but est de produire une valeur qui est le résultat de l’application d’un opérateur sur tous les éléments d’une structure de donnée
  11. 11. 11 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Code Résultat String reduce( BinaryOperator<String> op , List<String> values ) { String toReturn = ""; for( String current : values ) { toReturn = toReturn.isEmpty() ? current : op.apply(toReturn, current) } return toReturn; } List<String> confs = Arrays.asList( "jug", "devoxx", "javaone" ); reduce( (s1, s2) -> s1 + ", " + S2, confs ); // jug, devoxx, javaone Reduce / fold Java 8 confs.stream().reduce((s1, s2) -> s1 + ", " + s2 ).get() )
  12. 12. 12 Combinator Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition “C'est une fonction qui définie une nouvelle fonction à partir de ses arguments ou d'autre combinators”
  13. 13. 13 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Problème Solution List< String > confs2 = Arrays.asList( "jug", "devoxx", "javaone", null ); map( s -> s.toUpperCase(), confs2); // Exception in thread "main" java.lang.NullPointerException Function< String, String > nullCheck( Function< String, String > f ) { return (String s) -> s == null ? "null" : f.apply(s); } Null Combinator Résultat map( nullCheck(s -> s.toUpperCase()), confs2) // [JUG, DEVOXX, JAVAONE, null]
  14. 14. 14 Composition Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Définition “Combine plusieurs fonctions pour créer une nouvelle fonction”
  15. 15. 15 Twitter: @ychartois – Github: https://github.com/ychartois/ProgFoncJava8 Code Résultat Function<String, String> compose ( Function<String, String> f1, Function<String, String> f2 ){ return (String s) -> f1.apply( f2.apply(s) ); } Function<String, String> up = (String s) -> s.toUpperCase(); Function<String, String> hello = (String s) -> "hello " + s; up.apply( hello.apply("Erouan") ); compose( up, hello).apply("Erouan") ; // HELLO EROUAN Java 8 hello.andThen(up).apply("Erouan")
  16. 16. 16 Twitter: @ychartois Github: https://github.com/ychartois/ProgFoncJava8

×