首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >快速学习-Scala函数式编程

快速学习-Scala函数式编程

作者头像
cwl_java
发布2020-02-27 15:12:24
8780
发布2020-02-27 15:12:24
举报
文章被收录于专栏:cwl_Javacwl_Java

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. 函数式编程中,最重要的就是函数。

函数的定义

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

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

在这里插入图片描述
在这里插入图片描述
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
  }
}

函数-递归调用

基本介绍

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

def test (n: Int) {
    if (n > 2) {
      test (n - 1)
    }
    println("n=" + n) // 
  }
def test2 (n: Int) {
    if (n > 2) {
      test2 (n - 1)
    }else {
      println("n=" + n)
    }
  }

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

  1. 程序执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)
  2. 函数的局部变量是独立的,不会相互影响
  3. 递归必须向退出递归的条件逼近,否则就是无限递归,死龟了:)
  4. 当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用,就将结果返回给谁。
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-02-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Scala函数式编程
    • 函数式编程基础
      • 函数式编程高级
        • 函数式编程介绍
          • 函数的定义
            • 基本语法
            • 函数-调用机制
          • 函数-递归调用
            • 基本介绍
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档