scala入门笔记

来源:互联网 发布:大学生程序员兼职平台 编辑:程序博客网 时间:2024/05/24 06:58
函数式编程:
支持闭包和高阶函数,支持惰性计算(lazy evaluation)。使用递归作为控制流程的机制。加强了引用透明性。没有副作用。以我的理解scala中有“万物皆函数”的感觉,学过Java,C++的人都知道,函数简单来说就是接收参数、执行操作、返回数值。在scala中比如x+y这样的表达式也可以看做一个函数,x,y是参数,+是操作,相加的和就是返回值了。本人也是刚学习scala,记下这篇笔记和大家共勉。


表达式类型:
val 不变量,定义时须有一个初始值,且此后不能改变
var 可变量,定义后可以重新赋值
lazy val 惰性常量,定义时不会立即求值,而是在第一次使用时才会求值
例如:
val x = 1//> x  : Int = 1var y = 2//> y  : Int = 2lazy val z = x + y//> z: => Int

从这张图可以看出scala的类型体系,其中Nothing是所有类型(包括Null)的子类,Null是所有引用类型的子类。Any是所有类的父类。

定义函数:

def funtion_name(val:valType[,...]):returnType={funtionBody}
说明:
编译器能够自动判断返回值类型,returnType也可以不写
如果函数体只有一个表达式,大括号也可以不写
如果有多个表达式,需要使用代码块
例如:
def add(x:Int,y:Int)Int ={x + y}//> add: (x: Int, y: Int)Int


也可以写成:
def add(x:Int,y:Int) =x + y//> add: (x: Int, y: Int)Int


if表达式:
if (logical_exp)valA else valB
例如:
val a =1                                        //> a  : Int = 1if (a == 1) "one" else "not one"                 //> res0: String = one

for推导式:
scala中的for语句和java、C++有很大区别。for语句主要用来遍历list。
for (i<-1 to 3) print(i)                         //> 123for (i <- 1 to 3; j <- 1 to 3) print ((10 * i + j) + " ")//> 11 12 13 21 22 23 31 32 33 val l = List("one","two","Three")               //> l  : List[String] = List(one, two, Three)for (s<-l) println(s)                           //> one                                                //| two                                                //| Three


如果f o r 循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集中的一个值:
 
for (i <- 1 to 10)  yield i % 3    //Vector(1, 2, 0, 1, 2, 0, 1, 2, 0, 1)

也可以加入if表达式
for (i <- 1 to 3; j <- 1 to 3  if i != j) print ((10 * i + j) + " ") //12 13 21 23 31 32

try表达式:
例如:
  try {  Integer.parseInt("dog")  } catch {  case _ => 0  }finally {  println("always be printed")  }                                               //> always be printed                                                  //| res0: Int = 0


说明:"_"表示通配符,可以匹配所有对象。“=>0”表示返回0


match表达式:
exp match{ // 主要用在pattern match中
case p1 => val1
case p2 => val2
...
case _ =>valn
}
例如:
val code = 1                                      //> code  : Int = 1code match {case 1 => "one"case 2 => "two"case _ => "others"}                                                 //> res0: String = one


说明:code是用来匹配的表达式,如果和case后面的某个值匹配,则返回相应的“=>”后面的值。
0 0
原创粉丝点击