加载中...

从语句到表达式


语句(statement): 一段可执行的代码
表达式(expression): 一段可以被求值的代码

在Java中语句和表达式是有区分的,表达式必须在return或者等号右侧,而在scala中,一切都是表达式.

一个例子:
假设我们在公司的内网和外网要从不同的域名访问一样的机器

  1. //Java代码
  2. String urlString = null;
  3. String hostName = InetAddress.getLocalHost().getHostName();
  4. if (isInnerHost(hostName)) {
  5. urlString = "http://inner.host";
  6. } else {
  7. urlString = "http://outter.host";
  8. }

刚转到scala的人很可能这么写

  1. var urlString: String = null
  2. var hostName = InetAddress.getLocalHost.getHostName
  3. if (isInnerHost(hostName)) {
  4. urlString = "http://inner.host"
  5. } else {
  6. urlString = "http://outter.host"
  7. }

我们让它更像scala一点吧

  1. val hostName = InetAddress.getLocalHost.getHostName
  2. val urlString = if (isInnerHost(hostName)) {
  3. "http://inner.host"
  4. } else {
  5. "http://outter.host"
  6. }

这样做的好处都有啥?

  1. 代码简练,符合直觉
  2. urlString 是值而不是变量,有效防止 urlString 在后续的代码中被更改(编译时排错)

很多时候,我们编程时说的安全并不是指怕被黑客破坏掉,而是预防自己因为逗比而让程序崩了.


还没有评论.