从语句到表达式

最后更新于:2022-04-01 23:05:27

> 语句(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 在后续的代码中被更改(编译时排错) 很多时候,我们编程时说的安全并不是指怕被黑客破坏掉,而是预防自己因为逗比而让程序崩了.
';