scala higher order functions
DESCRIPTION
A basic intro to HOF's for Scala newcomers, Part of the Betabeers seriesTRANSCRIPT
![Page 1: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/1.jpg)
Practical ScalaHOF
![Page 3: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/3.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/4.jpg)
map transforms data
![Page 5: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/5.jpg)
map sadness to happiness
:( :( :( => :) :) :)
![Page 6: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/6.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/7.jpg)
map sadness to happiness - Scala
List(":(", ":(", ":(").map(face => face.replace('(', ')'))
![Page 8: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/8.jpg)
map sadness to happiness - Scala
List(":(", ":(", ":(").map(_.replace('(', ')'))
![Page 9: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/9.jpg)
filter remove the unwanted
![Page 10: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/10.jpg)
filter sadness keeping happiness
:) :) :( => :) :)
![Page 11: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/11.jpg)
filter sadness keeping happiness
List(":)", ":)", ":(").filter(_.contains(":)"))
![Page 12: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/12.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/13.jpg)
Idiomatic TransformationsCount char occurrences on a String
"betabeers" groupBy identity mapValues (_.size)
![Page 14: Scala Higher Order Functions](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/14.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/15.jpg)
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](https://reader033.vdocument.in/reader033/viewer/2022052321/554f930eb4c9052a518b54b6/html5/thumbnails/16.jpg)
Become a Scala Master
For comprehensionsCase Classes
FuturesOptionsTraitsEither
Pattern MatchingMonadsActorsDSL’s
...