scala入门笔记
来源:互联网 发布:大学生程序员兼职平台 编辑:程序博客网 时间:2024/05/24 06:58
函数式编程:
支持闭包和高阶函数,支持惰性计算(lazy evaluation)。使用递归作为控制流程的机制。加强了引用透明性。没有副作用。以我的理解scala中有“万物皆函数”的感觉,学过Java,C++的人都知道,函数简单来说就是接收参数、执行操作、返回数值。在scala中比如x+y这样的表达式也可以看做一个函数,x,y是参数,+是操作,相加的和就是返回值了。本人也是刚学习scala,记下这篇笔记和大家共勉。
表达式类型:
val 不变量,定义时须有一个初始值,且此后不能改变
var 可变量,定义后可以重新赋值
lazy val 惰性常量,定义时不会立即求值,而是在第一次使用时才会求值
例如:
说明:
编译器能够自动判断返回值类型,returnType也可以不写
如果函数体只有一个表达式,大括号也可以不写
如果有多个表达式,需要使用代码块
例如:
也可以写成:
if表达式:
if (logical_exp)valA else valB
例如:
for推导式:
scala中的for语句和java、C++有很大区别。for语句主要用来遍历list。
如果f o r 循环的循环体以yield开始,则该循环会构造出一个集合,每次迭代生成集中的一个值:
也可以加入if表达式
try表达式:
例如:
说明:"_"表示通配符,可以匹配所有对象。“=>0”表示返回0
match表达式:
exp match{ // 主要用在pattern match中
case p1 => val1
case p2 => val2
...
case _ =>valn
}
例如:
说明:code是用来匹配的表达式,如果和case后面的某个值匹配,则返回相应的“=>”后面的值。
支持闭包和高阶函数,支持惰性计算(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
- scala入门笔记
- Scala入门笔记
- scala入门笔记
- Scala入门笔记
- Scala学习笔记01【Scala入门初探】
- Scala 光速入门之一 笔记
- Scala中的Actor入门笔记
- 初学入门Scala笔记(一)
- Scala学习笔记19【Scala模式匹配入门实战】
- Scala入门学习笔记三--数组使用
- Scala入门学习笔记四--List使用
- Scala 笔记(初级入门篇)
- Scala入门学习笔记【list练习题】
- Scala入门
- scala 入门
- scala入门
- scala 入门
- scala入门
- Redis 学习 ---- 8.对象
- hibernate 一对一(One-to-One)
- MyEclipse10下创建web项目并发布到Tomcat
- Overflow:auto解决scoll 问题
- JAVA面试——基础知识
- scala入门笔记
- iOS开发中 修改状态栏颜色 或者隐藏状态栏颜色
- iOS开发系列- 视频MPMoviePlayerController
- android_ListView的介绍_简单入门
- Android开发优化之——对界面UI的优化(2)
- 几种算法的总结
- Android学习笔记-Xml文件解析之PULL解析实战
- 查询学生学科排名
- async 和 await 的异步处理