scala higher order functions

16
Practical Scala HOF

Upload: raulraja

Post on 11-May-2015

228 views

Category:

Technology


1 download

DESCRIPTION

A basic intro to HOF's for Scala newcomers, Part of the Betabeers series

TRANSCRIPT

Page 1: Scala Higher Order Functions

Practical ScalaHOF

Page 2: Scala Higher Order Functions

Who am [email protected]

Scala, Java, Objective-C

Page 3: Scala Higher Order Functions

1. HOF Higher Order FunctionsA function that takes a function as argument

or returns another functione.g. map & filter

Page 4: Scala Higher Order Functions

map transforms data

Page 5: Scala Higher Order Functions

map sadness to happiness

:( :( :( => :) :) :)

Page 6: Scala Higher Order Functions

map sadness to happiness - JAVA

public List<String> mapSadnessToHappiness (List<String> sadness) {

List<String> happiness = new ArrayList<String>(sadness.size()); for (int i = 0; i < sadness.size(); i++) { String sadFace = sadness.get(i); String happyFace = sadFace.replace('(', ')'); happiness.add(happyFace); } return happiness;

} List<String> sadness = Arrays.asList(":(", ":(", ":("); List<String> happiness = mapSadnessToHappiness(sadness);

Page 7: Scala Higher Order Functions

map sadness to happiness - Scala

List(":(", ":(", ":(").map(face => face.replace('(', ')'))

Page 8: Scala Higher Order Functions

map sadness to happiness - Scala

List(":(", ":(", ":(").map(_.replace('(', ')'))

Page 9: Scala Higher Order Functions

filter remove the unwanted

Page 10: Scala Higher Order Functions

filter sadness keeping happiness

:) :) :( => :) :)

Page 11: Scala Higher Order Functions

filter sadness keeping happiness

List(":)", ":)", ":(").filter(_.contains(":)"))

Page 12: Scala Higher Order Functions

Idiomatic TransformationsCount char occurrences on a String - JAVA

public static int countCharOccurrences(String haystack, char needle) { int count = 0; for (int i = 0; i < haystack.length(); i++) { if (haystack.charAt(i) == needle) { count++; } } return count; }

public static Map<Character, Integer> toCharOccurrenceMap(String haystack) { Map<Character, Integer> map = new HashMap<Character, Integer>(); if (haystack != null) { for (int i = 0; i < haystack.length(); i++) { char character = haystack.charAt(i); int count = countCharOccurrences(haystack, character); map.put(character, count); } } return map; }

toCharOccurrenceMap("betabeers");

Page 13: Scala Higher Order Functions

Idiomatic TransformationsCount char occurrences on a String

"betabeers" groupBy identity mapValues (_.size)

Page 14: Scala Higher Order Functions

Key differentiatorHigher Order Functions help with most Collection problems that you usually solve by looping over and manually creating

intermediate containers. Transformed results stay immutable and thread safe.

No need to reinvent the wheel.Code becomes readable and idiomatic

"betabeers" groupBy identity mapValues (_.size)

Page 15: Scala Higher Order Functions

Other Powerful HOF’s examples

Sum(1 to 1000).reduceLeft( _ + _ )

(1 to 1000).sum

Partition filterval (passed, failed) = List(49, 58, 88, 90) partition ( _ > 60 )

minList(14, 35, -7, 46, 98).min

maxList(14, 35, -7, 46, 98).max

Imperative iteration(1 to 10) foreach (println)

Parallel Collections(1 to 10).par foreach(_ => println(Thread.currentThread.getName))

Page 16: Scala Higher Order Functions

Become a Scala Master

For comprehensionsCase Classes

FuturesOptionsTraitsEither

Pattern MatchingMonadsActorsDSL’s

...