fbpx

使用 JavaScript 的初學者函數式程式設計課程

Contents

一個教你使用 JavaScript 實現函數式程式設計的實用指南。 以最佳的節奏,沒有廢話快速地學習

從這 5.5 小時的課程,你會學到

  • 函數式程式設計的本質,沒有所有不必要的技術術語
  • 如何以函數式程式設計風格建立應用程式
  • 用簡單的程式碼建構複雜的應用程式
  • 純函數是什麼,為什麼你應該使用它們
  • 如何透過使用函數合成(Function Composition )不需要編寫邏輯來建立新的邏輯
  • Currying 和局部應用是什麼,以及它們對 Currying 是有幫助的 ( Currying : 將一個函式繫結到其引數的子集 ) 
  • 不可變資料結構( Immutable Data Structures )是什麼,以及為什麼應該使用它們
  • 為什麼消除和控制副作用如此重要
  • 高階函數的好處
  • 學習一種編寫程式碼風格以最小化難解臭蟲的風險
  • 宣告式( Declarative )程式設計之美
  • 如何使用 Ramda JavaScript 程式庫,使得函數技術在 JavaScript 中很簡單

要求

  • 一台 Mac,PC 或者 Linux 電腦
  • 已經參加了一門或多門程式設計語言課程
  • 開發應用程式的渴望,盡可能使用最簡單的程式碼

課程說明

“我為什麼要學習函數式程式設計?”

目前大多數編寫的軟體都過於複雜難以理解難以測試難以修改,充滿了難以找到的漏洞

哎喲! 那麼,我們如何才能最終解決這些問題呢?

以下是其中的一些原因:

  • 盡可能不使用最簡單的建構區塊… 如果你從一些複雜的事情開始,你會得到一些更複雜的東西
  • 某種程式設計的風格更容易導致產生複雜的臭蟲
  • 不正確地尊從和處理邊際效應(與伺服器溝通,輸入 / 輸出等)
  • 將應用程式狀態「散落」在所有的程式碼基底
  • 不必要的變異資料
  • 程式碼重複(特別是黑箱作業,就像物件導向程式設計中的類別方法)
  • 編寫比需求更多的程式碼

這些只是導致令人沮喪工作的許多問題中的一小部分。

函數式程式設計以下列的方式解決上述問題:

  • 更簡單的應用程式,因為函數式程式設計使用了最簡單的建構區塊,只有簡單的舊資料和純函數來轉換資料(更容易理解和處理)
  • 使用更簡單的程式碼樣板,而不是那麼容易產生複雜的錯誤(更多的時間做生產性工作)
  • 盡可能消除副作用,並在需要的時候控制它們(減少錯誤)
  • 盡可能避免資料變異(減少錯誤)
  • 使用純函數,它可以用於許多不同型別的資料(改善程式碼重複使用)
  • 使用通用函數 ,它可以專門用於滿足不同的需求(更少的程式碼,相同的功能)
  • 創造新的函數,不添加任何新的邏輯,使用函數聚合(更多的功能,不添加程式碼)

根據我的經驗,函數式程式設計比物件導向程式設計更有效率,因為有更少的事情需要考慮,所以你不會被你的工作記憶所淹沒。 通常你只是在思考那些普通舊的資料,以及使用函數的資料轉換。 另外,在函數式程式設計中,沒有大量做同樣的事情的競賽狀況,所以你不必去考慮不必要的事情。 函數式程式設計是受到限制的,這是一件好事。 你可以更好地集中精力解決你正在解決的問題,而不是你用來解決問題的工具。

在物件導向程式設計中,你必須考慮許多不同型別的複雜有狀態的物件,這些物件可以用不同的方式進行互動。 你必須考慮的不僅僅是資料和資料轉換… … 你必須考慮像狀態和副作用之類的東西,遠遠超過函數式程式設計。

“我在這門課上會學到什麼呢?”

你將透過實踐學習如何使用函數式程式設計風格開發前端網頁應用程式。 你將在這門課程中從頭開始建立 5 個重要的網頁應用程式。 在這門課程的最後,你會理解和欣賞對於函數式程式設計師來說很重要的事情,而且很可能你會從根本上改變你寫程式的方式。

“我將學到什麼樣的前端框架?”

我可以用一個流行的前端框架例如 React 或 Vuejs 來教你函數式程式設計,但是框架來來去去,我教你的原則是超越框架的永恆原則… 所以,你只需使用現代的 JavaScript 就可以學習函數式程式設計,還有一些 helper 程式庫。 你在本課程中學到的知識和技能可以與今天和未來的流行框架一起使用!

“這個課程是否將會從頭開始使用 100% 的 JavaScript?”

我們不會使用任何框架,但是我們會使用一些 helper 程式庫讓以下的描述合理。

“這門課程中使用了什麼 JavaScript 程式庫,為什麼還要包含程式庫呢?”

本課程的重點是教你函數式程式設計的概念。 從頭開始編寫所有的功能,很可能會分散我們對核心概念的注意力,所以為了保持專注,我們會使用一些有意義的程式庫。

使用的程式庫:

  • Ramda – 我們將使用非常棒的 Ramda JavaScript 程式庫,它類似於 lodash 和 underscore,但它是用來利用函數式程式設計概念的。 在我看來,這個程式庫是 JavaScript 函數式程式設計必須使用的程式庫
  • Hyperscript – 我們將使用 hyperscript 程式庫產生 html 和 css。 例如, 我們將呼叫 hyperscripts ‘div’ 函數來產生 html div。 例如 div (‘hello’)
  • Tachyons – 這是一個 css 框架,它包含函數式程式設計的概念,例如合成( composition )
  • Webpack/Babel – 我們將使用 webpack,babel 和一些相關的 plugins 來建立一個最小的建構系統。 這是一次性的設置步驟
  • Virtual-Dom – 我們將使用虛擬 dom 程式庫高效地更新網頁。 這是像 ReactVuejs 這樣的現代框架所使用的技術。 這是一次性的設置步驟

“我是一個後端開發人員,但我想學習函數式程式設計… 我應該選擇這門課程嗎?”

在這門課程中你將學到的知識和基本原則,可以很容易地轉化為後端。 我正在教你前端的函數式程式設計,因為前端的程式設計可能是相當具有挑戰性的, 而且函數式程式設計是一個特別適合於前端開發。 值得注意的是,這門課程的重點是現代的 JavaScript,並且不使用前端框架,所以你不必學習你可能永遠不會使用的前端技術。

“我能用 JavaScript 編寫函數式程式嗎?

是的, 當然。 允許你以多種不同的風格編寫程式,使用函數式程式設計是一個很好的選擇。 你將開始學習使用現代 JavaScript 的函數式程式設計技術(ES2018) , 然後你會瞭解到優秀的 Ramda JavaScript 程式庫。 你可能聽說過 “JavaScript, the good parts” 這本書。 當你使用函數式程式設計時,你只是簡單地使用語言中好的部分,你會自然地避免壞和混亂的部分(比如這個關鍵詞ヽ(ಠ_ಠ)ノ)。

“函數式程式設計不就是電腦科學的一個小領域嗎?”

這曾經是真的,但現在不是了。 數十年來,物件導向程式設計一直是軟體開發的主導力量,,但是在過去的幾年中,函數式程式設計已經有了巨大的成長,它被像是 Facebook,Twitter 甚至是 Walmart 這樣的大公司所使用。 但是不僅僅是大公司在使用函數式程式設計,,全世界的中小型公司都轉向了函數式程式設計。 2017年12月,Forrester 研究公司發佈了一份題為《The New Dawn Of Functional Programming》的研究報告,其中聲稱”函數式程式設計正開始進入主流… … 軟體開發世界正在超越有狀態、物件導向的開發“。 學習趨勢向上的技術總是有意義的,而函數式程式設計是一個很好的選擇, 因為這個理由以及更多原因。

“難道我必須成為一個數學天才,才能理解函數式程式設計嗎?”

不需要! 幾十年來,函數式程式設計的主要採用者大多是學者和對數學專業領域感興趣的人。 在那段時間,大多數的程式設計師工作者(包括我自己)並不真正理解函數式程式設計, 而那些真正理解函數式程式設計的人並沒有很好地解釋它是什麼,它的好處是什麼,如何做… 等等。 事實上,你不需要成為一個數學天才來理解函數式程式設計。 函數式程式設計的本質與數學沒有什麼關係,你可以在這門課上看到。

“難道我不需要學一個全新的詞彙來理解函數式程式設計嗎?”

不需要! 我不會用不必要的術語集來轟炸你,事實上我盡可能地回避它,當我使用新的函數式程式設計詞彙時,它通常只是將一個名稱和一些你已經學過的普通的老式英語聯繫起來。

“我在這門課上獲得的知識會不會在一兩年內被淘汰,就像我的 Angular 1 知識一樣?”

不會! 在這門課程中你將學到的東西在多年內或是往後幾十年中將是相關的和有用的。

“這怎麼可能呢?”

因為,我不是在特定的框架下教你函數式程式設計, 比如 React 或者 Vue.js。 框架來了又走,但是你在這個課程中學到的技能超越了當今流行的框架。

“為什麼使用函數式程式設計風格編寫的程式碼不太容易找到臭蟲?”

最難找到和修復的臭蟲跟允許副作用(與伺服器溝通,狀態更改等)相關的程式碼有關係。 函數式程式設計將重點放在消除和控制副作用(Side Effects)上… … 所以, 盡可能消除副作用,並且在需要的時候嚴格控制副作用會導致更少的複雜臭蟲。

“你說函數式程式設計很簡單, 但我嘗試過函數式程式設計, 這很困難! ?”

啊,我沒說這很容易,我只是說這很簡單。 編寫簡單的程式碼並不容易,通常也很困難。 但是,用簡單的程式碼程式庫建構的複雜軟體是一件美好的事情,而且完全值得。 如果你知道並且喜歡物件導向程式設計, 你可能會遇到挑戰。 關於程式設計, 你所知道的很多東西,必須重新評估,並且經常被忽視。 我懷疑,對於一個新的程式設計師來說,學習函數式程式設計和一個經驗豐富的物件導向程式設計師來說可能更容易,,因為函數式程式設計與物件導向程式設計是如此的不同… … 但是同樣,它是完全值得的🙂

“我不理解你所說的某些事情,比如’副作用 side effects’和’純粹的函數 pure functions’?”

不要擔心,在這門課程中我從最基本的開始,所以你應該沒有問題伴隨。 此外,我還提供了一些非常獨特的免費獲得幫助的選擇,我在視訊中描述了這些如何獲得幫助的選擇。

“這門課適合我嗎?”

這門課程是為兩種類型的學生開設的:

  • 已經參加了一個程式設計入門課程的程式設計新手
  • 有經驗的程式設計師*想要學習函數式程式設計

* 經驗豐富的程式設計師可能會跳過一些視訊, 但我建議你重新熟悉一下基礎知識, 因為它們是從函數式程式設計角度展示的。

如果你不確定這個課程是否適合你,請記住,你幾乎沒有風險,因為你將有 30 天的時間考慮申請課程退款。

我為什麼要聽你的話參加這門課程?

我的課程與大多數教師不同。 我不相信一門課程應該涵蓋程式語言或技術的每一個部分。

我會用比喻來解釋為什麼。想象一下你想學西班牙語。 學習西班牙語的一個方法是學習西班牙語的每一個單字。 在一本西班牙詞典里有大約10萬個單字… 哎喲! 事情是這樣的, 1000個西班牙語單字佔了所有西班牙語口語的80% … … 2000個單字佔了所有口頭語的95% 。 把注意力集中在學習一千或兩千個最常用的西班牙語單字不是更好嗎? 你會流利得多… … 事實上,試圖學習所有的西班牙語單字,當你意識到它們中的大多數都沒有被使用的時候會感到有點荒謬。

這些原則同樣適用於程式設計語言和技術。 我不想浪費你的時間,所以我只教你最常用的 JavaScript 和函數式程式設計, 這樣你就可以更加流利地使用它了。

目標受眾

  • 這門課程是為已經完成了至少一門程式設計入門課程的程式設計新手開設的
  • 這門課程也是為有經驗的程式設計師同時也是函數式編程的新手開設的

講師簡介

James Moore 軟體開發人員、顧問及培訓師

在太平洋數百英尺深的海底深潛時 James 發現軟體開發的樂趣。 他非常喜歡這份工作,於是他辭去了海軍核子潛艇船員的職涯,盡可能地學習如何開發軟體。 作為一個接受過核子訓練的工程師,他想出了如何快速學習的方法,這有助於他在職涯中的學習永不停止。 目前,他是一個獨立的軟體開發人員,顧問和培訓師。

英文字幕:有

  • 想要了解如何將英文字幕自動翻譯成中文? 請參考這篇 How-To

  • 點選這個 Network & Security 課程✨優惠連結✨ ( NT490 起特價中 ) | 大多地區 ✨ 優惠連結 ✨( NT390 起特價中 )| Udemy 永久擁有課程 ( 在電腦瀏覽器登入,點選“優惠連結”後再回想要的課程介紹中點選“報名參加課程”即可取得 )
  • Udemy 現在越來越多課程有中文字幕,請參考 Soft & Share 中文線上課程
  • 手機上點選優惠連結看到的價格比電腦上看到的貴
  • $代表當地貨幣, 如在台灣為 NT
  • 點選”報名參加課程”有可能因瀏覽器 cookies 轉久一點或回報錯誤而無法連上,請稍等刷新或重新點選就會出現

報名參加課程

Sponsored by Udemy


也許你會有興趣


不受 FB 演算法影響,歡迎透過 e-mail 訂閱網站更新

發表迴響

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

Powered by WordPress.com.

Up ↑

%d