我注意到Java,Python,Perl和Haskell/Clojure對靜態函數的處理有明顯不同。特別是,在不同語言中分離靜態代碼和有狀態代碼的差異
1)靜態函數在不同語言中實現和使用的方式有哪些地方差異?
2)這些語言中的一些對其他語言的靜態和有狀態方法有更「完整」的分離和支持嗎?
例如:
Clojure中,所有功能都基本上,靜態 - 允許極端模塊化組合性,不與對象醚任何東西相關聯。 Clojure函數式編程可以向Java程序員描述,類似於靜態函數。同時,在傳統的慣用Java中,通常存在一種混合體,在這種混合體中,面向對象的特性保持內部狀態,依靠外部靜態方法進行某些常常無狀態的轉換操作。
然後就是腳本世界:我已經注意到在Perl和Python中,區分靜態和有狀態代碼的概念並沒有像過去那樣強調更新(更新:根據評論 - 也許這是由於多線程範式性質)。最後,我們擁有面向對象的PHP-5開發人員,他們在處理靜態和有狀態(對象範圍)函數時似乎與Java開發人員類似地編寫代碼。
對於來自不同背景的不同程序員如何處理靜態功能的差異,其他任何深入的見解都會幫助我通過與我合作的幾個PHP/Perl開發人員來查看代碼。
*(不是你的問題的答案,因此評論)* ...你的問題的公式化使得它聽起來像所有的非靜態方法是有狀態的。這完全不是這種情況:例如,如果您希望可以通過使用這些接口的接口和無狀態實現來編程Java(這只是一個例子,您還可以使用無狀態類擴展無狀態抽象類等) 。我知道使用Java,比如說,主要是不可變對象和無狀態類不是最常見的,但它絕對可以完成。 – TacticalCoder 2011-12-23 00:38:20
「靜態」關鍵字沒有提及任何關於函數有狀態和/或語言不同的內容。靜態的PHP/Java方法可以保持與其他代碼一樣多的狀態。 – deceze 2011-12-23 01:31:51
添加到@deceze,靜態函數可以修改靜態變量。基本上,這意味着全局變量。 – JRideout 2011-12-23 02:01:13