这章的重点是让你亲自动手写Scala代码,分成几个小节来讲:
Scala解释器
变量
函数
脚本
循环和决策
迭代
Scala解释器先来说说Scala解释器,也就是那个叫“scala”的东西。你只需在命令提示符下一敲“scala”,它就跑起来了。解释器让你可以随意输入Scala表达式,然后它会告诉你结果和类型。
比如你输入:
scala> 1 2
解释器会告诉你:
res0: Int = 3
这行话的意思是:
有个名字(res0,意思是结果0)
一个冒号(:),表示后面是表达式的类型(Int)
一个等号(=),表示等于
表达式的结果(3)
变量Scala有两种变量:“vals”和“vars”。说到“val”,它就像Java里面的final变量,一旦设了就不能改。而“var”,则是可以随便改的那种。Scala还能自己猜变量类型,所以很多时候你都不用明说。当然,如果你想明确指出来也行,类型注释写在变量名后面,中间隔个冒号。
就比如,你可以这么定义个val:
val msg = "Hello, world!"
Scala会猜出它是“String”类型,因为你一开始就给了个字符串,所以这玩意儿以后也不能改了。如果你想要个能改的变量,就用“var”。
在Scala解释器里敲多行代码,就接着往下写就是了。如果你写错啦,但解释器还没反应过来,敲两下回车就能逃脱。
函数定义函数,用“def”开头,接着是函数名和一串参数,参数之间用逗号分开,每个都得标明类型。参数列表后面,用冒号标明函数的返回类型,然后在大括号里写函数体。
比如,有个叫“max”的函数,接受两个Int参数,返回个Int:
def max(x: Int, y: Int): Int = {
if (x > y) x
else y
}
如果函数就一条语句,你可以不写返回类型和大括号:
def max2(x: Int, y: Int) = if (x > y) x else y
定义好了,直接用名字调用,传进去参数。函数还能返回Unit(类似于Java的void),意味着它们主要是做一些副作用,比如往屏幕上打印东西。
脚本Scala不仅能写大工程,写脚本也行。直接在文件里连着写语句就是了。Scala还能用一个叫“args”的数组来接收命令行参数。Scala的数组是从0开始数的,所以第一个元素是“args(0)”,不像Java是“args[0]”。
比如,你写个“hello.scala”文件,内容是:
println("Hello, world, from a script!")
然后用Scala解释器跑它:
$ scala hello.scala
要传参的话,写个“helloarg.scala”脚本:
// 对第一个参数说hello
println("Hello, " args(0) "!")
带着参数跑:
$ scala helloarg.scala planet
脚本里的“planet”就是“args(0)”,结果就是:“Hello, planet!” Scala脚本里还能加注释(“//”后面的或者“/”和“/”之间的都不算),用“ ”拼字符串。
循环和决策要搞个while循环,定义个变量当计数器。比如“printargs.scala”脚本:
var i = 0
while (i < args.length) {
println(args(i))
i = 1
}
这里,“i”一直加,直到比“args”数组(命令行参数)的长度小。"println"打印每个参数,用"i = 1"来加“i”。
跑这脚本:
$ scala printargs.scala Scala is fun
输出就是:
Scala
is
fun
要输出得整齐点,可以试试“echoargs.scala”脚本:
var i = 0
while (i < args.length) {
if (i != 0)
print(" ")
print(args(i))
i = 1
}
println()
Scala要求控制结构里的布尔表达式得加括号,像Java一样。如果块里就一条语句,大括号可以不写。Scala还允许语句间用分号分开,让代码更简洁。
迭代在Scala里,你既可以用命令式风格编程,也可以用函数式风格。命令式是一步步来,用循环迭代,经常改变共享状态;而Scala鼓励用函数式编程。函数式编程里,函数是头等公民。要用函数式风格打印每个命令行参数,可以这样用数组上的foreach方法:
args.foreach(arg => println(arg))
这里,你传了个函数字面量给foreach,Scala会猜出arg是String类型的。如果你想更清楚些,也可以指定类型。还有个简写,单参数函数可以不写参数名。Scala还有个“for表达式”,是命令式for循环的函数式版本,用来遍历集合元素。比如:
for (arg <- args)
println(arg)
这样,arg是个val,循环里不能改。for表达式对args里每个元素都创建个新的val,然后跑循环体。
最后这章就是让你对Scala有个大概的了解,通过动手实践,帮你快速熟悉Scala的语法和概念。不管你是初学者还是有其他编程背景的,这种方式都能让你舒服地上手。那我们就开始吧,动手试试看!
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved