@@8pm referential transparency 應該和 pure function 的概念是相通的吧 這的確是 FP 最核心的概念 只是我認為 pattern matching 和 algebraic data type 也是 FP 裡必學的概念 用學術一點的說法就是你指的 Hindley-Milner type system 就算是沒有 type 的程式語言,只要有 referential transparency 就能實現 algebraic data type 和 pattern matching (lambda calculus 的 Scott encoding 就是把資料編碼成 pattern matching 的函式來實現的) 對於資料結構的理解也是 FP 和 OOP 的第二大差別
react上把UI 和state分開 最有名的是redux UI = f(state) 雖然嚴格來說用container (a component that connects to the store, which is global) by definition無可能是pure的啦 (使用useSelector的一刻就已經depends on things other than input) 至少function component是這樣 其實這個要看你想以哪一個層面去看 separation of concerns 只能說jsx, hooks在同一個component/container上 是react的特點(jsx, styling, logic 全都是react 的concern)
感謝您的分享,上一部FP的影片對完全不認識 FP 的我來說簡單明瞭,能很快抓到重點。
提個影片觀賞上的小建議,我自己如果是看知識分享型的影片會用至少1.5倍速播放(視講者語速而定)
您的影片中的背景音樂在倍速的情況下會變成很擾人的雜音
特別是在段落切換時播放的音樂最嚴重,但這部影片後段的鋼琴音樂就沒有這個問題
以往在看其他影片時並沒有感受到這件事,可能其他人是音樂很短或是沒播到會發生這種問題的音樂
我知道有些人也是一樣在看知識分享型影片會倍速,但比例多不多就不清楚了,只是提一下個人觀感讓您參考
謝謝建議,我自己倍速看也發現了
等到多線程, 分散式系統, 高並發, 就會知道fp多好用。寫一個pure function再用channel回傳,根本不用擔心side effect.
如果之前是懂 JavaScript 想入门 FP,可以学习 ReScript 。他是一个像 OCaml 的 JS 方言,纯函数式语言,可以直接编译到 JS,适合集成到已有的 JS 项目里;而且官方支持 React,也就是说可以直接在前端项目里运用,而不用依赖其他像 fp-ts 之类的库。
謝謝James無私的分享~ 對入門還有經驗分享都非常有幫助!!
我不建議一開始就從 Haskell 學,它 *太* FP 了
有很多概念都不是必要的,例如: currying, lazy evaluation, declarative, recursion instead of loop
我認為 FP 的核心概念只有三個: algebraic data type, pattern match, immutability and purity
如果想學 FP,我建議可以從 Elm 入門
另外與其說 FP 跟集合論有關,它跟範疇論 (Category theory) 有更深的關係
有興趣可以看 "Category Theory for Programmers" 這本書
OCaml 也还挺适合入门的
弱弱問下,那FP跟type theory有關西嗎?
你說的三個核心概念準確說是 Hindley-Milner type system 的,standard ml, haskell, ocaml ...,對於 lisp 家族的來說就不是核心概念。我認爲 FP 最核心的概念是 referential transparency。另外,我也喜歡用 ocaml。
@@8pm
referential transparency 應該和 pure function 的概念是相通的吧
這的確是 FP 最核心的概念
只是我認為 pattern matching 和 algebraic data type 也是 FP 裡必學的概念
用學術一點的說法就是你指的 Hindley-Milner type system
就算是沒有 type 的程式語言,只要有 referential transparency 就能實現 algebraic data type 和 pattern matching
(lambda calculus 的 Scott encoding 就是把資料編碼成 pattern matching 的函式來實現的)
對於資料結構的理解也是 FP 和 OOP 的第二大差別
@@have-bear "referential transparency 應該和 pure function 的概念是相通的吧",我覺得是,也不是。referential transparency 在 function 的表現形式就是 pure function,但在更大範圍比如 module 的設計,也可以套用,那個時候,內部也可能是 imperative 的,當然你也可以從邊界來看,說這是更大範圍的 pure function,畢竟 output 只依賴 input。看我喜歡 ocaml 就知道我也是支持 pattern matching 和 algebraic data type 的,我也認爲非常值得學習使用,HM 是比 c++/java 系更好的設計。我還認爲 ocaml 的 OOP 部分的設計(structural subtyping)也比 c++/java 的優秀。
如果要直接學fp語言推薦可以學clojure 寫前後端可以用Clojurescript,跟javascript可以輕鬆interop(沒學過fp到寫cljs的公司工作就入了坑
感謝分享
感謝分享 🎉
我上次看到你的上一個影片的時候就已經驚覺,沒想到自己的直覺是對的。
主要原因是因為大量使用powershell語言之後開始對自己編程習慣產生質疑
明明以前寫Cpp的時候能盡量物件就物件,但是工作上一直需要短期快跑造出小ps1就發現
1. 物件在絕大多數的時候真的是必要的嗎?
2. 搞了一個通用物件出來之後最大的問題是,我還得回去看物件的"定義"是什麼
3. ps1跟py一樣對於類型太過於不敏感了,以至於我經常忘記這函式出來是啥鬼
4. ps1內建支援平行處理。但是有限制,跟選用遞迴而不要用for迴圈,我覺得有點說不出來的熟悉感
當時為了弄成平行處理所做的處理,超像的阿。反過來說如果嚴格遵照用FP的方式寫八成可以直接套進的概率很大
抱持著這些零零總總的疑問,忽然接觸到你說的FP忽然瞬間都懂了。WTF現成的答案阿!!!!!
透過事先約定的限制(可能是多寫可能是寫得更複雜的小劣化),來最大程度優化整體代碼的速度、閱讀、統一性。
感覺這個概念是一種湧現對編程有了深度了解之後才湧現出來的東西,
一種道不明說不透的湧現,他並不適用在所有地方不能無腦照搬,但是對於需要的地方而言絕對是突破性的解法。
FP诞生的没那么晚,FP的第一个里程碑是lambda演算,第二个是组合子逻辑,都是很早就诞生了的。
感謝分享 雖然還是新手, 但感覺開啟一扇窗
覺得一開始往這邊打好硬基礎, 之後可以省事很多
感謝分享!!!
收藏影片
我個人其實不喜歡fpts這種函式庫。我認為每個語言都有它的慣例寫法。為了達成某些語言範式而去使用函式庫模擬,除了不必要的複雜度外,也會造成團隊溝通上的成本。
FPTS模擬Haskell的代數型態系統,但事實上,Haskell 的型態系統造成了一些問題,必須用特定的pattern 解決,同樣的問題在is/ts world 是不會發生的,這時用fpts 對我來說就是額外的成本。寫什麼語言我的想法是還是盡量貼近該語言的慣例
當然只是個人想法。大大製作的入門淺顯易懂,我覺得超厲害,期待大大可以繼續製作相關影片
學到新詞彙 Tail Recursion 👍
高考有出
有人翻成尾遞歸
@@AllenKuoCode4Fun 或是尾部遞迴
你有提到那時候還沒碰過FP 那現在的你來說你會怎麼回答loop跟recursion 呢?
强推PureScript 写起来和Haskell一样 又可以避免Haskell的technical debt 还可以用FFI无缝衔接JavaScript
7:55 所以如果上司/interview被問到用 functional programming 的思維寫code到底有什麼好處
回答簡潔易明易維護就可以?
不太想到其他很大的優勢
覺得錄音品質跟語速可以再調整 除此之外內容很有趣
我也是透過面試,被問倒後再去學習補強不足的地方,coding路上學海無涯...
聽君一席話, 如聽一席話。
我把我的經驗無保留的在這邊分享了,能不能從中得到一些東西取決於個人悟性,以及在人生中所在的位置
我之前也用c#學FP,我用的是這本functional programming in c#,後來很忙就沒看完
聽你這樣一說,我之後若想重拿FP來玩的話,用c#來學不太適合了?😂
C# 應該更偏OO一點
dotNET 有 F# , 那個 F 就是 Functional
微軟有F# 啊
Haskell是FP的西瓜中间的一口,不得不品尝
学fp可以从clojure/scheme/racket/fsharp开始
Tail recursive 要compiler 支援其實還要看語言是否支援
看完影片先默默的 fork `fp-ts`...
想請問影片中有提到react會盡量把UI code 跟 state code分開,請問是怎麼分法呢?有沒有例子,因為很好奇,因為我常常把JSX 、hooks、功能都是寫同一個component 裡面
可能像是 fetch data 就會寫成 hook,取得資料之後再放到 component 裡面去呈現(?)
react上把UI 和state分開 最有名的是redux
UI = f(state)
雖然嚴格來說用container (a component that connects to the store, which is global) by definition無可能是pure的啦 (使用useSelector的一刻就已經depends on things other than input) 至少function component是這樣
其實這個要看你想以哪一個層面去看 separation of concerns
只能說jsx, hooks在同一個component/container上 是react的特點(jsx, styling, logic 全都是react 的concern)
搞一个FP系列的吧,总结一下你学习到的,
Ramda 感覺比fp ts 更好用 文件上
學FP的好處是?
scala 吧,紿終學完fp, 工作上也是要用class.
RxJs算嗎?
老师老师像我这种摆烂型不学 FP 可以吗😂 我只用 loop 我只用 OOP😂
可以呀,至少會看TH-cam影片😂
可不可以分析什麼應用適合寫FB什麼應用適合寫OOP
正在学 elixir ❤
我也是
R語言我記得就是偏向函數導向的語言,記得之前在學校學過,結果畢業出來被python屌打,不知道甚麼樣的需求會需要。不過能夠從不同的設計思路來學習一個程式語言,已經很厲害了,加油
R哪是阿==
少數見過這麼笨的玩愣
R是計算機🤣🤣
哈哈,我不是寫程式的,小丑竟是我自己,給大家見笑了!
R的purrr就很fp
我想research用的比較多吧r
啥时候 来点硬 知识,别都 弄方法论的
学rust呗
rust其實不到非常函數式