第5步 用while做循环;用if做判断
我们先来试试while,将以下内容录入名称为printargs.scala的文件中:
注意
虽然本节的实例介绍了while循环,但是它并非最佳的Scala风格。在下一节,你将看到比用下标遍历数组更好的方式。
这个脚本从变量定义开始:var i = 0。类型推断将i判定为Int,因为这是初始值0的类型。下一行的while语法结构使得代码块(下面的两行代码)被不断地重复执行,直到boolean表达式i < args.length的值为false。其中,args.length给出的是数组args的长度。代码块包含了两个语句,各缩进两个空格(这是Scala推荐的缩进风格)。其中,第一个语句println(args(i))打印出第i个命令行参数;而第二个语句i += 1让变量i自增1。注意,Java的++i和i++在Scala中并不工作。要想在Scala中让变量自增,要么使用i = i + 1,要么使用i += 1。使用下面的命令执行这个脚本:
应该会看到:
要想更进一步,可以将下面的代码录入名称为echoargs.scala的文件中:
在这个版本中,将println调用替换成了print,因此命令行参数会在同一行输出。为了让输出变得更可读,可通过if (i! = 0)语句,在除首个参数之外的每个参数之前都加上一个空格。由于i != 0在首次执行while循环体时为false,因此在首个参数之前不会打印空格。最后,在末尾添加了另一个println,这是为了在所有参数都打印出来之后追加一个换行。至此,输出应该比较完整了。如果使用如下命令执行这个脚本:
将会看到:
注意,在Scala中(这一点与Java不一样),while或if语句中的boolean表达式并不是必须被放在圆括号里的。另一个与Java不一样的地方是,即使if代码块包含多个语句,也可以选择不写花括号,只要你正确地缩进每一行即可。虽然你还没看到过我们在代码中使用分号,但是Scala与Java一样,也支持用分号来分隔语句,只不过Scala的分号通常都不是必需的,所以你的右手小指会轻松一些。如果你不嫌啰嗦,则完全可以将echoargs.scala脚本写成下面这种更偏向于Java的风格:
Scala 3推荐使用被称为“安静语法”(quiet syntax)的基于缩进的风格,而不是花括号风格。Scala 3还引入了结束标记(end marker)来更清晰地表示区域的末端。结束标记由end加指定词(specifier token)构成。参考代码示例10.9。