Scala学习笔记(二) ---- 基础简述


1、变量定义

Scala有两种变量定义的方式----var和val,这两种定义的方式是有差别的,val相当于java中的final变量,被定义的变量是不可以在更改,而var定义的变量则与之相反。

scala> val v1 = "Hello"
v1: String = hello

scala> var v2 = "world"
v2: String = world


2、定义函数

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

2.1、从上面的列子中,我们知道scala的函数式通def来定义的,max表示的是这个函数的函数名,括号内的参数与我们习惯的java不同,x、y是指参数名,“:Int”是指参数的类型为Int的。上面的函数代码其实可以简化为如下所示:

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

简化之后,没有显示的写出返回值类型,因为scala编译器可以自动识别判断出返回值的类型。


2.2、下面我们来看下面这个例子

scala> def hello() = println("Hello")
hello: ()Unit

在上面的例子中,我们定义的函数结果返回的是一个hello: ()Unit,这个Unit就是hello的返回值类型,在Scala中Unit就相当于Java程序中的void。


3、循环语句

3.1、while循环

3.1.1、我们新建一个xunhuan.scala文件,代码如下:

var i = 0
val arr = Array("one", "two", "three")
while(i < arr.length) {
    println(arr(i))
    i += 1
}

执行这个文件,看看得出什么结果:

one
two
three

3.2、foreach和for

3.2.1、同样我们先以例子开始,文件foreach1.scala

//for循环arr
for (item <- arr)
    println(item)

//foreach循环arr
arr.foreach(item => println(item))

上面的for、foreach遍历的结果都如while的结果一样。针对foreach可以将代码简化如下:

arr.foreach(println)

总而言之,函数文本的语法就是,括号里的命名参数列表,右箭头,然后就是函数体。语法如下图所示:



4、数组与集合

4.1、带类型的参数化数组

Scala是可以使用new实例化对象或类实例的,当在实例化对象时,可以使值或类型参数化,如下实例化一个BigInteger对象并参数化值123:

val big = new BigInteger("123")

在定义类似java泛型集合时,可以通过中括号将类型括起来,如:new Array[String](2),括号里的数字2表名这个数组长度为2。


4.2、List

这里要强调的Scala的List不同与java的List,Scala的List是不可变的,也就是说Scala的List不能像java的List一样,在增加列表元素时,Scala的List其实是重新创建了一个新的List对象。

4.2.1、List常见的操作符“:::”和“::” 

::: 操作符:三个冒号的操作方法实现List集合的叠加,如下代码所示:

val oneTwo = new List(1,2)
val twoThree = new List(2,3)
val result = oneTwo ::: twoThree
println(result)

//输出结果如下
List(1,2,2,3)

::操作符:两个冒号操作符,读作“cons”,它是把新元素添加到已有List的最前端,如下代码片段所示:

val oneTwoThree = 1 :: twoThree
println(oneTwoThree)

//输出结果
List(1,2,3)


4.2.2、List的API文档,请查看 Scala API


5、元组(Tuple)

与列表一样,元组也是不可变的,但与列表的不同是,元组可以包含不同类型的元素。从某种意义上来说,Scala元组有点类似javaBean,我们知道javaBean是装有多个类型的属性,而Scala的元组因为可以装多个类型的元素,并且可以简单的返回一个元组。元组元素的访问时通过“下划线和一个从1开始的索引”,如下面例子:

val people = (27, "175cm", "China", "male")
println(people._1)
println(people._2)
println(people._3)
println(people._4)

//运行结果
27
175cm
China
male


6、Set和Map

上面已经说过,Scala集合系统有可变和不可变集合,那么在实际的情况下需要引用的Set或Map要主要import 相对应的Set或Map。可变与不可变的差别这里就不再重复嗷述了。

Map的定义与添加元素跟java中的Map不一样,如下代码:

import scala.collection.mutable.Map

val tMap = Map[Int, String]()
tMap += (1 -> "This is first")
tMap += (2 -> "This is second")
tMap += (3 -> "This is third")
println(tMap(2))

//输出结果
This is second


你可能感兴趣的:(Scala)