From 8c24b2e237d5f8d7f617ca0084db9064e853112b Mon Sep 17 00:00:00 2001 From: Rafael Ruiz Date: Tue, 11 Apr 2017 17:06:46 +0200 Subject: [PATCH 1/3] more examples in HigherOrderFunctions --- src/main/scala/stdlib/HigherOrderFunctions.scala | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/scala/stdlib/HigherOrderFunctions.scala b/src/main/scala/stdlib/HigherOrderFunctions.scala index ed6a85e3..58ec63ec 100644 --- a/src/main/scala/stdlib/HigherOrderFunctions.scala +++ b/src/main/scala/stdlib/HigherOrderFunctions.scala @@ -145,7 +145,8 @@ object HigherOrderFunctions def functionAsParameterHigherOrderFunctions( res0: List[String], res1: List[String], - res2: List[Int]) { + res2: List[String], + res3: List[Int]) { def makeUpper(xs: List[String]) = xs map { _.toUpperCase } @@ -154,15 +155,17 @@ object HigherOrderFunctions xs map sideEffect makeUpper(List("abc", "xyz", "123")) should be(res0) - + makeWhatEverYouLike(List("ABC", "XYZ", "123"), { x ⇒ x.toLowerCase }) should be(res1) + //using it inline - List("Scala", "Erlang", "Clojure") map { - _.length - } should be(res2) + val myName = (name: String) => s"My name is $name" + makeWhatEverYouLike(List("John", "Mark"), myName) should be(res2) + + List("Scala", "Erlang", "Clojure") map (_.length) should be(res3) } } From ce819fe06bc27bad35968d5016d4e283224b56cb Mon Sep 17 00:00:00 2001 From: yaskier Date: Tue, 11 Apr 2017 17:32:50 +0200 Subject: [PATCH 2/3] edit online feature is the #1 enemy of TDD --- src/main/scala/stdlib/HigherOrderFunctions.scala | 5 ++--- src/test/scala/stdlib/HigherOrderFunctionsSpec.scala | 3 ++- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/scala/stdlib/HigherOrderFunctions.scala b/src/main/scala/stdlib/HigherOrderFunctions.scala index 58ec63ec..ca006dfd 100644 --- a/src/main/scala/stdlib/HigherOrderFunctions.scala +++ b/src/main/scala/stdlib/HigherOrderFunctions.scala @@ -155,16 +155,15 @@ object HigherOrderFunctions xs map sideEffect makeUpper(List("abc", "xyz", "123")) should be(res0) - + makeWhatEverYouLike(List("ABC", "XYZ", "123"), { x ⇒ x.toLowerCase }) should be(res1) - //using it inline val myName = (name: String) => s"My name is $name" makeWhatEverYouLike(List("John", "Mark"), myName) should be(res2) - + List("Scala", "Erlang", "Clojure") map (_.length) should be(res3) } diff --git a/src/test/scala/stdlib/HigherOrderFunctionsSpec.scala b/src/test/scala/stdlib/HigherOrderFunctionsSpec.scala index 0e52513c..268e19fb 100644 --- a/src/test/scala/stdlib/HigherOrderFunctionsSpec.scala +++ b/src/test/scala/stdlib/HigherOrderFunctionsSpec.scala @@ -80,7 +80,8 @@ class HigherOrderFunctionsSpec extends Spec with Checkers { Test .testSuccess( HigherOrderFunctions.functionAsParameterHigherOrderFunctions _, - List("ABC", "XYZ", "123") :: List("abc", "xyz", "123") :: List(5, 6, 7) :: HNil + List("ABC", "XYZ", "123") :: List("abc", "xyz", "123") :: + List("My name is John", "My name is Mark") :: List(5, 6, 7) :: HNil ) ) } From 9f17df4eaecbae0443b2dca039c6192cab285dfd Mon Sep 17 00:00:00 2001 From: yaskier Date: Tue, 11 Apr 2017 17:51:58 +0200 Subject: [PATCH 3/3] slightly better explanation of what a Higher Order Function is --- src/main/scala/stdlib/HigherOrderFunctions.scala | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/scala/stdlib/HigherOrderFunctions.scala b/src/main/scala/stdlib/HigherOrderFunctions.scala index ca006dfd..c3a83cfd 100644 --- a/src/main/scala/stdlib/HigherOrderFunctions.scala +++ b/src/main/scala/stdlib/HigherOrderFunctions.scala @@ -86,7 +86,10 @@ object HigherOrderFunctions result2 should be(res1) } - /** We can take that closure and throw it into a method and it will still hold the environment: + /** And then we get to Higher Order Functions: + * Higher Order Functions are functions that take functions as arguments and/or return functions. + * + * We can take that closure and throw it into a Higher Order Function and it will still hold the environment: */ def holdEnvironmentHigherOrderFunctions(res0: Int, res1: Int) { def summation(x: Int, y: Int ⇒ Int) = y(x) @@ -102,7 +105,7 @@ object HigherOrderFunctions result2 should be(res1) } - /** Function returning another function: + /** Higher Order Function returning another function: */ def returningFunctionHigherOrderFunctions(res0: Boolean, res1: Int, res2: Int) { def addWithoutSyntaxSugar(x: Int): Function1[Int, Int] = {