Scala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。
Scala 运行在Java虚拟机上,并兼容现有的Java程序。
Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。
OK,干货,开始。
学习这门语言之前最好有其他的开发语言基础,否则会闷逼的
1 .变量声明
scala和JavaScript一样是弱语言类型
变量类型:val、var
- val :常量 (推荐)
类似java中的final修饰符,具有不可变性 - var :变量 可改变值
2 .数据类型 (前7种是值类型)
数据类型 | 描述 |
---|---|
Byte | 8位有符号补码整数。数值区间为 -128 到 127 |
Short | 16位有符号补码整数。数值区间为 -32768 到 32767 |
Int | 32位有符号补码整数。数值区间为 -2147483648 到 2147483647 |
Long | 64位有符号补码整数。数值区间为 -9223372036854775808 到 9223372036854775807 |
Float | 32位IEEE754单精度浮点数 |
Double | 64位IEEE754单精度浮点数 |
Char | 16位无符号Unicode字符, 区间值为 U+0000 到 U+FFFF |
String | 字符序列 |
Boolean | true或false |
Unit | 表示无值,和其他语言中void等同。用作不返回任何结果的方法的结果类型。Unit只有一个实例值,写成()。 |
Null | null 或空引用 |
Nothing | Nothing类型在Scala的类层级的最低端;它是任何其他类型的子类型。 |
Any | Any是所有其他类的超类 |
AnyRef | AnyRef类是Scala里所有引用类(reference class)的基类 |
3 .集合三大类
- seq(序列)
- set(集)
- map(映射)
1.声明一个List集合,scala会自动判断list集合里值得类型
val list1 = List(1,2,3,4)
结果 list1: List[Int] = List(1, 2, 3, 4)
2.在list1集合“前面”插入一个数
val list2 = 0 :: list1
结果 list2: List[Int] = List(0, 1, 2, 3, 4)
也可以写成
val list3 = list1.::(0)
结果 list3: List[Int] = List(0, 1, 2, 3, 4)
亦或者
val list4 = 0 +: list1
结果 list4: List[Int] = List(0, 1, 2, 3, 4)
val list5 = list1.+:(0)
结果 list5: List[Int] = List(0, 1, 2, 3, 4)
3.在list1集合“后面”插入一个数 (注意:和+的位置)
val list6 = list1 :+ 5
结果 list6: List[Int] = List(1, 2, 3, 4, 5)
同理
val list7 = list1.:+(5)
结果 list7: List[Int] = List(1, 2, 3, 4, 5)
4.++
val list8 = List(5,6,7,8)
val list9 = list1 ++ list8
结果 list9: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8)
所以说 :: 是一个方法?Excuse me?
实现方式有很多种,觉得哪个好记就用哪个吧,也不知道这位开发者是多无聊啊
4 .数组
导入需要的包
import scala.collection.mutable.ArrayBuffer
定长数组
// 提一下:如果创建对象的时候,省略new关键字,需要定义对应的apply方法
val a = Array[Int](10)
输出:a: Array[Int] = Array(10)
val b = new Array[String](5)
输出:b: Array[String] = Array(null, null, null, null, null)
val c = Array("Mary","Tom","Mike")
输出:c: Array[String] = Array(Mary, Tom, Mike)
val d = Array(1,2,3,4,5)
输出:d: Array[Int] = Array(1, 2, 3, 4, 5)
可能你已经注意到了,在声明变量和赋值语句后,并没有使用分号,在Scala中,仅当同一行代码存在多条语句的时候,才需要用分号隔开。
3 .for循环
4 .while循环
5 .do while 循环
6 .foreach进行迭代
7 .异常
8 .关键字yield
类中的apply方法:
这个方法在scala中比较特殊,类中定义了apply的方法后,调用这个方法不需要显示的写apply。直接写”实例名(参数列表)”的形式就好。
例如:
tuple(1)事实上是调用了tuple.apply(1)
List(1,2,3,4)事实上是调用了List(1,2,3,4)