不要進行無謂的OOP與FP爭論 - Mathias Verraes
https://twitter.com/mathiasverraes/status/1153615691397943297
我希望我們無需爭論OOP與FP,而應該開始辯論個人正規化。不可變性,封裝,全域性狀態,單一賦值,actor模型,純函式,型別系統中的IO,繼承,組合......所有這些在OOP或FP中都是完全可能的。
有些更好,有些更糟糕,有些高度依賴於背景,讓我們想出來,而不是像OOP和FP一樣抨擊傘術語。並且可能還有更多的範例需要發現。
在Haskell中,您可以為一個模組選擇不匯出型別建構函式,只匯出在資料結構上執行的智慧建構函式和操作函式。聽起來很接近封裝
IO: 你能使用Ports&Adapters模式,遷移你的IO到系統邊緣,沒有理由不移植到型別系統,也沒有理由讓其成為FP語言的專利。
Lambdas:不再是FP獨有的。PHP有一個功能,您可以使用__invoke將物件基本上轉換為lambda。您可以使用它來做一些讓人想起Reader Monad或Writer Monad的事情。不完全相同但具有相似的語義。
我的假設是FP的許多支持者都是專門從事不良OOP系統和良好FP系統工作的人,但從來沒有在良好的OOP和糟糕的FP系統中工作過。
遺產通常是糟糕OOP的典型代表。透過將其替換為“組合”,您可以更好地實現任何繼承。但是我們可以透過討論何時何地不使用繼承來啟發討論來改進討論,而不是完全解僱它。
我希望我們無需爭論OOP與FP,而應該開始辯論個人正規化。不可變性,封裝,全域性狀態,單一賦值,actor模型,純函式,型別系統中的IO,繼承,組合......所有這些在OOP或FP中都是完全可能的。
有些更好,有些更糟糕,有些高度依賴於背景,讓我們想出來,而不是像OOP和FP一樣抨擊傘術語。並且可能還有更多的範例需要發現。
在Haskell中,您可以為一個模組選擇不匯出型別建構函式,只匯出在資料結構上執行的智慧建構函式和操作函式。聽起來很接近封裝
IO: 你能使用Ports&Adapters模式,遷移你的IO到系統邊緣,沒有理由不移植到型別系統,也沒有理由讓其成為FP語言的專利。
Lambdas:不再是FP獨有的。PHP有一個功能,您可以使用__invoke將物件基本上轉換為lambda。您可以使用它來做一些讓人想起Reader Monad或Writer Monad的事情。不完全相同但具有相似的語義。
我的假設是FP的許多支持者都是專門從事不良OOP系統和良好FP系統工作的人,但從來沒有在良好的OOP和糟糕的FP系統中工作過。
遺產通常是糟糕OOP的典型代表。透過將其替換為“組合”,您可以更好地實現任何繼承。但是我們可以透過討論何時何地不使用繼承來啟發討論來改進討論,而不是完全解僱它。
相關文章
- 堅持原則,但是不要做無所謂的爭吵
- 結合CYNEFIN框架對DDD真正的定位 - Mathias Verraes框架
- OOP和FP錯在哪裡?OOP
- 從OOP和FP看蘋果Swift語言與Scala比較OOP蘋果Swift
- 領域建模的啟發,不同行業對模型的破壞力不同 - Mathias Verraes行業模型
- 不要再爭論程式碼風格了!
- REST與GraphQL的爭論REST
- DDD設計中領域模型是否可以依賴第三方? - Mathias Verraes模型
- Mathias Verraes:軟體設計中,越小越好,粒度越細越好往往是一種壞建議
- 軟體開發者:豬與雞的爭論?
- Java 理論與實踐: 關於異常的爭論Java
- 如何減少無謂的資源消耗?如何在倉庫拓撲中進行 SOC 設計?
- 不要浪費時間去寫所謂的完美程式碼
- FP-Growth演算法全解析:理論基礎與實戰指導演算法
- for迴圈裡面不要進行remove操作REM
- 使用tensorrt對ram++模型進行fp16精度加速指導模型
- 使用 chunkById 方法的時候請不要進行排序排序
- 謂詞下推:計算和儲存分開進行分析是低效的?
- 討論:何謂擴充套件用例?套件
- 博弈論進階之樹的刪邊遊戲與無向圖的刪邊遊戲遊戲
- 幽默:容器派與無伺服器派的爭鬥伺服器
- 無論在多麼奇怪的地方看見 Linux 你都不要吃驚Linux
- 小解謂詞 access 與 filterFilter
- 所謂的執行緒安全問題執行緒
- 基於FP-Growth演算法進行資料集中頻繁項集挖掘演算法
- 執行計劃-4:謂詞的選擇時機與使用細節
- Epic VS 蘋果 Part 2:爭論焦點與Xbox的入場蘋果
- Java 理論與實踐: 用動態代理進行修飾Java
- 利用NABCD模型進行競爭性需求分析模型
- FP-Growth演算法之FP-tree的構造(python)演算法Python
- 事件溯源:是來自事件的狀態與作為狀態的事件? - verraes事件
- 對菜鳥開發者的忠告:花一萬個小時練習 Coding,不要浪費一萬小時無謂地 Debugging
- 一個無競爭的快取快取
- 乙女遊戲:爭論背後遊戲
- 是否要做Code Review?與BAT資深架構師爭論之後的思考ViewBAT架構
- 大資料爭論:批處理與流處理的C位之戰大資料
- 併發王者課-黃金3:雨露均沾-不要讓你的執行緒在競爭中被“餓死”執行緒
- 關於模式爭論的一點點思考模式