> 语句(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"
}
~~~
> 这样做的好处都有啥?
1. 代码简练,符合直觉
2. urlString 是值而不是变量,有效防止 urlString 在后续的代码中被更改(编译时排错)
很多时候,我们编程时说的安全并不是指怕被黑客破坏掉,而是预防自己因为逗比而让程序崩了.