开发者学堂课程【Scala 核心编程-基础:函数式编程几个重要概念】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/609/detail/8927
函数式编程几个重要概念
目录
一、几个概念的说明
二、函数、方法的关系分析
一、几个概念的说明
在学习 scala 中将方法、函数、函数式编程和面向对象编程明确一下。在这里函数和函数编程是两个不同的概念,就好像对象和面向对象编程是两种概念。
1.第一个概念
(1)在 scala 中,方法和函数几乎可以等同(比如他们的定义、使用、运行机制都一样的),只是函数的使用方式更加灵活多样【方法转函数-方法可以很轻松的转化为函数】。
这里使用的词是“几乎”,就表示还是能发生。
(2)方法和函数的区别
函数的使用方式更加灵活多样
(3)scala 方法和函数的关系
示意图
方法有一个专一的术语,
书写代码
package com.atguigu.chapter05
object Method2Function {
def main(args: Array[String]): Unit = {
//使用方法
//先创建一个对象
val dog = new Dog
println(dog.sum(10,20))
//方法转为函数
val f1 = dog.sum_
println("f1=" + f1)
}
}
//运行一下
//就可以看见 f1的类型就是 function
//添加 println("f1=" + f1(50,60))
//再次运行
//就可以看见 f1就是110
//函数,求两个数的和
val f2 = (n1:Int,n2:Int) => {
n1 + n2
//函数体
}
println("f2=" + f2)
//运行
}
//添加 println("f2=" + f1(5,6))
class Dog {
//方法
def sum(n1:Int,n2: Int): Int = {
n1 + n2
}
}
更直接的写法
class Dog {
//方法
def sum(n1:Int,n2: Int): Int = {
n1 + n2
}
}
完整代码
package com.atguigu.chapter05
object Method2Function {
def main(args: Array[String]): Unit = {
class Dog {
//方法
def sum(n1:Int,n2: Int): Int = {
n1 + n2
//使用方法
//先创建一个对象
val dog = new Dog
println(dog.sum(10,20))
//方法转为函数
val f1 = dog.sum_
println("f1=" + f1)
println("f1=" + f1(50,60))
//函数,求两个数的和
val f2 = (n1:Int,n2:Int) => {
n1 + n2
//函数体
}
println("f2=" + f2)
println("f2=" + f1(5,6))
class Dog {
//方法
def sum(n1:Int,n2: Int): Int = {
n1 + n2
}
}
2.函数式编程是从编程方式(范式)的角度来谈的,可以这样理解:函数式编程把函数当做一等公民,充分利用函数、支持的函数的多样使用方式。
比如:
在 Scala 当中,函数是一等公民,像变量一样,即可以作为函数的参数使用,也可以将函数赋值给一个变量,函数的创建不用依赖于类或者对象,而在 Java 当中,函数的创建则要依赖于类、抽象类或者接口。
(3)面向对象编程是以对象为基础的编程方式。
(4)在 scala 中函数式编程和面向对象编程融合在一起了。
二、函数、方法的关系分析
如果有一个人叫韩顺平,在不同的情况下,称呼就会有不同的变化:
如果是在课堂上韩顺平的地位就是一名老师
如果是在家中就叫老爸
一段代码完成某个功能
如果使用 oop 编程,就会把完成某个功能的代码叫做方法
如果使用函数式编程,就会把完成某个功能的代码叫做函数
它虽然名称变化了,但是它的本质没有变化。