函数式编程基础介绍|学习笔记

简介: 快速学习函数式编程基础介绍。

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

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


函数式编程基础介绍

 

目录

一、函数编程的内容

二、函数式编程基础

三、函数式编程高级

四、函数式编程的授课顺序

 

一、函数编程的内容

1.函数式编程基础

2.函数式编程高级

 

二、函数式编程基础

1.函数定义/声明

2.函数运行机制

3.递归

(1)递归介绍

推荐编程者使用递归来解决问题。当使用递归解决问题完了之后,它的底层仍然会进行优化。

(2)递归可以解决什么问题?

①递归是算法基础

②邮差问题

③最短路径问题

④背包问题

⑤迷宫问题:回溯

只要涉及到算法或者是实际应用的问题,递归都不必不可少。

(3)之前学过的大量应用到递归的例子

二差数、广义表、散列

(4)递归的作用

①递归的作用

从编程的原理来说,所有的东西都可以用递归来解决;在设计者眼里,现实中的递归就是不停地重复,重要的是重复的规律该如何找到。

②汉诺塔问题

有三根高度相同的柱子和一些大小及颜色不同的圆盘,三根柱子分别为起始柱 A、辅助柱 B 及目标柱 C。

如果是由 A 移动到 C。

对于一个人来说,如果是5个盘子是可以绕过来的。如果是64个盘子,人就几乎是完成不了了。

但是这两个例子的逻辑是一样的。

4.过程

5.惰性函数和异常的处理

异常的处理也是用到相关的函数或者是方法。

 

三、函数式编程高级

1.值函数(函数字面量)

2.高阶函数

3.闭包

4.应用函数

5.柯里化函数,抽象控制

 

四、函数式编程的授课顺序

1.在 scala 中,函数式编程和面向对象编程融合在一起,学习函数编程需要学习 oop 的知识,同样学习 oop 需要函数式编程的基础。

(1)为什么函数式编程和面向对象编程融合在一起

函数式编程原生是以 Java 为根基形成的。Java 是 oop 的东西。

只是设计者马丁奥德斯基觉得 oop 虽然很好,但是他还是想把函数融入到 oop 里面。

2.两者的关系关系

一旦在 oop 里面插入了函数,就会出现下图情况

image.png

情况就是面向对象里面拥有函数式编程的内容,函数式编程里面也会有面向对象编程的影子,这样就会造成当在讲函数编程的时候突然会用到 opp,反过来在讲面向对象的时候,就要用到函数的内容。

所以就可以把函数式编程和面向对象编程公用的东西讲解完,讲解完之后在讲解面向对象编程,如何再讲解函数式编程。

3.授课顺序

函数式编程->面向对象编程->函数式编程高级

相关文章
|
算法 Python
Python算法——广度优先搜索
Python算法——广度优先搜索
507 0
Liunx怎么安装spdlog(这是用来管理日志部分)
Liunx怎么安装spdlog(这是用来管理日志部分)
487 7
|
11月前
|
数据采集 传感器 人工智能
AgiBot World:智元机器人开源百万真机数据集,数据集涵盖了日常生活所需的绝大多数动作
AgiBot World 是智元机器人开源的百万真机数据集,旨在推动具身智能的发展,覆盖家居、餐饮、工业等五大核心场景。
1007 9
AgiBot World:智元机器人开源百万真机数据集,数据集涵盖了日常生活所需的绝大多数动作
|
算法 搜索推荐 Shell
数据结构与算法学习十二:希尔排序、快速排序(递归、好理解)、归并排序(递归、难理解)
这篇文章介绍了希尔排序、快速排序和归并排序三种排序算法的基本概念、实现思路、代码实现及其测试结果。
452 1
|
12月前
|
SQL 存储 人工智能
化整为零:湖仓数据平台一站式迁移
本文介绍了湖仓平台迁移的概况、痛点及解决方案。首先概述了数据湖和数据仓库迁移的现状与背景,强调其重要性及挑战。接着分析了迁移过程中的主要痛点,如数据量大、业务变更频繁等。最后提出了一种化整为零的新范式,通过精细化设计和自动化工具提升迁移效率,并展示了一站式湖仓迁移中心的关键阶段和产品大图,旨在加速迁移过程并减少人工成本。
|
前端开发 Java 测试技术
java日常开发中如何写出优雅的好维护的代码
代码可读性太差,实际是给团队后续开发中埋坑,优化在平时,没有那个团队会说我专门给你一个月来优化之前的代码,所以在日常开发中就要多注意可读性问题,不要写出几天之后自己都看不懂的代码。
|
消息中间件 存储 NoSQL
MQ的顺序性保证:顺序队列、消息编号、分布式锁,一文全掌握!
【8月更文挑战第24天】消息队列(MQ)是分布式系统的关键组件,用于实现系统解耦、提升可扩展性和可用性。保证消息顺序性是其重要挑战之一。本文介绍三种常用策略:顺序队列、消息编号与分布式锁,通过示例展示如何确保消息按需排序。这些方法各有优势,可根据实际场景灵活选用。提供的Java示例有助于加深理解与实践应用。
973 2
|
缓存 Java 程序员
函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码
本文会以惰性加载为例一步步介绍函数式编程中各种概念,所以读者不需要任何函数式编程的基础,只需要对 Java 8 有些许了解即可。
函数式编程的Java编码实践:利用惰性写出高性能且抽象的代码
|
设计模式 Java Maven
一个注解搞定责任链,学还是不学?
在繁琐的业务流程处理中,通常采用面向过程的设计方法将流程拆分成N个步骤,每个步骤执行独立的逻辑。但是这样剥离仍然不彻底,修改其中一个步骤仍然可能影响其他步骤。在这种场景下,有一种经典的设计模式-责任链模式,可以将这些子步骤封装成独立的handler,然后通过pipeline将其串联起来。
1253 173
一个注解搞定责任链,学还是不学?
|
消息中间件 Java 中间件
RocketMQ延迟消息的代码实战及原理分析
在RocketMQ中,支持延迟消息,但是不支持任意时间精度的延迟消息,只支持特定级别的延迟消息。如果要支持任意时间精度,不能避免在Broker层面做消息排序,再涉及到持久化的考量,那么消息排序就不可避免产生巨大的性能开销。
3884 0