scala学习笔记(函数式编程1)

函数式编程基础 函数定义/声明 函数运行机制 递归//难点 [最短路径,邮差问题,迷宫问题, 回溯] 过程 惰性函数和异常
函数式编程高级 值函数(函数字面量) 高阶函数 闭包 应用函数 柯里化函数,抽象控制…

函数返回值问题

  1. scala函数可以根据函数体最后一行代码自动推断出返回值类型(return 可以省略)
    def fun (n1:Int):Int = n1
  2. 在return省略的情况下,返回值类型也可以省略
    def fun (n1:Int)=n1
  3. 如果函数中已经明确使用了return,返回值类型必须要写,如果不写,则表示函数没有返回值,只能返回(),
  4. 如果函数明确声明无返回值,则有return也不会有返回值
  5. 如果明确函数无返回值或不确定返回值类型,那么返回值类型可以省略(或声明为Any)
  6. scala中函数支持嵌套,函数的参数可以是函数,返回值也可以是函数

函数的声明定义问题

  1. scala函数的形参,在声明时,可以直接赋初始值,调用函数时,若没有指定实参,则使用默认值,若指定实参,实参会覆盖初始值

    def function0(num: Int = 100) = num
    println(function0(88)) //88
    println(function0()) //100
    
  2. 若函数带有多个参数,则不能确定参数是覆盖默认值还是传递给没有默认值得参数(默认从左到右),此时可以采用带名参数

    fun("1",2)		//从左到右覆盖
    
    def fun(num1: Int, num2: Int = 199, num3: Int) = {
          println(s"num1=${num1},num2=${num2},num3=${num3}")
    }
    
    fun(num1 = 1, num3 = 3)
    

递归函数问题

递归函数在执行之前,无法推断返回值类型,使用时必须有明确的返回值类型

可变参数

scala函数支持可变参数,可变参数必须放在最后,且只有一个

def fun(num1:Int,num2:Int*)=s"${num1},${num2.mkString}"
println(fun(1,2,3,4,5,6))

//1,23456

过程

将函数返回值为Unit的函数称为过程(procedure),如果没有明确的返回值,等号可以省略

若声明函数时没有返回值类型,但有等号,那么该函数是有返回值的,不是过程
def fun(num:Int)={}

惰性函数

当函数返回值被声明为lazy时,函数的执行将被推迟,直到我们首次对此取值,该函数才会执行。(懒加载,延迟加载)

lazy不能修饰var类型变量

如果在声明变量时声明了lazy,那么变量值得分配也会推辞

lazy val res =sum(10,20)

异常

在scalaz中,只有一个catch,在catch中有多个case,每个case匹配一种异常
使用=>符号表示后面是对该异常的处理

try{
    //代码块
}catch{
    case ex:Exception=>{
        //处理异常代码块
    }finally{
        //最终要执行的代码
    }

在scala中,没有编译期异常,异常都是在运行时捕获‘
所有异常都是throwable的子类型
throw表达式是有类型的,Nothing

在scala中,使用throws注释来声明异常
@throws(classof[Exception])//等同于NumberFormatException.class

你可能感兴趣的:(scala)