Top Banner
Practical Scala HOF
16

Scala Higher Order Functions

May 11, 2015

Download

Technology

raulraja

A basic intro to HOF's for Scala newcomers, Part of the Betabeers series
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
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

...