文章目录
条件表达式
条件表达式就是 if 表达式,if 表达式可以根据给定的条件是否满足,根据条件的结果(true or false)决定执行对应的操作。Scala条件表达式的语法和Java一样。
有返回值的 if
与Java不一样的是:
- 在Scala中,条件表达式也是有返回值的。
- 在Scala中,没有三元表达式,可以使用 if 表达式替代三元表达式。
示例:
定义一个变量sex,再定义一个result变量,如果sex等于"male",result等于1,否则result等于0
参考代码:
val sex = "male"
val result = if (sex == "male") 1 else 0
块表达式
- Scala中,使用 {} 表示一个块表达式
- 和 if 表达式一样,块表达式也是有值的
- 值就是最后一个表达式的值
问题:请问一下代码,变量a的值是什么?
val a = {
println("1+1")
1+1
}
循环
在Scala中,可以使用 for 循环和 while 循环,但一般推荐使用 for 循环,因为 for 表达式语法更简洁。
for 循环
语法:
for(i <- 表达式/数组/集合) {
// 表达式
}
示例:使用for表达式打印1-10的数字
参考代码:
val nums = 1.to(10)
for (i <- nums) println(i)
注:生成1~10的数字可以使用 to 方法
以上代码的简写方式如下:
for(i <- 1 to 10) println(i) //中缀调用法
嵌套循环
示例:使用for表达式,打印以下字符
*****
*****
*****
参考代码:
for (i <- 1 to 3; j <- 1 to 5) {print("*");if (j == 5) println("")}
//外循环控制行,内循环控制列
守卫
for 表达式中,可以添加 if 判断语句,这个 if 判断就称之为守卫。我们可以使用守卫让 for 表达式更简洁。
语法:
for(i <- 表达式/数组/集合 if 表达式) {
// 表达式
}
示例:使用 for 循环打印1-10之间能够被3整除的数字
参考代码:
for (i <- 1 to 10) if (i % 3 == 0) println(i) // 3 6 9
for 推导式
在 for 循环体中,可以使用 yield 表达式构建出一个集合(一组数据),我们把使用 yield 的 for 表达式称之为推导式。
示例:生成一个10、20、30…100的集合。
参考代码:
val result = for (i <- 1 to 10) yield i * 10
println(result) //Vector(10, 20, 30, 40, 50, 60, 70, 80, 90, 100)
while 循环
Scala中 while 循环和 Java 中是一致的
示例:打印1-10的数字
参考代码:
var num = 1
while(num <= 10) {
println(num)
num = num + 1
}
Break & Continue
在 Scala 中,类似 Java 和 C++ 的 break/continue 关键字被移除了,如果一定要使用 break/continue,就需要使用 scala.util.control 包的 Break 类的breable和break方法。
实现Break
用法:
- 导入Breaks包
import scala.util.control.Breaks._
- 使用breakable将for表达式包起来
- for表达式中需要退出循环的地方,添加
break()
方法调用
示例:使用for表达式打印1-100的数字,如果数字到达50,退出for表达式
参考代码:
import scala.util.control.Breaks._
breakable {
for (i <- 1 to 100) {
if (i > 50) break()
else println(i)
}
}
实现Continue
用法:Continue 的实现与 Break 类似,但有一点不同:实现break是用 breakable{}
将整个for表达式包起来,而实现continue是用breakable{}
将 for 表达式的循环体包起来。
示例:打印1-100的数字,使用for表达式来遍历,如果数字能被10整除,则不打印。
参考代码:
import scala.util.control.Breaks._
for (i <- 1 to 100) {
breakable {
if (i % 10 == 0) break()
println(i)
}
}
方法
一个类可以有自己的方法,Scala中的方法和Java中的方法类似。但Scala与Java定义方法的语法是不一样的。
方法的定义
语法:
def methodName (参数名:参数类型, 参数名:参数类型) : [return type] = {
// 方法体:一系列的代码
}
注:
- 参数列表的参数类型不能省略;
- 返回值类型可以省略,由Scala编译器自动推断;
- 返回值可以不写
return
,默认就是{}
块表达式的值。
示例:
- 定义一个方法,实现两个整形数值相加,返回相加后的结果;
- 调用该方法。
参考代码:
def sum(a: Int, b: Int): Unit = {
println(a + b)
}
sum(1, 2)
返回值类型推断
Scala定义方法可以省略返回值,由Scala自动推断返回值的类型,使方法的定义更加简洁。
注:定义递归方法时不能省略返回值类型。
示例:定义递归方法,求阶乘。
参考代码:
def recursion(x: Int): Int = {
if (x == 1) 1
else recursion(x - 1) * x
}
recursion(5)
方法参数
Scala中的方法参数使用比较灵活,它支持以下几种类型的参数:默认参数、带名参数、变长参数。
默认参数
在定义方法时可以给参数定一个默认值。
示例:
- 定义一个计算两个值相加的方法,这两个值默认为0;
- 调用该方法,不传任何参数。
参考代码:
def sum(a: Int = 0, b: Int = 0) = {
a + b
}
sum()
带名参数
在调用方法时,可以指定参数名来进行调用。
示例:
- 定义一个计算两个值相加的方法,这两个值默认为0;
- 调用该方法,只设置第一个参数的值。
参考代码:
def sum(a: Int = 0, b: Int = 0) = {
a + b
}
sum(a = 1)
变长参数
如果方法的参数不是固定的,那么可以将这个方法的参数定义为变长参数。
语法:
def 方法名(参数名:参数类型*):返回值类型 = {
方法体
} //在参数类型后面加一个 * ,表示参数可以是0个或多个
示例:
- 定义一个计算若干个值相加的方法;
- 调用该方法,并传入以下参数:1,2,3,4,5
参考代码:
def sum(a:Int*):Int = a.sum
sum(1,2,3,4,5)
方法的调用方式
在Scala中,有如下几种调用方式:后缀调用法、中缀调用法、花括号调用法、无括号调用法。
后缀调用法
这种方式和Java一样。
语法:
对象名.方法名(参数)
示例:使用后缀Math.abs
求绝对值。
参考代码:
Math.abs(-11)
中缀调用法
语法:
对象名 方法名 参数
示例:使用中缀调用法Math.abs
求绝对值。
参考代码:
Math abs -11
花括号调用法
语法:
Math.abs{
// 表达式1
// 表达式2
}
注:方法只有一个参数,才能使用花括号调用法。
示例:使用花括号调用法Math.abs
求绝对值。
参考代码:
Math.abs{-10}
无括号调用法
如果方法没有参数,可以省略方法名后面的括号。
示例:
- 定义一个无参数的方法,打印
hello
; - 使用无括号调用法调用该方法。
参考代码:
def method = println("hello")
method