条件语句
if 语句
if 语句用于测试某个条件是否为真,如果条件为真,则执行大括号 {}
中的代码,否则不执行,示例如下:
1val num = 10
2if (num > 0) {
3 println("Number is positive")
4}
5// Expected output:
6// Number is positive
if-else 语句
if-else 语句用于当 if 条件测试结果为假时执行另一部分代码,示例如下:
1val num = -10
2if (num > 0) {
3 println("Number is positive")
4} else {
5 println("Number is non-positive")
6}
7// Expected output:
8// Number is non-positive
if-else if-else 语句
可以在 if-else 语句中添加多个 else if 语句,示例如下:
1val num = 0
2if (num > 0) {
3 println("Number is positive")
4} else if (num < 0) {
5 println("Number is negative")
6} else {
7 println("Number is zero")
8}
9// Expected output:
10// Number is zero
条件表达式
在 Scala 中,if-else 语句也可以用作表达式,称作条件表达式,也就是说 if-else 语句也可以有返回值,示例如下:
1val num = 10
2val result = if (num % 2 == 0) "Even" else "Odd"
3println(result) // Even
在上面的示例中,if-else 表达式根据 num 是偶数还是奇数返回 “Even” 或 “Odd” 字符串。
循环语句
while 循环
一个使用 while 循环实现求最大公约数的示例如下:
1def gcd(x: Long, y: Long): Long = {
2 var a = x
3 var b = y
4 while (a != 0) {
5 val temp = a
6 a = b % a
7 b = temp
8 }
9 b
10}
do-while 循环
一个用 do-while 循环实现不断读入控制台输入并打印的示例如下:
1import scala.io.StdIn.readLine
2
3object Main extends App {
4 var line = ""
5 do {
6 line = readLine("Enter a line: ")
7 println(s"Read line: $line")
8 } while (line != "")
9}
for 循环
for 循环可以用于迭代集合、数组、字符串等。以下是一个简单的示例:
1val nums = List(1, 2, 3, 4, 5)
2for (num <- nums) {
3 println(num)
4}
5// Expected output:
6// 1
7// 2
8// 3
9// 4
10// 5
使用条件过滤:
1val nums = List(1, 2, 3, 4, 5)
2for (num <- nums if num % 2 == 0) {
3 println(num) // 打印偶数
4}
5// Expected output:
6// 2
7// 4
在 for 循环中使用多个生成器:
1val nums = List(1, 2, 3)
2val chars = List('a', 'b', 'c')
3for (
4 num <- nums;
5 char <- chars
6) {
7 println(s"$num$char")
8}
9// Expected output:
10// 1a
11// 1b
12// 1c
13// 2a
14// 2b
15// 2c
16// 3a
17// 3b
18// 3c
使用 yield
关键字遍历并处理集合中的每个元素并生成一个新的集合,例如打印一个集合中的每个数字的平方:
1val nums = List(1, 2, 3, 4, 5)
2val squares = for (num <- nums) yield num * num
3println(squares)
4// Expected output:
5// List(1, 4, 9, 16, 25)
- 在 for 循环中使用
{}
代码块通常是为了循环的副作用,例如输出到控制台。 - 在函数式编程中,使用
yield
关键字生成一个新的集合是非常常见的操作。
match 语句
Scala 的 match
语句类似于其他编程语言中的 switch
语句,但更加灵活。使用 match
,你可以根据表达式的值匹配一系列情况(case
),并执行相应的代码块。Scala 的 match
表达式还支持模式匹配,也就是说它能够根据数据的结构来选择代码分支。
在 Scala 中,match
语句的基本语法如下:
1expression match {
2 case pattern1 => result1
3 case pattern2 => result2
4 case pattern3 => result3
5 case _ => defaultResult
6}
在上面的例子中,expression
是要匹配的值,pattern1
、pattern2
和 pattern3
是匹配模式,result1
、result2
和 result3
是匹配成功时返回的结果,defaultResult
是所有模式都匹配失败时返回的结果。
一个简单的 match 语句示例如下:
1val num = 3
2val result = num match {
3 case 1 => "one"
4 case 2 => "two"
5 case 3 => "three"
6 case _ => "other"
7}
8println(result) // three
异常处理
在 Scala 2 中,异常处理与 Java 非常相似,它们都使用 try
、catch
和 finally
代码块来捕获和处理异常。Scala 异常处理相比于 Java 一个关键区别是 catch
代码块使用模式匹配来处理不同的异常类型。
基本语法
1try {
2 // Protected code block
3 // Code that might throw an exception
4} catch {
5 // Handling exceptions
6 case ex: NullPointerException => // Handle null pointer exception
7 case ex: ArithmeticException => // Handle arithmetic exception
8 case _ => // Handle all other exceptions
9} finally {
10 // Cleanup code
11 // Code that executes regardless of whether an exception occurred
12}
下面是一个具体的示例:
1def divide(a: Int, b: Int): Int = {
2 try {
3 a / b
4 } catch {
5 case e: ArithmeticException => {
6 println("An arithmetic exception occurred")
7 0 // Return a default value
8 }
9 } finally {
10 println("Division operation completed")
11 }
12}
13
14val result = divide(10, 0) // Attempt to divide by 0
15println(s"The result is: $result")
16// Expected output:
17// An arithmetic exception occurred
18// Division operation completed
19// The result is: 0
上面示例展示了在除法运算中如何捕获算术异常 ArithmeticException
,并在异常发生时返回默认值 0
。无论是否触发异常,finally
代码块始终都会被执行,用于资源清理等后续操作。
省略 finally 代码块
在 Scala 中,finally
代码块是可选的。如果只想捕获异常而不需要执行清理代码,则可以省略 finally
代码块。例如:
1def divide(a: Int, b: Int): Int = {
2 try {
3 a / b
4 } catch {
5 case e: ArithmeticException => {
6 println("An arithmetic exception occurred")
7 0 // Return a default value
8 }
9 }
10}
11
12val result = divide(10, 0) // Attempt to divide by 0
13println(s"The result is: $result")
14// Expected output:
15// An arithmetic exception occurred
16// The result is: 0
使用 throw 抛出异常
与 Java 一样,Scala 也使用 throw
关键字抛出异常,示例如下:
1def checkAge(age: Int): Unit = {
2 if (age < 18) {
3 throw new IllegalArgumentException("Age must be at least 18")
4 }
5 println("Validation passed")
6}
总结
- 相比于 Java,Scala 中没有提供 continue 和 break 关键字。