(三)控制结构和函数2
作者:互联网
/**
* if else 无三元运算符
*/
val x = 8
val s = if (x > 0) 1 else -1
//############################################################
/**
* while
* 不能直接break
* 1.通过boolean型的控制变量
* 2.使用嵌套函数,从函数中return
* 3.使用Breaks对象的break方法(直接抛出异常,后续代码不能执行)
*/
import scala.util.control.Breaks
var n = 10
while (n > 0) {
n -= 1
println(n)
if (n <= 5) {
// Breaks.break()
}
}
//############################################################
/**
* for
* 生成器表达式: 变量名 <- 集合
*/
for (i <- 1 to 3) {
println(i)
}
for (i <- 1 to 3; j <- 1 to 3) {
println(10 * i + j)
}
for (i <- 1 to 3; j <- 1 to 3 if i != j) {
println(10 * i + j)
}
//for 推导式可以引入变量
for (i <- 1 to 3; aa = 4 - i) println(aa)
//需要返回值用yield关键字
for (i <- 1 to 10) yield i * 3
//############################################################
/**
* 函数
*/
//def 函数名 (参数名: 类型) [:返回类型] = 函数体
def abs(x: Double) = if (x >= 0) x else -x
//相当于下面
def abs2(x: Double) = {
if (x >= 0) {
x
} else {
-x
}
}
abs(-8)
abs2(-8)
//递归函数(n的阶乘)
//递归一定要指明函数返回类型
def recursiveFac(n: Int): Int =
if (n <= 0) 1 else n * recursiveFac(n - 1)
recursiveFac(5)
//函数参数默认值
def descorate(str: String = "default") =
str
descorate()
descorate("bb")
//变长参数
//return 可以终结函数,但是需要指定函数返回类型
//变长参数通过*来指定,所有参数会转化为一个seq序列
def sum(args: Int*): Int = {
if (args.size == 3) {
return 0
}
var result = 0
for (arg <- args) result += arg
result
}
sum(3, 2, 1, 0)
sum(3, 2, 1)
//############################################################
/**
* 过程
* 不返回值得函数叫过程,返回类型是Unit,它是没有等号(=)的
*/
def box(s: String): Unit = {
println(s)
}
//或者不写:Unit=
def box2(s: String) {
println(s)
}
box("aaa")
//############################################################
/**
* 异常
* 并不像Java代码那样,需要声明方法会抛出异常
* Throw的类型为Nothing,存在exception的if语句返回类型,Nothing类型在Scala的类层级的最低端 ; 它是任何其他类型的子类型 。
*/
def devide(x: Int, y: Int): Int = {
if (y == 0) throw new ArithmeticException("Devide by zero")
else x / y
}
//devide(5, 0)
try {
devide(5, 0)
} catch {
case ex: IndexOutOfBoundsException => println("1", ex)
case ex: ArithmeticException => println("2", ex)
case ex: Exception => println("3", ex)
} finally {
println("finally!")
}
devide(5, 1)
标签:函数,val,Breaks,控制结构,else,ex,println 来源: https://blog.csdn.net/qq_31024823/article/details/89952363