Scala flexible syntax: bad or good?
Scala 风格太多变了,做一件事可以有N 条路,这是好还是坏?
比如声明一个方法:
val multiply = (x:Int) => x * x
def multiply(x : Int) : Int = {
return x * x;
}
这方法都可以用 multiply(3) 来调用。当然你完全可以说前一种是把匿名方法赋值给常量multiply。但是在我看来,这只是修辞上的问题,对结果并无影响。如果说上面这种还有说辞,那请看下面的代码:
val aaa = 1 to 3
val bbb = 1.to(3)这两种形式是完全等价的,只是在写法上有区别而已。
在语句分割上Scala 也采取了比较灵活的方式,一行是一条语句,如果想把两条语句放在同一行,可以用分号分隔。上面的常量声明可以像下面一样写在一行:
val aaa = 1 to 3; val bbb = 1.to(3);当然即使分开写成两行,也可以把分号用作一条语句的结束。
上面只是最基本的两点,还有其他的一些诡异的地方。老实说这很大程度上是因为我对Scala 还不是那么熟悉,以致我在刚开始摸Scala 的时候无所适从,嗯,其实刚开始摸什么都是一样-_-!
只有一个参数的方法调可以用 object method argument 的方式,Python 也有类似的情形。不过对Scala,我采用了对待Python 同样的方式,直接忘记这种写法,只记得object.method(argument),毕竟这和多个参数的写法一致。
还有一处乍看起来很迷惑,但是如果糊里糊涂起来却很自然的地方,Scala 的类型推断。大部分的强类型语言中,我们都习惯于先声明变量的类型,然后再进行操作,像继承自C 的编程语言,基本都是这个路子。弱类型语言不是这样的,弱类型基本是采用了推断的方式,即看变量被赋予了什么样的值。比如看下面的循环:
for ( i <- 1 to 2 ) {
println( "No." + i )
}变量 i 并没有指定是何类型, 但是完全可以通过1、2 来推定是Int 。 很自然不是吗?
使用Scala,既可以写命令式的代码,也可以写函数式的代码。命令式的代码就不用说了,C家族的语言到现在基本都是命令式的。函数式的代码可以把函数作为方法传到函数内,下面是个简单的例子:

Recent comments
1 sec ago
13 hours 50 min ago
6 days 23 hours ago
21 weeks 4 days ago
23 weeks 4 hours ago
1 year 9 weeks ago
1 year 9 weeks ago
1 year 9 weeks ago
1 year 15 weeks ago
1 year 22 weeks ago