> 語句(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 在后續的代碼中被更改(編譯時排錯)
很多時候,我們編程時說的安全并不是指怕被黑客破壞掉,而是預防自己因為逗比而讓程序崩了.