Grokking Simplicity FP CH10 ~ CH11 #4
MiJouHsieh
started this conversation in
General
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
《簡約的軟體開發思維:用 Functional Programming 重構程式》CH10 ~ CH11
筆記章節
筆記章節
第 10 章 頭等函式 (1)
章節回顧 Q & A
什麼是「函式名稱中的隱性引數」?這種程式碼意味會造成什麼問題?
請說明「頭等物件」和「頭等函式」的定義,並舉一個 JavaScript 的例子
函式可以像變數一樣被傳遞、指派、作為參數傳入其他函式、或作為函式回傳值。
程式重構:觀察下列兩個函式,將它們構成一個更通用的高階函式,並簡述這樣做的好處。
答
兩個函式中, for 迴圈為重複部分,不同的地方為 console.log (主體實作),不同的地方提取出,以 callback function 的方式傳入高階函式。
建立高階函式
好處:減少程式碼重複的邏輯。不同的主體實作都可透過高階函式處理。
程式理解:請問下列程式碼的 withLogging 函式為什麼要傳入一個函式 (callback),而不是直接傳入 saveUserData(user) ? 如果直接傳入會有什麼問題?
答
saveUserData(user) 包在匿名函式中,作為 callback function 當成引數傳入withLogging 函式,saveUserData(user)的執行才會在 try { f() } 區塊內執行,就能正確捕捉錯誤。
請解釋什麼是「高階函式」(higher-order function),以及為什麼「頭等函式」是實現「高階函式」的前提?
第 11 章 頭等函式 (2)
章節回顧 Q & A
讓 try 和 catch 區塊都能執行不同程式碼,實作 tryCatch
答
以重構 2 將 if 敘述包裝成函式,實作 when(test, then)
答
then
是 callback,只有在test
為真時才會執行3.請觀察以下程式碼,使用「以回呼取代主體實作」的重構模式,將重複的程式碼改寫成高階函式:
答
共通邏輯可以抽成一個新函式 withLogging,且 withLogging 函式回傳一個函式,withLogging 函式接收的參數為函式(operation),在呼叫withLogging 函式時可代入不同操作 (相加、相乘)
4.撰寫 makeAdder() 高階函式,傳回可將兩數相加的新函式
答
兩個函式有重複的地方可以改寫成高階函式。
makeAdder 接收的參數為固定要加的值 (n),透過閉包保存參數 n。
makeAdder 高階函式回傳一個函式,回傳的函式接收另一個參數(x),進行相加後把值回傳。
5.請解釋什麼是「函式生成工廠」(function factory),並用一個簡單例子說明。
函式生成工廠是指能產生新函式的函式。例如:
makeGreeter 就是一個函式生成工廠,它接收一個問候語,回傳一個新的問候函式。
Beta Was this translation helpful? Give feedback.
All reactions