Scala 笔记(初级入门篇)

1 Scala概述

Scala这个名字代表可拓展语言。它能满足许多编程任务的要求。从脚本编写到大型系统的开发,它都能胜任。

Scala运行在标准的Java平台上。它支持所有的Java库。Scala可以很好的与Java组件配合使用。

Scala是一种混合类型的编程语言。它融合了面向对象编程以及函数式编程的概念。这种混合式编程用一种新的方式表达编程模式以及组件抽象。同时,它也早就了一种清晰、准确的编程风格。

2 Scala学习利器:Scala控制台

在下载并配置号Scala的环境变量之后便可以使用Scala控制台了。在Windows的命令行工具或是Mac、Linux的终端输入Scala命令便可打开Scala控制台。启动后,会有以下界面:

scala>

在控制台中输入任意表达式,控制台会执行并显示结果:

scala> 1 + 1

res0: Int = 2

可见scala控制台中显示的结果中,Int表示结果类型,等号后面的则是结果的值。res0是自动生成的变量名,因为输入的表达式的结果没有特定的变量名称。这个变量名可以在下次直接使用。例如在上面的基础上输入包含res0的表达式,则结果如下:

scala> res0 + 1

res1: Int = 3

需要退出时,输入命令:q或者:quit便可退出scala控制台。

学习scala,学会使用scala控制台是很重要的一步。

3 变量

Scala有两种变量:varval。val变量在初始化之后不可以重新赋值,类似于Java中的final变量。而var变量是可以重新赋值的。变量定义如下:

var msg = "hello world!"

Scala的变量定义也可以确定类型,但与Java不同,其类型声明在变量名称之后:

val msg3: String = "Hello yet again, world!"

除了Scala的默认类型外,Scala也可以创建类的对象:

val big = new java.math.BigInteger("12345")

4 数组

数组的创建可以使用类的创建形式创建:

val greetStrings = new Array[String](3)

此时数组的每一个元素为空,需要对每一个元素进行赋值。在这里注意,在Scala中,数组的访问使用的是( )而不是[ ]

greetStrings(0) = "Hello"
greetStrings(1) = ", "
greetStrings(2) = "world!\n"

然而这样的方法并不提倡,数组的创建使用以下方法更好,以下方法创建了一个名为numNames的字符串数组,包含字符串"zero""one""two"

val numNames = Array("zero", "one", "two")

5 函数

Scala的函数定义示例如下:

def max(x: Int, y: Int): Int = {
    if(x > y)
        x
    else
        y
}

在大部分情况下,编译器不要求定义函数的返回值类型。但在某些情况下,如函数为递归函数,编译器则要求函数的返回类型必须声明。

另外,如果函数的函数体只有一行内容,大括号也不需要。

综合以上两点,上述的max函数则可以写成这样:

def max2(x: Int, y: Int) = if (x > y) x else y

与Java相同,函数可以不返回任何值。在scala中,这样的函数返回值为Unit。它与Java的void类型相似。

6 While循环

Scala的while循环与Java基本相似,以下为范例:

var i = 0;
while (i < args.length) {
    if (i != 0) {
      print(" ");
    }
    print(args(i));
    i += 1;
} 
println();

7 使用Foreach遍历数组

对于数组的遍历,可使用foreach进行。以下范例对字符串数组args中的每个字符串进行打印:

args.foreach((arg: String) => println(arg))

在语句中,arg代表数组中的每个元素;=>右边的内容表示要遍历的行为;String代表元素的类型,但类型的说明是可选的,以下语句依然可以运行:

args.foreach((arg) => println(arg))

如果遍历的内容仅仅是一个单参数的函数,并且参数就是数组的元素,则foreach语句还可以仅仅写入遍历行为函数的名字:

args.foreach(println)

8 使用for循环遍历数组

与foreach遍历有点相似,但不同的是使用for进行遍历时并不是调用数组的成员函数的形式进行:

for (arg <- args)
    println(arg)

在for后的圆括号中,左箭头左边的arg是数组的元素代表,无需事先定义;右边的args则是数组本身。注意arg是一定val变量,因此无需在arg前添加val声明。另外在for循环中无法对arg重新赋值。

9 List

Scala的List类型与数组相似,它的创建如下:

val oneTwoThree = List[Int](1, 2, 3)

同样,Int的声明可以去掉:

val oneTwoThree = List(1, 2, 3)

Scala的List是无法更改的,即List里面的元素内容是无法改变的,类似于Java的String类型。若需要创建可以更改List则需要创建类java.util.List的对象。

List是不可更改的,但是它可以与其他List的进行连接操作,创建一个新的List。使用符号:::进行这个操作:

val oneTwo = List(1, 2)
val threeFour = List(3, 4)
val oneTwoThreeFour = oneTwo ::: threeFour

此时oneTwoThreeFour的元素包括1、2、3、4。

除了连接别的数组,还可以连接新的元素,但使用的符号是::

val twoThree = List(2, 3)
val oneTwoThree = 1 :: twoThree

此时,oneTwoThree包含元素1、2、3。注意,List必须放在最后。

在Scala定义了一个空的List,名字为Nil。该List中没有任何元素。因此,可以使用Nil与符号::来创建List:

val oneTwoThree = 1 :: 2 :: 3 :: Nil

10 Tuple

Tuple是可存储任意类型以及数量的数据结构类型。其创建如下:

val pair = (99, "Luftballons")

括号中可以包含任意数量以及任意类型的数据。访问Tuple的数据使用点+下划线+数字进行访问:

println(pair._1)
println(pair._2)

注意,此时访问不再从0开始,而是从1开始。

如果需要明确Tuple类型,Scala提供最多22大小的Tuple类,其类的名字是Tuple+大小:

val t2: Tuple2[Int, String] = (99, "Luftballons")
val t6: Tuple6[Char, Char, String, Int, Int, String] = ('u', 'r', "the", 1, 4, "me")

11 Set

Set类型与Java中的Set类型相似,它是个没有顺序的数据集合。其创建如下:

val movieSet = Set("Hitch", "Poltergeist")

使用操作符+或者+=可以向Set中添加元素,以下两句效果相同:

movieSet = movieSet + "Alan"
movieSet += "Shrek"

此时movieSet中包含Hitch、Poltergeist、Shrek、Alan。

注意,Set默认是不可变的,即Set的+ 操作是将元素添加进Set后生成一个新的Set且被操作的Set原值是不改变的:

var movieSet0 = movieSet + "Mercer"

上例中,movieSet0包含Mercer而movieSet不包含。

如果需要使用可变的Set,可以在代码中中包含类scala.collection.mutable.Set。此时使用的Set就是可变的了:

import scala.collection.mutable.Set

Set还有许多操作,详情见Scala文档。

12 Map

Map也是类似于Set的无顺序的集合类,但它存储的是一个Key-Value数据对。Map可以通过Key访问数据。

Map的创建如下:

val treasureMap = Map[Int, String]()

Map也可以使用+以及+=添加数据,但需要用->来表示数据对,->左边是key,右边是value:

treasureMap += (1 -> "Go to island.")
treasureMap += (2 -> "Find big X on ground.")
treasureMap += (3 -> "Dig.")

Map使用()来访问数据,通过在括号中填入key来访问数据:

println(treasureMap(2))

上例则显示Find big X on ground

Map的其他操作同样见Scala文档。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值