用功能代码替换if-else

MyT*_*tle 6 functional-programming scala pattern-matching

我知道在功能样式中所有if-else块都被模式匹配所取代.但是我如何处理MapScala中的模式匹配?例如,我如何以更多功能样式重写此代码?

  val myMap= getMap()
  if(myMap.contains(x) && myMap.contains(y)) Some(myMap(x) + myMap(y))
    else if(myMap.contains(x + y)){
      val z = myMap(x + y)
      if (z % 2 == 0) Some(z)
      else None
    }
    else None
Run Code Online (Sandbox Code Playgroud)

zig*_*tar 20

使用if-else对于函数式编程是完全可以接受的,因为if-else在Scala中它只是一个表达式.决定if-else和模式匹配的原因应该主要集中在提高可读性上.

这是我尝试重写代码.我实际上并没有在这里使用模式匹配,而是用于for理解值的理解.

def sumOfValues = for{
  mx <- myMap.get(x)
  my <- myMap.get(y)
} yield mx + my

def valueOfSumIfEven = myMap.get(x+y).filter(_ % 2 == 0) 

sumOfValues orElse valueOfSumIfEven
Run Code Online (Sandbox Code Playgroud)