编程语言Scala [第2章] —— Scala的第一步

编程语言Scala [第2章] —— Scala的第一步

首页休闲益智摸鱼计数器更新时间:2024-06-01

这章的重点是让你亲自动手写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