Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Chaining operations on values without naming intermediate values

Sometimes I perform a sequence of computations gradually transforming some value, like:

def complexComputation(input: String): String = {
  val first = input.reverse
  val second = first + first
  val third = second * 3
  third
}

Naming variables is sometimes cumbersome and I would like to avoid it. One pattern I am using for this is chaining the values using Option.map:

def complexComputation(input: String): String = {
  Option(input)
    .map(_.reverse)
    .map(s => s + s)
    .map(_ * 3)
    .get
}

Using Option / get however does not feel quite natural to me. Is there some other way this is commonly done?

like image 727
Suma Avatar asked Mar 06 '19 10:03

Suma


1 Answers

Actually, it will be possible with Scala 2.13. It will introduce pipe:

import scala.util.chaining._

input //"str"
 .pipe(s => s.reverse) //"rts"
 .pipe(s => s + s) //"rtsrts"
 .pipe(s => s * 3) //"rtsrtsrtsrtsrtsrts"

Version 2.13.0-M1 is already released. If you don't want to use the milestone version, maybe consider using backport?

like image 162
Krzysztof Atłasik Avatar answered Oct 05 '22 22:10

Krzysztof Atłasik