Scala 速通语法(三)| 函数相关
作者:互联网
函数
基本语法
def 函数名 ([参数名: 参数类型], ...)[[: 返回值类型] =] {
语句...
return 返回值
}
//[参数名: 参数类型], ...:表示函数的输入(就是参数列表), 可以没有。 如果有,多个参数使用逗号间隔
//函数中的语句:表示为了实现某一功能代码块
//函数可以有返回值,也可以没有
//返回值形式 1: : 返回值类型 =
//返回值形式 2: = 表示返回值类型不确定,使用类型推导完成
//返回值形式 3: 表示没有返回值,return 不生效
//如果没有 return ,默认以执行到最后一行的结果作为返回值
- 例
object FunDemo01 {
def main(args: Array[String]): Unit = {
val n1 = 10 val n2 = 20
println("res=" + getRes(1, 2, ')'))
}
//定义函数/方法
def getRes(n1: Int, n2: Int, oper: Char) = {
if (oper == '+') {
n1 + n2 //返回
} else if (oper == '-') {
n1 - n2
} else {
//返回 null
null
}
}
}
函数细节
函数的形参列表可以是多个, 如果函数没有形参,调用时可以不带()
形参列表和返回值列表的数据类型可以是值类型和引用类型
Scala 中的函数可以根据函数体最后一行代码自行推断函数返回值类型,那么在这种情况下,return 关键字可以省略
因为 Scala 可以自行推断,所以在省略 return 关键字的场合,返回值类型也可以省略
如果函数明确使用 return 关键字,那么函数返回就不能使用自行推断了,这时要明确写成 : 返回类型 = ,当然如果你什么都不写,即使有 return 返回值为()
如果函数明确声明无返回值(声明 Unit),那么函数体中即使使用 return 关键字也不会有返回值
如果明确函数无返回值或不确定返回值类型,那么返回值类型可以省略(或声明为Any)
Scala 语法中任何的语法结构都可以嵌套其他语法结构(灵活)
即:函数中可以再声明/定义函数,类中可以再声明类,方法中可以再声明/定义方法
Scala 函数的形参,在声明参数时,直接赋初始值(默认值),这时调用函数时,如果没有指定实参,则会使用默认值。如果指定了实参,则实参会覆盖默认值
如果函数存在多个参数,每一个参数都可以设定默认值,那么这个时候,传递的参数到底是覆盖默认值,还是赋值给没有默认值的参数,就不确定了(默认按照声明顺序[从左到右])。在这种情况下,可以采用带名参数
如果我们希望指定覆盖某个默认值,则使用带名参数即可,比如修改用户名和密码
递归函数未执行之前是无法推断出来结果类型,在使用时必须有明确的返回值类型
Scala 函数支持可变参数 可变参数要放到最后
//支持 0 到多个参数
def sum(args :Int*) : Int = {
}
//支持 1 到多个参数
def sum(n1: Int, args: Int*) : Int = {
}
惰性函数
- 可以将耗时的计算推迟到绝对需要的时候
- 当函数返回值被声明为lazy 时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。这种函数我们称之为惰性函数,在Java 的某些框架代码中称之为懒加载(延迟加载)
- lazy 不能修饰var 类型的变量
- 在调用函数时,加了 lazy ,会导致函数的执行被推迟
- 在声明一个变量时,如果给声明了 lazy ,那么变量值得分配也会推迟。 比如 lazy val i = 10
异常
object ScalaExceptionDemo {
def main(args: Array[String]): Unit = {
try {
val r = 10 / 0
} catch {
//说明
//1. 在 scala 中只有一个 catch
//2. 在 catch 中有多个 case, 每个 case 可以匹配一种异常 case ex: ArithmeticException
//3. => 关键符号,表示后面是对该异常的处理代码块
//4. finally 最终要执行的
case ex: ArithmeticException=> {
println("捕获了除数为零的算数异常")
}
case ex: Exception => println("捕获了异常")
} finally {
// 最终要执行的代码
println("scala finally...")
}
println("ok,继续执行~~~~~")
}
}
标签:return,函数,Scala,语法,参数,类型,返回值,默认值,速通 来源: https://www.cnblogs.com/zhy-god/p/14804733.html