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




  

相关话题

  JavaScript 如果拥有多线程能力会怎样? 
  如何在一个月内提高 C++ 水平? 
  win7笔记本,外接扩展显示器,如何在不缩小外接显示器像素的同时去除外接显示器的桌面背景黑边? 
  计算机专业大一能写出 Hello World 程序是什么水平? 
  c#中,is或者as做类型转换是否影响效率,有必要缓存吗? 
  如何从只会 C++ 语法的水平到达完成项目编写软件的水平? 
  程序员如何快速工资翻倍? 
  为啥 Erlang 没有像 Go、Scala 语言那样崛起? 
  随着互联网的崛起,还有必要学习 C++ 吗?貌似 C++ 越来越难找工作了... 
  如何看待马蜂窝被指游记、评论抓取抄袭其他旅游平台,大量内容和抽奖造假一事? 

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





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