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




  

相关话题

  C++ 和 Java 同样是静态语言,为什么 Java 的代码提示可以做的十分强大? 
  大一下要学C++,电脑安装不上net4.0,有什么在线编程网站可以尽可能替代VS,拿来练习。? 
  python中的lambda 和java中的lambda有什么不同? 
  多核和分布式的编程环境促使产生了并发编程语言,那么它和传统的编程语言有什么本质的不同? 
  嵌入式,Java,人工智能,哪一个方向比较好? 
  c语言中的sizeof()是如何分辨数组名和指针的? 
  我编程写代码被我妈一直说成玩电脑打游戏,我该咋办? 
  天天P图中我的小学生证件照功能怎么实现的?算法是什么样? 
  如何优雅地将程序设计语言的名字翻译成汉语? 
  有没有三维的数据结构? 

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





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