面向 JavaScript 初学者的函数式编程

一本实用指南,教您使用 JavaScript 进行函数式编程。最佳节奏,不废话。快速学习!

讲师:James Moore

口袋资源独家Udemy付费课程独家中英文字幕配套资料齐全!

不到1/10的价格,即可享受同样的高品质课程,且可以完全拥有,随时随地都可以任意观看和分享。

你会学到什么

  • 函数式编程的精髓,没有所有不必要的技术术语
  • 如何以函数式编程风格创建应用程序
  • 使用简单的代码构建复杂的应用程序
  • 什么是纯函数,以及为什么要使用它们
  • 如何使用函数组合创建新逻辑,而无需编写逻辑
  • 什么是 Currying 和 Partial Application,以及它们有何帮助
  • 什么是不可变数据结构,以及为什么要使用它们
  • 为什么消除和控制副作用如此重要
  • 高阶函数的好处
  • 如何以最小化困难错误风险的风格编写代码
  • 声明式编程之美
  • Ramda JavaScript 库如何使 JavaScript 中的函数式技术变得简单

要求

  • Mac、PC 或 Linux 机器
  • 已经学习过一门或多门编程语言课程
  • 使用尽可能简单的代码创建应用程序的愿望

描述

“我为什么要学习函数式编程?”

今天编写的大多数软件都过于复杂难以理解、难以测试难以更改并且充满了难以发现的错误

哎哟!  那么我们如何解决这些问题呢?

以下是众多原因中的几个:

  • 尽可能不使用最简单的构建块……如果你从复杂的东西开始,你会得到更复杂的东西。
  • 以更容易受到复杂错误影响的风格进行编程
  • 没有正确尊重和处理副作用(与服务器交谈、输入/输出等)
  • 在整个代码库中“喷洒”应用程序状态
  • 不必要地改变数据
  • 代码重复(特别是偷偷摸摸的,比如面向对象编程中的类似类方法)
  • 编写不必要的代码

这些只是导致令人沮丧的工作的众多问题中的一小部分,他们使用难以维护和添加功能的代码库。

函数式编程通过以下方式解决上述问题:

  • 更简单的应用程序,因为函数式编程使用最简单的构建块,只需简单的旧数据和纯函数来转换数据(更易于理解和使用)
  • 使用更简单且不易出现复杂错误的代码样式(更多时间从事生产性工作)
  • 尽可能消除副作用并在需要时控制它们(减少错误)
  • 尽可能避免数据突变(减少错误)
  • 使用纯函数,可以处理许多不同类型的数据(改进的代码重用)
  • 使用通用函数,可以专门化以满足不同的需求(更少的代码,相同的功能)
  • 创建新函数,不添加任何新逻辑,使用函数组合(更多功能,不添加代码)

以我的经验,函数式编程比面向对象编程更有效率,因为要考虑的事情更少,所以你不会压倒你的工作记忆。通常你只是考虑使用函数的普通旧数据和数据转换。此外,在函数式编程中,没有大量相互竞争的方式来做同样的事情,因此您不必考虑不必要的事情。 函数式编程具有约束力,这是一件好事。你能够更好地专注于你正在解决的问题,而不是你用来解决问题的工具。

在面向对象编程中,您必须考虑许多不同类型的复杂、有状态的对象,它们可以以不同的方式进行交互。您必须考虑的不仅仅是数据和数据转换……您必须考虑诸如状态和副作用之类的事情,远远超过您在函数式编程中所做的事情。

“我将在这门课程中学到什么?”
通过动手学习,您将学习如何以函数式编程风格创建前端 Web 应用程序。在本课程中,您将从头开始构建 5 个重要的 Web 应用程序。在本课程结束时,您将理解并欣赏对函数式程序员很重要的事情,并且很有可能,您将从根本上改变您编写程序的方式。 

“我将学习什么前端框架?”
我可以使用像 React 或 Vuejs 这样流行的前端框架来教你函数式编程,但是框架来来去去,而我将教给你的原则是超越框架的永恒原则……所以相反,你将学习函数式编程只是使用现代 JavaScript 和一些辅助库。您将在本课程中学到的知识和技能可以与当今和未来的流行框架一起使用!

“这门课程会是 100% 从零开始的 JavaScript 吗?”
我们不会使用任何框架,但我们将使用一些有意义的辅助库,如下所述。

“本课程使用了哪些 JavaScript 库,为什么还要包含库?”
本课程的主要重点是教你函数式编程概念。从头开始手动编写所有内容,很可能会分散核心概念的注意力,因此为了保持专注,我们将使用一些有意义的库。  

使用的库:

  • Ramda  – 我们将使用很棒的 Ramda JavaScript 库,它类似于 lodash 和下划线,但它是为利用函数式编程概念而构建的。在我看来,这个库是 JavaScript 函数式编程的必备库。
  • Hyperscript  – 我们将使用 hyperscript 库来生成 html 和 css。例如,我们将调用超脚本 ‘div’ 函数来生成 html div。即 div(‘hello’) => <div>hello</div>
  • Tachyons – 这是一个包含函数式编程概念(如组合)的 css 框架。
  • Webpack/Babel – 我们将使用 webpack、babel 和一些相关插件设置一个最小的构建系统。这是一次性设置步骤。
  • Virtual-Dom – 我们将使用虚拟 dom 库来有效地更新网页。这是 React 和 Vuejs 等现代框架使用的技术。这是一次性设置步骤。

“我是一名后端开发人员,但我想学习函数式编程……我应该参加这门课程吗?”
您将在本课程中学到的知识和基本原理可以轻松地转换到后端。我正在教你前端的函数式编程,因为前端编程可能非常具有挑战性,而函数式编程特别适合前端。需要注意的是,本课程侧重于现代 JavaScript,不使用前端框架,因此您不必学习您可能永远不会使用的前端技术。

“我可以用 JavaScript 编写函数式程序吗?”
是的,一点没错。 JavaScript 允许您以多种不同的风格进行编程,而使用函数式编程是一个很好的选择。您将从学习使用现代 JavaScript (ES2018) 的函数式编程技术开始,然后您将了解出色的 Ramda JavaScript 库。您可能听说过“JavaScript,优秀的部分”这句话。当你用函数式编程时,你只是在使用语言中好的部分,你自然会避免不好的和令人困惑的部分(比如 this关键字ヽ(ಠ_ಠ)ノ)。  

“函数式编程不只是计算机科学中的一小部分吗?”
这曾经是真的,但现在不是了。  几十年来,面向对象编程一直是软件开发的主导力量,但在过去的几年里,函数式编程有了巨大的增长,它被用于 Facebook、Twitter 甚至沃尔玛这样的大公司。但不仅仅是大公司在使用函数式编程,全世界的中小型公司都在转向函数式编程。
2017 年 12 月,Forrester 研究发布了一份题为“函数式编程的新曙光”的研究报告,其中断言“函数式编程开始登上主舞台……软件开发世界正在超越有状态、面向对象的开发”。
学习向上趋势的技术总是有意义的,函数式编程是一个很好的选择,因为这个原因等等。

“我不是必须是数学天才才能理解函数式编程吗?”
绝对不! 几十年来,函数式编程的主要采用者主要是学者和对数学专业领域感兴趣的人。在那段时间里,大多数在职程序员(包括我自己)并不真正了解函数式编程,而理解函数式编程的人并没有很好地解释它是什么、有什么好处、如何去做……等等
。事实是,你不需要成为数学天才就能理解函数式编程。函数式编程的本质与数学无关,您将在本课程中看到。

“我不需要学习一个全新的词汇来理解函数式编程吗?”
不! 我不会用不必要的技术术语轰炸你,事实上我尽可能避免它,当我使用新的函数式编程词汇时,它通常只是将一个名字与你已经用简单的古英语口语学过的东西联系起来。

“我在这门课程中获得的知识会在一两年内过时吗,就像我的 Angular 1 知识一样?”
不! 在本课程中学到的知识将在数甚至数十年内都具有相关性实用性。 “这怎么可能?” 因为,我不是在像 React 或 Vue.js 这样的特定框架的上下文中教你函数式编程。框架来来去去,但您将在本课程中学到的技能超越了当时流行的框架。

“以函数式编程风格编写的代码如何不易发现错误?”
最难发现和修复的错误与允许副作用(与服务器交谈、状态更改等)的代码有关。函数式编程非常强调消除和控制副作用……因此,尽可能消除副作用并在需要时严格控制副作用将导致更少的复杂错误是有道理的。  

“你说函数式编程很简单,但我尝试过函数式编程却很难!?”
啊,我没说简单,我说简单。  编写简单的代码并不容易,通常很困难。但是用简单的代码库构建的复杂软件是一件很美的事情,而且完全值得。  
如果您了解并喜欢面向对象编程,那么您可能会面临挑战。您对编程的许多了解,必须重新评估并且经常被忽视。我怀疑,新程序员比经验丰富的面向对象程序员学习函数式编程可能更容易,因为函数式编程与面向对象编程有很大不同……但同样, 这完全值得:)

“我不明白你说的‘副作用’和‘纯功能’之类的东西?”
不用担心,在本课程中,我从最基本的开始,所以您应该没有问题。此外,我提供了一些非常独特的免费帮助选项,我在视频中描述了如何获得帮助。

“这门课适合我吗?”
本课程适用于两种类型的学生:

  • 参加过入门编程课程的新程序员
  • 有兴趣学习函数式编程的经验丰富的程序员*

* 有经验的程序员可能会跳过一些视频,但我建议重新熟悉基础知识,因为它们是从函数式编程的角度呈现的。

如果您不确定这门课程是否适合您,请记住您几乎没有任何风险,因为您将有30 天的时间退还课程以获得退款

“我为什么要向你学习这门课程?”
我的课程与大多数讲师不同。我不认为一门课程应该涵盖语言或技术的每一个部分。

我会用一个比喻来解释为什么。
想象一下你想学习西班牙语。学习西班牙语的一种方法是学习每一个西班牙语单词。一本西班牙语词典里大约有 100,000 个单词……哎呀!  
事情是这样的,1,000 个西班牙语单词占所有西班牙语口语的 80%……2,000 个单词占所有口语单词的 95%。
专注于学习 1,000 或 2,000 个最常用的西班牙语单词不是更好吗?你会流利得更快……事实上,尝试学习所有 100,000 个西班牙语单词,听起来有点荒谬,当你意识到它们中的大多数从未使用过时。

这些相同的原则适用于编程语言和技术。许多教练会开设 10、20 和 +30 小时的课程,里面塞满了你可以避免的东西!
我不想浪费你的时间,所以我只会教你 JavaScript 和函数式编程中最常用的部分,这样你会更快地流利。

本课程适用于:

  • 本课程面向已完成至少一门入门编程课程的新程序员。
  • 本课程也适用于有经验的程序员,他们是函数式编程的新手。

发表回复

后才能评论

  • 每一个课程页面,都有演示地址选项,点击链接可以跳转到课程发布网站查看详细课程列表。
  • 绝大部分课程都有试看内容,可以先点击试看,再决定是否购买。
  • 本站课程均存储在阿里云盘或百度网盘中,由于阿里云盘对分享的文件类型有限制,所以课程资料和字幕会存储到蓝奏云盘中。
  • 阿里云盘和蓝奏云盘都是不限速下载的,你既可以选择在阿里云盘中在线学习,也可以选择下载到本地学习。
  • 课程下载到本地可以挂载中英文双字幕,请点击查看Potplayer挂载中英文双字幕教程
  • 本站所有课程,均提供mp4格式视频文件,中英文双字幕,配套资料齐全,不加密。
  • 每一个课程右侧下载面板中,都会有清晰度标识,大部分都是1080P或者720P,还有少数是超高清的。
  • 本站课程购买之后,均可以免费更新,所有课程,皆配有中文字幕。
  • 请注意,课程的中文字幕是根据英文字幕用谷歌翻译生成的,本非人工翻译。谷歌翻译准确度尚可,学习观看,没有问题。
  • 由于数字资源具有可复制性,一旦购买,不接受退款要求,请在购买之前,认真了解课程内容,确定是否需要。
  • 当然,如果有特殊情况,可以查看网站底部联系方式,联系站长说明问题,我会为你妥善处理。
  • 赞助本站VIP会员,可以免费下载所有课程,详情请查看VIP介绍