快速学习-Scala函数式编程

2020-02-27 15:12:24 浏览数 (1)

Scala函数式编程

函数式编程基础

  1. 函数定义/声明
  2. 函数运行机制
  3. 递归//难点 [最短路径,邮差问题,迷宫问题, 回溯]
  4. 过程
  5. 惰性函数和异常

函数式编程高级

  1. 值函数(函数字面量)
  2. 高阶函数
  3. 闭包
  4. 应用函数
  5. 柯里化函数,抽象控制…

在scala中,函数式编程和面向对象编程融合在一起,学习函数式编程式需要oop的知识,同样学习oop需要函数式编程的基础。[矛盾] 关系如下图:

在学习Scala中将方法、函数、函数式编程和面向对象编程明确一下:

  1. 在scala中,方法和函数几乎可以等同(比如他们的定义、使用、运行机制都一样的),只是函数的使用方式更加的灵活多样。
  2. 函数式编程是从编程方式(范式)的角度来谈的,可以这样理解:函数式编程把函数当做一等公民,充分利用函数、 支持的函数的多种使用方式。 比如: 在Scala当中,函数是一等公民,像变量一样,既可以作为函数的参数使用,也可以将函数赋值给一个变量. ,函数的创建不用依赖于类或者对象,而在Java当中,函数的创建则要依赖于类、抽象类或者接口.
  3. 面向对象编程是以对象为基础的编程方式。
  4. 在scala中函数式编程和面向对象编程融合在一起了 。

在学习Scala中将方法、函数、函数式编程和面向对象编程关系分析图:

函数式编程介绍

  1. “函数式编程"是一种"编程范式”(programming paradigm)。
  2. 它属于"结构化编程"的一种,主要思想是把运算过程尽量写成一系列嵌套的函数调用。
  3. 函数式编程中,将函数也当做数据类型,因此可以接受函数当作输入(参数)和输出(返回值)。
  4. 函数式编程中,最重要的就是函数。

函数的定义

基本语法
代码语言:javascript复制
def 函数名 ([参数名: 参数类型], ...)[[: 返回值类型] =] {
	语句...
	return 返回值
}
  1. 函数声明关键字为def (definition)
  2. [参数名: 参数类型], …:表示函数的输入(就是参数列表), 可以没有。 如果有,多个参数使用逗号间隔
  3. 函数中的语句:表示为了实现某一功能代码块
  4. 函数可以有返回值,也可以没有
  5. 返回值形式1: : 返回值类型 =
  6. 返回值形式2: = 表示返回值类型不确定,使用类型推导完成
  7. 返回值形式3: 表示没有返回值,return 不生效
  8. 如果没有return ,默认以执行到最后一行的结果作为返回值
函数-调用机制

为了让大家更好的理解函数调用机制, 看1个案例,并画出示意图,这个很重要,比如getSum 计算两个数的和,并返回结果。

代码语言:javascript复制
object Test01 {
  def main(args: Array[String]): Unit = {
    val n1 = 1
    val n2 = 3
    val res = sum(n1, n2)
    println("res="   res)
  }
  def sum(n1: Int, n2: Int): Int = {
    return n1   n2
  }
}

函数-递归调用

基本介绍

一个函数在函数体内又调用了本身,我们称为递归调用

代码语言:javascript复制
def test (n: Int) {
    if (n > 2) {
      test (n - 1)
    }
    println("n="   n) // 
  }
代码语言:javascript复制
def test2 (n: Int) {
    if (n > 2) {
      test2 (n - 1)
    }else {
      println("n="   n)
    }
  }

函数递归需要遵守的重要原则(总结):

  1. 程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
  2. 函数的局部变量是独立的,不会相互影响
  3. 递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:)
  4. 当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁。

0 人点赞