effective scala(1)

effective scala(1)

空格

用两个缩进。避免每行长度超过100列。在两个方法、类、对象定义之间使用一个空白行。

命名

1.对作用于较短的变量使用短名字:is,js,ks等可以出现在循环中。

2.对作用域较长的变量使用长名字:外部APIs应该用长的,不需加以说明便可理解的名字。例如:Future.collect 而非 Future.all。

3.使用通用的缩写,避开隐秘难懂的缩写。

4.不要重新绑定名字到不同的用处:vals

5.用active命名有副作用的操作:user.activate() 而非 user.setActive()

6.对有返回值的方法用可描述的名字

7.getters不采用前缀get

8.不必重复名称在已经packager或object名称封装过的

import

1.对import行按字母顺序排序:这对视觉上的检查很方便,对自动操作也很简单。

2.当从一个包引入多个时,用花括号:

    import com.twitter.concurrent. {Broker, Offer}

3.当引入超过6个,用通配符:

    import com.twitter.concurrent._

4.当引入集合的时候,用import scala.collections.immutable(不变集合)或scala.collections.mutable(可变集合)。限定名称让读者很明确知道使用的是哪个变量。

5.不要引入来自其他包的相对引用。

6.将import放在文件的头部:读者可以在一个地方参考所有的引用。

花括号

花括号用于创建符合表达式,符合表达式的返回值是最后一个表达式。避免对简单的表达式采用花括号,写成;

    def square(x: Int) = x * x

而不是:
    def square(x: Int) = {
        x * x
    }

尽管它用在区分方法体的语句构成很诱人,第一种选择更不会凌乱,更容易读。避免语句上的繁文缛节,除非需要阐明。

模式匹配

每当可应用的时候,直接在函数定义的地方使用模式匹配。例如,下面的写法match应该被折叠起来

    list map { item => item match{
            case Some(x) => x
            case None => defaut
        }
    }

    用以下写法代替:
    list map {
        case Some(x) => x
        case None => defaut
    }

它很清晰的表达了list中元素被映射,间接的方式让人很不容易明白

注释

使用ScalaDoc提供Api文档。用以下的风格:
    /**
     * ServiceBuilder builds services
     *
     */

不要诉诸于ASCII码艺术或者其他可视化修饰。用文档记录APIs但不要添加不必要的注释。如果你发现你添加注释解释你代码行为,先问问自己是否可以调整结构让它明晰哪的可以看出做了什么。

类型和泛型

类型系统的首要目的是检测程序错误,类型系统有效的提供了一个静态检测的有限形式,允许我们代码中明确某种类型的变量并且编译器可以验证。类型系统当然也提供了其他好处,但错误检测事它存在的理由。

我们使用类型系统反映这一目标,但读者需要留心:正确的使用类型可以增加清晰度,而过分聪明只会迷乱。

返回类型注释

Scala允许返回类型是可以省略的,而注释提供了很好的文档:这对public方法特别重要。而一个方法不需要对外暴露并且它的返回类型是显而易见的,则可以直接省略。

这对用混入(mixin)实例化对象时很重要,scala编译器为这些创造了单例。例如:

    trait Service


    def make() = new Service{
        def getId = 123
    }

上面的make不需要定义返回类型为Service;编译器会创建一个加工过的类型:Obejct with Service{def getId:Int}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值