Dean Wampler谈编程语言(2)

来源:互联网 发布:知乎专栏 张若昀 编辑:程序博客网 时间:2024/06/06 01:23

问:你谈到这种易变性,对于使用主流语言和Java的人来说,改变事物会变得非常容易。你告诉我在Scala中不要改变事物,但是语言本身不限制我不去怎么做,所以,我猜Scala中你能难做出正确的选择,因为你会有多种选择。你是怎么认为的?你的经验中是否出现过这个问题?

 

是的。这是一个潜在的问题,一个好的程序员总是会主动寻找把事件做得更好的方法,或者回退原来的方法,让我们称呼这类人为“冒险家(riskier approaches)”。当前来说,易变性存在的风险还不是很大。在Clojure中也有一种诉求,他们希望将不变性做为一个原则,这样就不容易写出不正确的代码了,我认为这点很好。我个人的观点是,一个好的软件工匠(Software Craftsman)会尽量做正确的事情,会学习尽量地避免易变性,而且仅仅在它有必要。他们知道的情况是,不会对这种正在发生的事情进行妥协。

 

问:你刚才提到因为和JVM存在一些互操作,所以你不得不做了一些权衡,例如你接受了null。Scala里面有option类型,这个和null在概念上是一致的,而且更加干净。尽管你拥有了Java中的null,你依然不得不在同一个时刻处理它,例如,如果一个object是null的情况。对于这种权衡,你是怎么认为的,你依然会把这种遗留物和功能放进语言里面吗?

 

是的,总而言之,这种权衡是值得做的。在现实的世界里面,有太多的项目存在于Java的世界当中,会有大量的Java代码,既不能抛弃也不能取代。另外还有大量的第三方Java软件,这是你不得不考虑的,也正是因为如此,Scala给了你一种解决潜在问题的方式。你可以做一些这样的事情,在你需要检查null的地方,封装一个Java的API来检查null,再封装一个Scala的API来检查option。

 

我认为你会有两条最好的原则,这得益于那些据有15年历史Java遗留代码,提供你一个API,或者一种DSL,提供你以一种现代语言的方式,就像option vs null,和功能化的ADM终止(the functional ADM closures),等等。我认为这就是做事的最好方式。这是非常实用的解决方案。如果我们可以放弃null,并且让函数化变得更完美,以及面对API化,那会是很好的,当是我们不能这么做。所以,我们妥协了。

 

【原文链接:http://www.infoq.com/interviews/wampler-programming-language】

 

原创粉丝点击