,這樣你可以在未來輕鬆地讓你的程序併發。你試圖讓你的代碼的功能如何?
回答
我專注於使項目不可變。不可變對象允許您比「線程安全」對象更容易推斷多線程代碼。該對象具有一個可以在線程之間傳遞而沒有任何同步的可見狀態。它考慮了多線程編程。
如果您有興趣,我已經發表了很多關於不可變對象的工作,特別是代碼庫上的不可變集合。該項目的名稱是RantPack。在收集區我有
- ImmutableCollection <牛逼>
- ImmutableMap < TKEY的,TValue >
- ImmutableAvlTree <牛逼>
- ImmutableLinkedList <牛逼>
- ImmutableArray <牛逼>
- ImmutableStack <Ť>
- ImmutableQueue <Ť>
有一個額外的墊片層,其(CollectionUtility),這將產生實現BCL接口如IList的<Ť>和ICollection的<Ť>包裝對象。他們不能完全實現接口,因爲它們是不可變的,但是所有可能的方法都被實現了。
包含單元測試的源代碼(C#)也可在網站上找到。
請勿使用成員變量或全局變量。使用本地堆棧的函數/方法。當一個方法僅使用內部作用域變量和調用參數並使用out/inout/reference參數或返回值返回所有信息時,它是可用的。
我主要用Java編程。我正在耐心等待關閉語言的日子。但是由於我仍然停留在Java 1.4.2上,即使它們被添加了,這對我來說也不是很長時間!
也就是說,我的主要「功能性」編程方式是大量使用「最終」關鍵字。我試圖讓儘可能多的類完全不可變,而其餘的則在瞬態和不可變之間有明確的區別。
+1爲「最終」 - 不變性是你的朋友。如果您使用其中一種功能性JVM語言(例如Clojure或Scala),您也不需要等待關閉:-) – mikera 2011-03-08 16:40:29
下面是關於rubyconf 2008的主題討論,主要以ruby爲中心,但幾個概念仍然有效。
http://rubyconf2008.confreaks.com/better-ruby-through-functional-programming-2.html
- 1. 你如何測試非功能代碼?
- 2. 你怎麼能讓你的C#代碼漂亮?
- 3. 你如何讓別人相信你的代碼並使用它?
- 4. 你如何組織你的Javascript代碼?
- 5. 你如何組織你的代碼?
- 6. 你如何修改你的代碼?
- 7. 你如何構建你的jQuery代碼?
- 8. 你如何使用gdb來調試你的代碼?
- 9. 我如何讓我的代碼說「你不能分爲0」
- 10. 你會如何測試這些功能?
- 11. 你如何評論PHP功能內的代碼?
- 12. 你如何測試Java EE代碼?
- 13. 你如何測試CocoaPod代碼?
- 14. 你如何測試GWT代碼?
- 15. 你能解釋Norvig的Sudoku代碼中的賦值功能嗎?
- 16. Flash程序員:你如何讓你的代碼反編譯證明?
- 17. 如何讓我的代碼在功能
- 18. 你如何測試你的emberjs路線?
- 19. 你如何測試你的Request.QueryString []變量?
- 20. 你如何編寫你的QTP測試?
- 21. 你如何測試你的Cocoa GUI?
- 22. 你如何使用vim的quickfix功能?
- 23. javascript單元測試:你如何跟蹤你寫的所有測試和你有什麼代碼覆蓋?
- 24. 你如何以'root'的身份臨時運行你的代碼?
- 25. 你如何讓jQuery的
- 26. 你用什麼來測試你的C++代碼?
- 27. 你如何讓你的提交登錄按鈕帶你到你的PHP頁面?
- 28. 你如何讓PHP
- 29. 測試你的代碼速度?
- 30. 你用什麼工具編寫jQuery代碼並調試你的代碼?
你沒有涵蓋這一切:[...]不使用I/O函數或函數返回隨機值等,基本上不會有副作用的使用功能。 – Claymore 2008-12-09 09:07:29