在编程世界中,选择结构是我们每天都要面对的基础工具。但Scala的match-case模式匹配,将这一基础工具提升到了艺术的高度,让代码既简洁又强大。
第一式:基础匹配,替代繁琐的 If-Else
首先,最简单的用法就是替代 if-else,处理简单的键值映射。
package matchcase
object case01 {
/*三大结构
顺序 选择
(1)if,if else if else:
(2)match case
match case
循环结构
for ,while, do...while
*/
def main(args: Array[String]): Unit = {
// val code = "42"
// var province = ""
// if(code == "42" ) {
// province = "湖北"
// } else if(code == "11") {
// province = "北京"
// } else {
// private = "未知"
// }
//
//
val code = "11"
val province = code match {
case "42" => "湖北"
case "11" => "北京"
case _ => "未知"
}
println(s"${code} 对应的省份是:${province}")
}
}
第二式:类型匹配与用户交互
match-case 不仅能匹配字符串,还能匹配数字、甚至类型。我们可以结合 scala.io.StdIn 来做一个简单的交互式程序。
package matchcase
import scala.io.StdIn
object case012 {
/*三大结构
顺序 选择
(1)if,if else if else:
(2)match case
match case
循环结构
for ,while, do...while
*/
def main(args: Array[String]): Unit = {
// 1. 提示用户输入,并读取控制台输入的数字(转为Int类型)
println("请输入一个1-5之间的整数:")
val num = StdIn.readInt()
// 2. 使用match case模式匹配,匹配数字对应的英文单词
val englishWord = num match {
case 1 => "one"
case 2 => "two"
case 3 => "three"
case 4 => "four"
case 5 => "five"
// 处理非1-5的输入,避免匹配失败报错
case _ => "输入错误!请输入1-5之间的整数"
}
// 3. 正确使用字符串插值输出结果(修复你代码中的插值错误)
println(s"${num} 对应的英文是:${englishWord}")
}
}
第三式:高阶玩法——结构化模式匹配
这才是 match-case 真正的特性
package matchcase
import scala.io.StdIn
object case013 {
/*
match case 高阶匹配
1.匹配元组不同的数量
2.匹配数组特殊值
*/
def main(args: Array[String]): Unit = {
//元组
val t1 = (2,3)
val t2 = (2,3,4)
val t3 = (2,3,5,6)
t1 match {
case (a,b) => println(s"有两个元素${a},${b}")
case _ => println("未知")
}
val arr1 = Array(10,2)
arr1 match {
case Array(1,x,y) => println("数组,第一个元素是1,长度为3")
case Array(10,x) => println("数组,第一个元素是10,长度为2")
case _ => println("其他")
}
}
}
总结
通过这三个例子,我们可以看到 Scala 的 match-case 远比 Java 的 switch 强大:
1. 全能: 它可以匹配值、类型、null 以及复杂的结构(数组、元组、列表)。
2. 数据解构: 它不仅能判断“是不是”,还能把数据里的内容“掏出来”用。
3.代码洁癖: 使用 match-case 可以大大减少 if-else 的嵌套,让逻辑一目了然。