Scala学习笔记1——Scala基础
程序员文章站
2024-02-18 12:15:04
...
Scala学习笔记1——Scala基础
-
推荐书目
- Scala for the Impatient(学习用书)
- Programming in Scala(字典类书)
-
特点:
- 基于JVM的FP + OO
- 静态类型语言
- 可以与Java互操作
-
先编译:scalac xxx.scala 再运行:scala xxx
-
值与变量:
- val a : Int = 2 则a为常量不可改变
- var a : Int = 2 则a为变量可以改变
- 一般不需要指定类型,有自动推断机制
-
常用类型:byte,char,short,int,long,float,double,boolean
-
方法定义:
-
def 方法名(参数名 : 参数类型):返回类型 = {block中最后一行为返回值}
-
当返回类型为Unit时 (无返回值)可以定义为:
def 方法名 (参数名 : 参数类型){}
-
eg :
object WeekOne { //scala中无静态方法,通过object实现 def add(x : Int , y : Int) : Int = { x + y } def hello() { println("hello") } def main(args : Array[String]){ println(add(1,2)) //无分号 hello //调用没有参数的函数不用带圆括号 } }
-
scala 中无 continue 和 break
-
利用 if 方便的赋值
val a = if (x > 0) 1 else -1
-
-
循环
-
1 to 10 : range(1,2,3,4,5,6,7,8,9,10)
-
1 until 10 : range(1,2,3,4,5,6,7,8,9)
-
对于num = 10的数组 :0 until 10
-
range(1,10,步长) :同python
-
for循环:
for (i <- 1 to 10) { println(i) } for (i <- 1 to 10 if i % 2 == 0) { //条件遍历 println(i) }
-
-
lazy val:用时才会加载
lazy val a = 2
-
默认参数:
def sayName(name : String = "Jack") { println(name) } def main(args : Array[String]) { sayName() //输出 "Jack" sayName("lucy") //输出 "lucy" }
-
带名参数
def add(x : Int, y : Int) : Int = { x + y } def main(args : Array[String]) { println(add(y=2,x=1))//会把2赋给y,1赋给x println(add(2,1)) //会把2赋给x,1赋给y }
-
变长参数
def sum(elems : Int*) { } def main(args : Array[String]) { sum(1,2,3,4,5) sum(1,2,3) }
-
异常处理
try { //.... } catch { //模式匹配 case e : Exeption => ... } finally { //... }
-
定长数组
val a = new Array[String](5) //5个null val a = new Array[Int](5) //5个0 val a = Array("jack","lucy") //直接初始化 a(0)//访问数组
-
变长数组
import scala.collection.mutable.ArrayBuffer val buff = ArrayBuffer[类型]() val a = ArrayBuffer[int]() a += 1 //添加元素 a += (3,4,5) a ++= Array(6,7,8) a.insert(0,0) //第0个位置填上数字0 a.remove(0,1) //删除0,1两个数字 a.toArray //变为定长数组 a.toArray.sum a.toArray.max a.trimEnd(2) //移除最后面的两个数
-
数组的遍历
for(i <- 0 until array_name.length) println(array_name(i)) for(elem <- array_name) println(elem) //更多的将采用map,filter操作
-
Map
val age = Map("Jack" -> 20, "lucy" -> 18) //不可变Map val age = scala.collection.mutable.Map("Jack" -> 20, "lucy" -> 18) //可变Map val m = scala.collection.mutable.Map[String,Int]() //初始化一个Map
-
Map操作
//访问 age("Jack") //访问键值为Jack的元素 m.getOrElse("Jack",0) //有键值取值,没有返回0 //更新 age("AA") = 2 age += ("BB" -> 3, "CC"->4) age -= "AA" //迭代 for ((k,v) <- m) { println("key is " + k + ",value is" + v) } age.keySet //键集合 age.values //值集合
-
元组
- ( ) 里包含一系列值
- 通过 “._” 取值, 下标从1开始