Scala是一门神奇的语言,作为一个JVM上的编译型语言,它居然有着自己的解释器(Java其实也有)。例如在shell上面输入scala就会进入下面的页面:
代码语言:javascript复制$ scala
Welcome to Scala version 2.10.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_121).
Type in expressions to have them evaluated.
Type :help for more information.
scala>
除了可以使用界面直接和Scala交互,也可以在文本编辑器写下Scala的代码,无需编译直接运行。如果是正式的项目,也可以打包成相应的jar包运行。
既然是入门,先回到Scala的交互页面,简单输入几个基本代码习惯一下。
代码语言:javascript复制scala> 1 1
res0: Int = 2
scala> println("Hello World!")
Hello World!
接下来,继续看看Scala如何定义变量?
如果之前你熟悉Java的话,定义一个变量必定需要制定这个变量对应的类型,例如:
代码语言:javascript复制String a = "Hello World!";
此时变量a是String类型,全称是java.lang.String。而在Scala中,得益于类型推断,无需指定变量的类型,Scala会根据输入的值自动判断出变量对应的类型。
代码语言:javascript复制scala> val a = "Hello World!"
a: String = Hello World!
当然,如果不嫌麻烦的话,也是可以写全:
代码语言:javascript复制scala> val a: String = "Hello World!"
a: String = Hello World!
这一切取决于你,而这就是Scalable,Scala的奇妙之处。
在上面定义变量时,既然不需要指定变量类型,为何还需要写上一个val呢?像Python那样直接输入:
代码语言:javascript复制a = "Hello World!"
岂不更好?Scala作为一门多范式的语言,考虑到了这点,使用val代指的是不可变的变量,也就是说,一旦赋值不可更改。
代码语言:javascript复制scala> a = "Hello!"
<console>:8: error: reassignment to val
a = "Hello!"
当再给变量a复制"Hello!"时,Scala报错了。如果需要可变的变量,则需要将val改成var。
代码语言:javascript复制scala> var a: String = "Hello World!"
a: String = Hello World!
scala> a = "Hello!"
a: String = Hello!
不可变的变量对于新接触函数式编程的人会产生极大的不适应,但是不可变的变量会使得程序变得很容易推导和可复用(具体可以阅读:http://www.defmacro.org/2006/06/19/fp.html)。想必对于val和var的抉择,更多了一丝好奇吧。
现在对于Scala的变量的介绍就到这里了,当然,如果光写变量和一大堆表达式是没啥意义,在接下的篇章会介绍Scala的函数。