關於面向對象編程中的模式,我們有一本非常好的GoF書籍(設計模式:可重用面向對象軟件的元素),以及大量關於此的文章和資源學科。面向功能,動態和麪向方面編程的模式
有沒有關於函數式編程模式(最佳實踐)的書籍(文章,資源)?
對於Python和Ruby等語言的動態編程?
對於AOP?
關於面向對象編程中的模式,我們有一本非常好的GoF書籍(設計模式:可重用面向對象軟件的元素),以及大量關於此的文章和資源學科。面向功能,動態和麪向方面編程的模式
有沒有關於函數式編程模式(最佳實踐)的書籍(文章,資源)?
對於Python和Ruby等語言的動態編程?
對於AOP?
之前曾詢問過相關的問題:"Does functional programming replace GoF design patterns",回覆很好。
「設計模式」的等價物在FP中非常模糊。一般來說,每當你在你的代碼中看到一個「模式」時,你應該創建一些東西以統一的方式覆蓋它的所有用途。通常它會是一個高階函數。
例如,下面的C代碼
for (int i = 0; i < n; i++)
if (a[i] == 42)
return true;
return false;
可以認爲一些基本的「設計模式」 - 檢查是否有名單上的一些特殊元素。這段代碼可能會在具有不同條件的代碼中出現很多次。在FP中,您只需多次使用高階函數。這不再是「模式」。函數式編程有其自己的做法,但它們與OOP中的「設計模式」有很大的不同。它們包括使用多態性,列表,高級功能,不變性/純度,懶惰[並非所有的都是必不可少的或特定於FP] ...另見 "what are core concepts of FP"。此外,輸入類(Haskell中),模塊和函子(OCaml的),continuations,monads,zippers,finger trees,monoids,arrows,applicative functors,monad transformers,許多purely functional data structures(book)等Functional pearls,已經通過蘭德爾舒爾茨提到的,形成一個非常豐富FP的資源處於最佳狀態。要學習如何編寫慣用代碼,任何有關函數式編程語言的書籍/資源都足以支持IMHO(例如,RWH和LYAH);那裏總是解釋思考必然性和功能性之間的差異。
在動態語言中,Jeff Foster的鏈接是一個好集合; here是一個非常聰明的使用JavaScript的memoization,可以被認爲是「設計模式」。
一個環節有一個Design patten in Ruby。
除了在GOF中提到的設計模式,它還列出了一些其他模式,如Convention over Configuration。
函數式編程設計模式的規範集不是功能性珍珠(之一)嗎?
GoF中描述的設計模式列表是爲C++和Java等語言編寫的。它有時被認爲是使僵化的語言更具動態性的解決方法列表。例如,Visitor模式在Ruby中並不是真的需要,因爲您可以在運行時簡單地將添加成員函數更改爲類。如果你可以使用mixin,Decorator模式已經過時了。
這是我的經驗,當我在C++中實現解決方案時,我傾向於花大部分時間編寫腳手架代碼。我首先創建一個平臺,讓我可以在應用程序的程序域中進行思考。設計模式可能是爲了對不同種類的腳手架進行分類而開發的。
我應該提到,當我在Ruby中編程時,我沒有太多的支持代碼。似乎並不需要它。
我的理論是,其他語言不強調設計模式的概念,只是因爲他們的基本語言結構足夠。爲了保護Java和C++:也許這是因爲函數和AOP語言經常用於更具體的問題域或壁龕,而Java和C++則用於一切。
現在爲了不同的東西。如果您對面向對象設計感到有點無聊,並且想要學習新的東西,那麼您可能對Stepanov編寫的書Elements of Programming感興趣。在這本書中,他解釋瞭如何從數學的角度來看待編程。有關預覽,請查看他的Class notes(適用於Adobe的this page)。您可能也對Adobe的Collected Papers感興趣。
部分我同意你的意見。但是,例如,功能語言有一組類似的功能來處理該領域的常見任務 - 考慮monads /工作流或模式匹配或流水線。另外,例如,Python這樣的動態和靈活的語言傳達了Decorator模式,即使它是內置於語言中的。 –
個人我最重要的動態語言模式 - 寫測試。這比靜態類型語言更重要。
我是唯一一個在使用動態編程來描述動態語言編程時遇到問題的人嗎?該術語已被採納。這就像.NET人在使用「強類型」時表示「靜態類型」。 – orip
^沒有。它也困擾我很多。 – Sneakyness