不同语言中静态代码和有状态代码分离的差异


Differences in separation of static and stateful code in different languages

我注意到Java、Python、Perl和Haskell/Clojure对静态函数有明显不同的处理方式。特别是

1)在不同的语言中,静态函数的实现和使用方式有什么习惯上的差异

2)这些语言中是否有一些比其他语言"更完整"地分离和支持静态和有状态方法?

例如:

在clojure中,所有函数本质上都是静态的——允许极端的模块化可组合性,不与对象中的任何东西相关联。对java程序员来说,clojure函数式编程可以描述为类似于静态函数。

与此同时,在传统的惯用Java中,通常存在一种混合,其中面向对象的特性维护内部状态,依赖外部静态方法进行某些通常是无状态的转换操作。

然后,是脚本世界:我注意到在Perl和Python中,区分静态代码和有状态代码的概念并没有那么强调(更新:根据注释-也许这是由于多范式的性质)。

最后,我们有面向对象的PHP-5开发人员,他们在处理静态和有状态(对象作用域)函数方面似乎与java开发人员类似。

对于来自不同背景的不同程序员如何对待静态功能的差异,任何其他见解都将真正帮助我与一些与我一起工作的PHP/Perl开发人员一起审查代码。

相关的区别可能是语言所强调的编程范式。函数式语言,如Haskell &Clojure旨在消除副作用并强调决定论;封装可变性或状态,就像单子一样。这与命令式语言形成对比。Perl和PHP是多范式语言,因此可以实现命令式风格,如过程式和面向对象编码,甚至可以模拟函数式风格。

在与命数式程序员合作时,关注松耦合和无副作用的设计模式(如依赖注入)可能是值得的。