没有合适的资源?快使用搜索试试~ 我知道了~
Scala编码规范(来自zhangyi教练博客)1
需积分: 0 0 下载量 97 浏览量
2022-08-03
15:51:52
上传
评论
收藏 490KB PDF 举报
温馨提示
试读
37页
1. 格式与命名 2. 语法特性 3. 编码风格 4. 高效编码 5. 编码模式 6. 测试
资源详情
资源评论
资源推荐
内部公开 Internal Use Only▲
<以上所有信息均为中兴通讯股份有限公司所有,不得外传>
All Rights reserved, No Spreading abroad without Permission of ZTE
第 1 页
Scala 编码规范---by zhangyi(教练)
这是我去年在一个 Scala 项目中结合一些参考资料和项目实践整理的一
份编码规范,基于的 Scala 版本为 2.10,但同时也适用于 2.11 版本。
参考资料见文后。整个编码规范分为如下六个部分:
1. 格式与命名
2. 语法特性
3. 编码风格
4. 高效编码
5. 编码模式
6. 测试
格式与命名
1) 代码格式
用两个空格缩进。避免每行长度超过 100 列。在两个方法、类、对象定
义之间使用一个空白行。
2) 优先考虑使用 val,而非 var。
3) 当引入多个包时,使用花括号:
import jxl.write.{WritableCell, Number, Label}
内部公开 Internal Use Only▲
<以上所有信息均为中兴通讯股份有限公司所有,不得外传>
All Rights reserved, No Spreading abroad without Permission of ZTE
第 2 页
当引入的包超过 6 个时,应使用通配符_:
import org.scalatest.events._
4)若方法暴露为接口,则返回类型应该显式声明。例如:
def execute(conn: Connection): Boolean = {
executeCommand(conn, sqlStatement) match {
case Right(result) => result
case Left(_) => false
}
}
5) 集合的命名规范
xs, ys, as, bs 等作为某种 Sequence 对象的名称;
x, y, z, a, b 作为 sequence 元素的名称。
h 作为 head 的名称,t 作为 tail 的名称。
6)避免对简单的表达式采用花括号;
//suggestion
内部公开 Internal Use Only▲
<以上所有信息均为中兴通讯股份有限公司所有,不得外传>
All Rights reserved, No Spreading abroad without Permission of ZTE
第 3 页
def square(x: Int) = x * x
//avoid
def square(x: Int) = {
x * x
}
7) 泛型类型参数的命名虽然没有限制,但建议遵循如下规则:
A 代表一个简单的类型,例如 List[A]
B, C, D 用于第 2、第 3、第 4 等类型。例如:
class List[A] {
def mapB: List[B] = ...
}
N 代表数值类型
注意:在 Java 中,通常以 K、V 代表 Map 的 key 与 value,但是在 Scala
中,更倾向于使用 A、B 代表 Map 的 key 与 value。
语法特性
1) 定义隐式类时,应该将构造函数的参数声明为 val。
2)使用 for 表达式;如果需要条件表达式,应将条件表达式写到 for
内部公开 Internal Use Only▲
<以上所有信息均为中兴通讯股份有限公司所有,不得外传>
All Rights reserved, No Spreading abroad without Permission of ZTE
第 4 页
comprehension 中:
//not good
for (file <- files) {
if (hasSoundFileExtension(file)
&& !soundFileIsLong(file)) {
soundFiles += file
}
}
//better
for {
file <- files
if hasSoundFileExtension(file)
if !soundFileIsLong(file)
} yield file
通常情况下,我们应优先考虑 filter, map, flatMap 等操作,而非 for
内部公开 Internal Use Only▲
<以上所有信息均为中兴通讯股份有限公司所有,不得外传>
All Rights reserved, No Spreading abroad without Permission of ZTE
第 5 页
comprehension:
//best
files.filter(hasSourceFileExtension).filterNot(soundFileI
sLong)
3) 避免使用 isInstanceOf,而是使用模式匹配,尤其是在处理比较复杂
的类型判断时,使用模式匹配的可读性更好。
//avoid
if (x.isInstanceOf[Foo]) { do something …
//suggest
def isPerson(x: Any): Boolean = x match {
case p: Person => true
case _ => false
}
4)以下情况使用 abstract class,而不是 trait:
想要创建一个需要构造函数参数的基类
剩余36页未读,继续阅读
柔粟
- 粉丝: 25
- 资源: 305
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0