我注意到Java,Python,Perl和Haskell / Clojure对静态函数的处理方式截然不同。特别是,
1)静态函数在不同语言中的实现和使用方式有哪些惯用差异。
2)这些语言中的某些语言是否比其他语言具有“更完整”的分离和支持静态与有状态方法?
例如:
在clojure中,所有函数基本上都是静态的 - 允许极端的模块化可组合性,与对象以太任何东西无关。 Clojure函数式编程可以像java程序员一样描述为静态函数。
与此同时,在传统惯用Java中,通常会有一种混合,其中面向对象的特性维持内部状态,依赖于外部静态方法来进行某些通常无状态的转换操作。
然后,有脚本世界:我注意到在Perl和Python中,区分静态代码和有状态代码的概念并没有那么强调(更新:根据评论 - 可能这是由于多范式性质)。
最后,我们有面向对象的PHP-5开发人员,他们似乎在处理静态与有状态(对象作用域)函数时类似于java开发人员。
对不同程序员(来自不同背景)处理静态功能的差异的任何其他见解真的有助于我与我合作的一些PHP / Perl开发人员一起审查代码。
答案 0 :(得分:1)
相关的区别可能是语言所强调的编程范式。 Haskell&等Functional种语言Clojure旨在消除副作用并强调决定论;封装可变性或状态就像monad一样。这与Imperative语言形成对比。 Perl& PHP是多范式语言,因此可以实现命令式样式,如过程式和面向对象的编码,甚至可以模拟功能样式。
在与命令式程序员合作时,可能值得关注松散耦合和无副作用的设计模式,例如Dependency Injection。