百科问答小站 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风格,不但不需要避免,反而应该是你追求的目标。




  

相关话题

  有哪些程序员特有的习惯? 
  在编程中有没有巧妙运用数学知识解决过问题? 
  选用什么云服务器做编程学习比较好? 
  互联网行业会被培训机构毁掉吗? 
  请问大家一开始是怎么学编程的? 
  你什么时候对 Java 感到绝望? 
  程序员的你,有哪些炫技的代码写法? 
  为什么很多人喜欢 Python? 
  为什么asp.net没能比php更流行? 
  有什么高质量的现代 C++ 风格的开源代码? 

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





© 2024-11-21 - tinynew.org. All Rights Reserved.
© 2024-11-21 - tinynew.org. 保留所有权利