关于Scala的意义,优劣就先不说了,上Step by Step把人引进来再说,大家一步步进门后再做语言比较也不迟。
参考《First Steps to Scala 》
http://www.artima.com/scalazine/articles/steps.html
我先大致根据这篇文章写一些自己的理解,让想学Scala的同学有个感性认识。
读者对象:有Java经验的工程师
第一步:下载和安装Scala
在官网下载http://www.scala-lang.org/downloads 并接压缩,像安装ANT或MAVEN之类的那样,把解压后的bin路径加到path里面去就可以了。
在命令行模式下输入Scala
C:\Documents and Settings\19002850>scala
Welcome to Scala version 2.7.5.final (Java HotSpot(TM) Client VM, Java 1.6.0_13)
.
Type in expressions to have them evaluated.
Type :help for more information.
scala>
如果你看到scala提示符,那么恭喜你,说明Scala安装成功了。
第二步:学习使用Scala解释器(interpreter)
Scala也算是解释性语言,所以你可以直接与解释器交互。
res0: Int = 4
scala>
直接输入 1 + 3 ,返回res0: Int = 4
res0表示变量名, Int表示类型, 4是值。
Scala的类型定义在冒号后面,和java放在前面不同,和UML类图的属性定义方式一样。
Scala是强类型语言,必须要定义类型,但Scala编译器足够聪明,他能够根据你的值帮你定义变量的类型。
这里res0是个变量名,所以你可以接下来再使用。
res1: Int = 12
scala>
解释器又给了一个变量res1。
Scala的所有变量都是对象,所有操作都是方法。
所以*也是方法,你可以这样调用:
res2: Int = 48
scala>
这个和java很不同,java的int不是对象。
是不是有点绕进去了,那么来个hello world宣告第二步结束。
Hello World!
scala>
这个println是个方法,因为Scala有预定义导入一些类,所以可以直接使用。
因为Scala更新很快,每个版本的Scala的解释器可能都有一些不同,所以如果返回的变量名或有其他有一点不一样,请不要太奇怪。
第三步: 定义变量
写程序最入门就是定义变量和方法,前面的变量由Scala解释器自动定义了,这一步自己定义变量。
Scala有两种类型的变量,val 和var 。 val 变量的值只能初始化一次,再次赋值就发生错误,var就和java的变量相同,可以随时修改。
val 是函数式编程的风格,变量一旦赋值就不要再做修改,从程序上将有很多好处,但有时候做起来会比较绕。
msg: java.lang.String = Hello World!
scala> msg = "Hello JavaEye"
<console>:5: error: reassignment to val
msg = "Hello JavaEye"
^
scala>
Scala是强类型语言,每个变量都需要类型。但如果你赋给变量的有足够明细的类型提示,那么编译器会帮你把类型加上去。
把刚才的msg打印出来
Hello World!
scala>
再来看看var ,比较好理解。
greeting: String = Hello World!
scala> println(greeting)
Hello World!
scala> greeting = "Hello JavaEye!"
greeting: String = Hello JavaEye!
scala> println(greeting)
Hello JavaEye!
scala>
记住,Scala有两种变量标识,和java不一样。
第四步: 定义一些方法
以前程序就是变量和方法组成吧,所以变量和方法是最基础的东西。
我们定义一个取最大值的方法max
max: (Int,Int)Int
定义变量用val和var,定义方法用def 。
这个max方法有方法参数,返回值类型,方法体。麻雀虽小,五脏俱全了。
Scala的变量表示是变量名: 类型 ,这一点和java甚至其他语言都很不同,和UML风格比较接近。
调用方法很简单:
res9: Int = 8
Scala中方法也是一个类型,或者说是一个值,成为First Class。
所以可以把max看成是个变量名,(Int,Int)Int是它的类型。他可以作为参数传递,也可以赋值给其他变量。
m: (Int, Int) => Int = <function>
将max赋值给m, 请注意max后面带的下划线,不要忘记写了。
调用m
res11: Int = 3
scala>
在初学的时候就讲这个好像有点急进了,不太容易理解,不过没关系,先了解一下总比看到后莫名其妙好。
OK,本篇到此结束。
下一篇《十二步学会Scala-2》 将介绍循环和数组
未完待续