JavaScala学习笔记(三)

Scala的根基语法

继上一篇的功底语法之后,小编又收拾了部分私人住房学习进程中认为相比主要的语法。

1. if/else 表达式

1.1 替代三目运算符

先用 Java 来写一段三目运算符的代码

int i = 10;
int j = i>5?i:5

Scala 由于并未 Java 的三目运算符(?:),但是幸好可以用 if/else
说明式替代它。

scala> val i = 10
i: Int = 10

scala> val j = if (i>5) i else 5
j: Int = 10

上面的代码,仍可以够写成

scala> val i = 10
i: Int = 10

scala> var j =0
j: Int = 0

scala> if (i>5) j = i else j=5

scala> println (j)
10

可是,那种写法变量 j 需求定义成 var,因为 val
的变量一旦定义不可能被改成略嫌麻烦 , 所以第三种写法会更好。

1.2 混合类型表达式

scala> val i = 10
i: Int = 10

scala> val j = if (i>5) "String express" else 5
j: Any = String express

scala> println(j)
String express

相似三目运算符肯定是再次回到同一种档次,不过上述的代码在 if 和 else
里既有String类型又有Int类型。所以,再次回到的是八个类型的公物超类型Any。

2. 占位符_

Scala
能够把下划线“_”当做二个或多个参数的占位符,第三个下划线代表首先个参数,第二个下划线代表第②个,以此类推。只要各类参数在函数文本内仅出现2次。

先看一段 Java 的代码,它将集纳的每一个成分都乘以2再打字与印刷出来。

Integer[] arrays = {1,2,3,4,5};
List<Integer> list = Arrays.asList(arrays);
list.stream().map(it->it*2).forEach(System.out::println);

再用占位符来简化上述的 Java 代码

scala> val list = Array(1,2,3,4,5)
list: Array[Int] = Array(1, 2, 3, 4, 5)

scala> list.map(_*2).foreach(println)
2
4
6
8
10

因而对照,鲜明 Scala 的代码尤其简洁。

再来二个例子:三个占位符

scala> val f1 = (x:Int,y:Int) => x+y
f1: (Int, Int) => Int = $$Lambda$1011/349978505@1706a5c9

scala> f1(1,2)
res0: Int = 3

用多少个占位符来简化上面包车型客车代码。

scala> val f2 = (_:Int)+(_:Int)
f2: (Int, Int) => Int = $$Lambda$1034/74606989@7b7683d4

scala> f2(1,2)
res1: Int = 3

3. Array 、 ArrayBuffer 以及多维数组

Scala 的数组包蕴定长数组 Array,以及不定长数组 ArrayBuffer。

3.1 Array

scala> val nums = new Array[Int](10) // 所有元素初始化为0
nums: Array[Int] = Array(0, 0, 0, 0, 0, 0, 0, 0, 0, 0)

scala> val strings = new Array[String](10) // 所有元素初始化为null
strings: Array[String] = Array(null, null, null, null, null, null, null, null, null, null)

scala> val names = Array("tony", "cafei", "aaron")
names: Array[String] = Array(tony, cafei, aaron)

scala> names(0)
res2: String = tony

要是开头化 Array ,只好修改 Array 中的元素,不能够扩展大概去除成分。

3.2 ArrayBuffer

ArrayBuffer类似 Java 中的ArrayList。它是数组缓冲。

scala> import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArrayBuffer

scala> val arrayBuffer = new ArrayBuffer[Int]
arrayBuffer: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer()

scala> arrayBuffer += 0
res7: arrayBuffer.type = ArrayBuffer(0)

scala> arrayBuffer += 1
res8: arrayBuffer.type = ArrayBuffer(0, 1)

scala> arrayBuffer += (2,3,4,5)
res9: arrayBuffer.type = ArrayBuffer(0, 1, 2, 3, 4, 5)

scala> arrayBuffer ++= Array(6,7,8,9,10) // 添加Array需要使用++
res10: arrayBuffer.type = ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

scala> arrayBuffer.trimEnd(1) // 删除最后一个元素

scala> println (arrayBuffer)
ArrayBuffer(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

ArrayBuffer 还补助在任意地方实行添加(insert)和删除(remove)操作

scala> arrayBuffer.insert(2,100) // 在下标2处插入100

scala> println (arrayBuffer)
ArrayBuffer(0, 1, 100, 2, 3, 4, 5, 6, 7, 8, 9)

scala> arrayBuffer.insert(5,101,102) // 在下标5处插入101,102

scala> println (arrayBuffer)
ArrayBuffer(0, 1, 100, 2, 3, 101, 102, 4, 5, 6, 7, 8, 9)

反之,ArrayBuffer 的 remove 操作是同理。

除了, ArrayBuffer 还有 sum、max、min、sorted 等常用函数。

ArrayBuffer 到 Array 的转换: toArray

scala> arrayBuffer.toArray
res21: Array[Int] = Array(0, 1, 100, 2, 3, 101, 102, 4, 5, 6, 7, 8, 9)

3.3 多维数组

Scala
多维数组是通过数组的数组来落到实处的。二维数组看起来像是Array[Array[Int]]。要协会那样四个数组,能够用ofDim方法。

二维数组的定义

scala> val matrix=Array.ofDim[Int](3,4) 
matrix: Array[Array[Int]] = Array(Array(0, 0, 0, 0), Array(0, 0, 0, 0), Array(0, 0, 0, 0))

三维数组的概念

scala> val matrix2 = Array.ofDim[Int](3,4,5)
matrix2: Array[Array[Array[Int]]] = Array(Array(Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0)), Array(Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0)), Array(Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0), Array(0, 0, 0, 0, 0)))

之所以,多维数组的概念:
Array.ofDim[类型](维度1, 维度2, 维度3,….)

4. 不可变Map 和 可变Map

4.1 不可变Map

不可变Map位于scala.collection.immutable包中。

一旦,大家定义某学生的期末考试分数,它是2个不得更改的Map集合。

scala> val scores = Map("math"->90,"english"->85,"chinese"->80)
scores: scala.collection.immutable.Map[String,Int] = Map(math -> 90, english -> 85, chinese -> 80)

获得该学员的数学成绩

scala> scores("math")
res8: Int = 90

赢得该学生的总括机成绩,其实并不曾录入电脑课程的分数会并发什么样境况吗?

scala> scores("computer")
java.util.NoSuchElementException: key not found: computer
  at scala.collection.immutable.Map$Map3.apply(Map.scala:156)
  ... 30 elided

不出意内地报了一个荒唐。
由此,大家得先判断一下map里是还是不是包括总计机课程,包罗的话就取出战绩,不分包的话只好暗中认可0分,那样代码才平安。

scala> val computer = if (scores.contains("computer")) scores("computer") else 0
computer: Int = 0

那下,命令行就不会报错了。

4.2 可变Map

可变Map位于scala.collection.mutable包中。
对此刚刚的情事,添加该学生电脑的战绩。

scala> scores +=("computer"->88)
<console>:13: error: value += is not a member of scala.collection.immutable.Map[String,Int]
       scores +=("computer"->88)

scala是会报错的,因为scores是不行变map。

再一次定义scores,让它变成可变的map,那样就能够添加其余课程的大成了。

scala> val scores = scala.collection.mutable.Map("math"->90,"english"->85,"chinese"->80)
scores: scala.collection.mutable.Map[String,Int] = Map(chinese -> 80, math -> 90, english -> 85)

scala> scores +=("computer"->88)
res12: scores.type = Map(computer -> 88, chinese -> 80, math -> 90, english -> 85)

换三个角度,大家来看看怎么着定义一个空的Map

scala> val map=new scala.collection.mutable.HashMap[String,Int]()
map: scala.collection.mutable.HashMap[String,Int] = Map()

scala> map += ("computer"->88)
res15: map.type = Map(computer -> 88)

scala> map +=  ("math"->90,"english"->85,"chinese"->80)
res16: map.type = Map(computer -> 88, chinese -> 80, math -> 90, english -> 85)

scala> println (map)
Map(computer -> 88, chinese -> 80, math -> 90, english -> 85)

scala> map.getClass
res18: Class[_ <: scala.collection.mutable.HashMap[String,Int]] = class scala.collection.mutable.HashMap

前程,小编会单独再整治一篇集合相关的文章。

5. 元组

元组(Tuple)是差别档次的值的聚集。

概念三个元组:

scala> val tuple = (0,false,"Scala")
tuple: (Int, Boolean, String) = (0,false,Scala)

下一场大家能够用艺术_1、_2、_3造访其成分。

scala> println(tuple._1) // 打印第一个元素
0

scala> println(tuple._2) // 打印第二个元素
false

scala> println(tuple._3) // 打印第三个元素
Scala

值得注意的是,元组的目录是从1发端,而数组的目录是从0开头。

通常,使用模式匹配来赢得元组的成分。

scala> val (first, second, third)=tuple
first: Int = 0
second: Boolean = false
third: String = Scala

一经并不是有所的元素都供给,那么能够在不供给的因素地方上使用占位符_:

scala> val (first, second, _ ) = tuple
first: Int = 0
second: Boolean = false

总结

那篇笔记如故整理一些基础的知识。

下一篇初步,笔者会收拾 Scala 的类相关的内容。

以前的小说:
Scala学习笔记(二)
Scala学习笔记(一)

相关文章