函数式编程几个重要概念|学习笔记

简介: 快速学习函数式编程几个重要概念。

开发者学堂课程【Scala 核心编程-基础函数式编程几个重要概念】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/609/detail/8927


函数式编程几个重要概念

 

目录

一、几个概念的说明

二、函数、方法的关系分析

 

一、几个概念的说明

在学习 scala 中将方法、函数、函数式编程和面向对象编程明确一下。在这里函数和函数编程是两个不同的概念,就好像对象和面向对象编程是两种概念。

1.第一个概念

(1)在 scala 中,方法和函数几乎可以等同(比如他们的定义、使用、运行机制都一样的),只是函数的使用方式更加灵活多样【方法转函数-方法可以很轻松的转化为函数】。

这里使用的词是“几乎”,就表示还是能发生。

(2)方法和函数的区别

函数的使用方式更加灵活多样

(3)scala 方法和函数的关系

示意图

方法有一个专一的术语,

image.png

书写代码

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)

}

}

//运行一下

image.png

//就可以看见 f1的类型就是 function

//添加 println("f1=" + f1(50,60))

//再次运行

image.png

//就可以看见 f1就是110

//函数,求两个数的和

val f2 = (n1:Int,n2:Int) => {

n1 + n2 //函数体

}

println("f2=" + f2)

//运行

image.png

}

//添加 println("f2=" + f1(5,6))

image.png

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 中函数式编程和面向对象编程融合在一起了。

 

二、函数、方法的关系分析

如果有一个人叫韩顺平,在不同的情况下,称呼就会有不同的变化:

如果是在课堂上韩顺平的地位就是一名老师

如果是在家中就叫老爸

image.png

一段代码完成某个功能

如果使用 oop 编程,就会把完成某个功能的代码叫做方法

如果使用函数式编程,就会把完成某个功能的代码叫做函数

image.png

它虽然名称变化了,但是它的本质没有变化。

相关文章
|
NoSQL Java Redis
springboot搭建后台框架 (二)整合Redis
springboot搭建后台框架 (二)整合Redis
157 0
|
SQL Oracle 关系型数据库
第五章:OB Server的SQL引擎
第五章:OB Server的SQL引擎
265 0
|
人工智能
虚拟键盘AI
本文提供了一个虚拟键盘AI项目的详细代码实现,包括链接摄像头、手势识别、绘制键盘、确定选中字母以及使用`pynput`库模拟真实键盘输入的步骤,并附有环境配置指南。
虚拟键盘AI
|
区块链 Windows 存储
icon 制作
引用:http://apps.hi.baidu.com/share/detail/30039475 ico是Icon file的缩写,是Windows的图标文件格式的一种,可以存储单个图案、多尺寸、多色板的图标文件。
1192 0
|
9月前
|
数据采集 人工智能 自然语言处理
代理IP:人工智能时代的助力与挑战
在数字化时代,人工智能(AI)和代理IP正逐渐改变我们的生活与工作方式。AI通过模拟人类智能,在图像、语音识别等领域取得显著成果;代理IP则通过隐藏真实IP地址保护隐私、突破网络限制。两者结合,为未来创新带来无限可能。代理IP作为中间服务器,隐藏用户身份,提升数据采集效率,保障模型训练安全,优化网络连接,突破地域限制,助力智能客服、电商物流、AI图像生成等应用。尽管面临稳定性和隐私挑战,但其与AI的融合发展前景广阔,将为生活带来更多便利与创新。
150 1
|
网络协议 安全 物联网
IPv4 与 IPv6: 理解它们的基本区别
IPv4 与 IPv6: 理解它们的基本区别
4204 0
|
机器学习/深度学习 人工智能 自然语言处理
自动化办公:AI如何改变工作方式
【7月更文第19天】随着人工智能技术的飞速发展,我们的工作方式正经历着前所未有的转型。从繁琐的文档处理到高效的会议安排,再到个性化的邮件回复,AI正逐步成为现代办公不可或缺的一部分。本文将深入探讨AI如何在这些核心办公场景中发挥作用,提升工作效率,优化工作流程,从而推动工作方式的全面革新。
1304 3
|
存储 SQL 缓存
C++解释器模式实战:从设计到应用的全面指南
C++解释器模式实战:从设计到应用的全面指南
443 0
|
机器学习/深度学习 人工智能 算法
【人工智能】人工智能的历史发展与机器学习和神经网络
【人工智能】人工智能的历史发展与机器学习和神经网络
285 0
|
前端开发 Java 数据库连接
源码解析最流行的Validator框架——Hibernate Validator
源码解析最流行的Validator框架——Hibernate Validator
878 0
源码解析最流行的Validator框架——Hibernate Validator