使用scala模式匹配而不是java切换大小写有什么好处?

问题描述 投票:10回答:5

每个人都说模式匹配是功能语言中的一个很棒的功能。为什么?

我不能简单地使用ifs并切换所有内容的大小写吗?

我想了解使用模式匹配而不是常规过程编程ifs和switch case的优势

java scala functional-programming pattern-matching
5个回答
23
投票

我首先要注意的是,您不会使用模式匹配来代替switch语句。 Scala没有switch语句,它具有的是match块,其内部的情况从表面上看与switch语句非常相似。

具有模式匹配的匹配块可以完成switch的所有工作,以及更多。

A)不仅仅限于Oracle选择在语言规范中“祝福”的原语和其他类型。(字符串和枚举)。如果您想根据自己的类型进行匹配,请继续!

B)模式匹配也可以提取。例如,使用元组:

val tup = ("hello world", 42)
tup match {
  case (s,i) =>
    println("the string was " + s)
    println("the number was " + i
}

带有列表:

val xs = List(1,2,3,4,5,6)
xs match {
  case h :: t =>
    // h is the head: 1
    // t is the tail: 2,3,4,5,6
    // The :: above is also an example of matching with an INFIX TYPE
}

带有案例类

case class Person(name: String, age: Int)
val p = Person("John Doe", 42)
p match {
  case Person(name, 42) =>
    //only extracting the name here, the match would fail if the age wasn't 42
    println(name)
}

C]模式匹配可用于值赋值和理解],而不仅限于匹配块:

val tup = (19,73)

val (a,b) = tup

for((a,b) <- Some(tup)) yield a+b // Some(92)

D)匹配块是表达式,而不是语句

这意味着他们对匹配的任何一个案例的主体都进行评估,而不是完全通过副作用来行动。这对于函数式编程至关重要!

val result = tup match { case (a,b) => a + b }
    

6
投票

以某种方式我对@KevinWright答案的编辑/添加被扔掉了,所以我将其添加为另一个更好的模式匹配功能...


3
投票

模式匹配


2
投票

正如在其他答案中所写的那样,Scala模式匹配和Java切换不会产生相同的效果。


0
投票

JMPL是简单的Java库,可以使用Java 8功能来模拟某些功能模式匹配。

© www.soinside.com 2019 - 2024. All rights reserved.