scala 从入门到入门 .pdf
文本预览下载声明
目 录
概述
从语句到表达式
纯函数和非纯函数
惰性求值/Call by name
Tuple/case class/模式匹配
用 option 代替 null
用Try类保存异常
函数是一等公民
关于性能
推荐资源
本文档使用 看云 构建 - 2 -
概述
概述
原文出处 :http///a/1190000003068853
作者 :笋干太咸
新手向,面向刚从java过渡到scala的同学,目的是写出已已易于维护和阅读的代码.
本文档使用 看云 构建 - 3 -
从语句到表达式
从语句到表达式
语句(statement) 一段可执行的代码
表达式(expression) 一段可以被求值的代码
在Java中语句和表达式是有区分的,表达式必须在return或者等号右侧,而在scala中,一切都是
表达式.
一个例子
假设我们在公司的内网和外网要从不同的域名访问一样的机器
//Java代码
String urlString null;
String hostName InetAddress.getLocalHost().getHostName();
if (isInnerHost(hostName)) {
urlString http://inner.host;
} else {
urlString http://outter.host;
}
刚转到scala的人很可能这么写
var urlString: String null
var hostName InetAddress.getLocalHost.getHostName
if (isInnerHost(hostName)) {
urlString http://inner.host
} else {
urlString http://outter.host
}
我们让它更像scala一点吧
val hostName InetAddress.getLocalHost.getHostName
val urlString if (isInnerHost(hostName)) {
http://inner.host
} else {
http://outter.host
}
这样做的好处都有啥?
本文档使用 看云 构建 - 4 -
从语句到表达式
1. 代码简练,符合直觉
2. urlString 是值而不是变量,有效防止 urlString 在后续的代码中被更改(编译时排错)
很多时候,我们编程时说的安全并不是指怕被黑客破坏掉,而是预防自己因为逗比而让程序崩
了.
本文档使用 看云 构建 - 5 -
纯函数和非纯函数
纯函数和非纯函数
纯函数 (Pure Function )是这样一种函数——输入输出数据流全是显式 (Explicit )的。
显式 (Explicit )的意思是 ,函数与外界交换数据只有一个唯一渠道——参数和返回值 ;函数
从函数外部接受的所有输入信息都通过参数传递到该函数内部 ;函数输出到函数外部的所有
信息都通过返回值传递到该函数外部。
如果一个函数通过隐式 (Implicit )方式 ,从外界获取数据 ,或者向外部输出数据 ,那么 ,该
函数就不是纯函数 ,叫作非纯函数 (Impure Function )。
隐式 (Implicit )的意思是 ,函数通过参数和返回值以外的渠道 ,和外界进行数据交换。比
如 ,读取全局变量 ,修改全局变量 ,都叫作以隐式的方式和外界进行数据交换 ;比如 ,利用
I/O API (输入输出系统函数库 )读取配置文件 ,或者输出到文件 ,打印到屏幕 ,都叫做隐式
的方式
显示全部