百科问答小站 logo
百科问答小站 font logo



怎么避免写Java风格的Scala代码? 第1页

  

user avatar   atry 网友的相关建议: 
      

不用避免。Scala是一门多范式编程语言,你可以同时使用多种范式,包括:

  1. Java风格(例如:ThoughtWorksInc/each
  2. Haskell风格(例如:scalazCats
  3. C++风格(例如:template.scala
  4. Idris风格(例如:milessabin/shapeless
  5. PHP风格(例如:Binding.scala
  6. 抽象工厂模式(例如:feature.scala/Factory
  7. 利用Haskell风格实现C++功能(例如:RAII.scala
  8. 利用抽象工厂模式解决Expression Problem(例如:DeepLearning.scala

Scala的语言特性不算多,但是语言特性之间过于正交,一方面你把语言特性组合起来之后可以变得很复杂,写出各种其他语言的范式,另一方面容易玩脱。

不想玩脱的话,就得优先选用功能最弱的功能。只在弱的功能解决不了你面临的问题时,才用更强的功能。

李浩毅写了一篇Strategic Scala Style: Principle of Least Power,列举了面对各种状况下应该选择的语言功能。李浩毅和我一样,也写了许多Scala库,其中用各种Scala功能组合出强大的范式。然而,李浩毅认为该在默认情况下用的最弱功能却和这些高级范式无关,而是:

  1. 尽量用不可变值(相当于Java的final变量)
  2. 采用静态函数和内置数据结构设计API
  3. 尽量使用JavaSE和Scala标准库的内置数据结构
  4. 用Option代替异常处理和null
  5. 尽量让函数立即返回值,而不要用异步编程
  6. 手动传递参数,不要搞依赖注入

按李浩毅的意思,首选的Scala风格大致和Java风格一个样,甚至可能比一般的Java风格还要弱,因为不允许使用非final的变量了。

你可以看到Scala的创始人Martin Odersky也在李浩毅博客下面举双手赞成。所以,Scala社区公认的首选Scala风格就是阉割版的Java风格,不但不需要避免,反而应该是你追求的目标。




  

相关话题

  携程为什么突然技术转型从 .NET 转 Java? 
  如果一定要在C++和JAVA中选择,是C++还是java? 
  为什么有很多人执着于中文编程? 
  脚本语言是必然趋势,在开发成本面前,其他都是浮云。现在的问题是,把解释语言转成编译语言的转换器,如Java的JIT compiler,你认为最近Facebook开源的JIT PHP编译器及虚拟机,是否可以提供这种可能性? 
  为什么下面程序递归计算斐波那契数列java比c++要快? 
  如果《纸牌屋》成功是因为大数据,为什么 Netflix 自制的《铁杉树丛》《女子监狱》等其他剧集却没有大热? 
  Java中,有一个for循环调用网络api很耗时,请问如何减少耗时? 
  如何系统、科学地自学编程知识? 
  未来编程会不会成为一个人人都有的能力,从而程序员的高薪不再? 
  如果你们想要自创一个编程语言,你们希望它有什么特色? 

前一个讨论
相比于时下流行的机器学习方法(联接主义),传统的人工智能方法(符号主义)有什么独一无二的优势?
下一个讨论
挪威奢华监狱是出于哪方面考虑建立的?是否会对犯罪率造成影响?





© 2025-03-19 - tinynew.org. All Rights Reserved.
© 2025-03-19 - tinynew.org. 保留所有权利