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




  

相关话题

  既然有些人喜欢开挂,为啥不开发一款网游,提供编程接口,允许玩家自行用各种软件,同时允许计算机参与计算? 
  为什么很多人喜欢 Python? 
  为什么很多新型编程语言都抛弃了 C 语言风格的 for 语句? 
  本科学的电气,在国企混了两年,现从头学java,和那些本科计算机软件专业的相比,是否存在明显的劣势? 
  各种编程语言的成功/代表产品有哪些? 
  为什么主流的编程语言没有一个是中国人开发的? 
  项目组里的代码审查员要我把代码写的很啰嗦,怎么办? 
  儿童学编程,教什么编程语言好? 
  以下十种编程语言能在未来替代 Java 和 C 语言么? 
  为何 Boost 的 Asio 要使用 Proactor 模式实现? 

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





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