Scala学习笔记 - 快学scala第二章
2017-05-29 22:32
169 查看
第2章 控制结构和函数a1 13
2.1 条件表达式14
scala 的if else是有返回值的
1、val a = if(x > 0) x else -1 返回类型是个Int
2、val b = if(x > 0) x else "minus" 返回类型是Any(因为数据类型的公共父类都是Any)
3、 val c = if (a > 1) a 返回类型是AnyVal,虽然这里没有else,但是scala会引入Unit所以该表达式同等于
val c = if (a > 1) a else () () = 无用值
2.2 语句终止 16
一般一行想要写多个语句的时候会用到分号
默认情况下scala是不用写分号
2.3 块表达式和赋值 16
块 => {}
在scala中{}包含一系列表达式,其结果就是块中最后一个表达式的返回值
2.4 输入和输出17
println("")
println("%s,%d","a",b)
println(s"${},${}")
2.5 循环 18
其他循环类似,只有for有点区别
让变量i遍历<-右边的表达式的所有值
for(i <- 表达式){
}
scala没有提供break continue这些跳出等操作
其实for中还有很多高级用法,文中只件了这么点
2.6 高级for循环和for推导式19
多重循环
for(i <- 1 to 3; j<- 1 to 3) print((10 * i * j) + " ")
scala> for(i <- 1 to 3; j<- 1 to 3) println(i,j)
(1,1)
(1,2)
(1,3)
(2,1)
(2,2)
(2,3)
(3,1)
(3,2)
(3,3)
推导式
val a = (i <i 1 to 10) yield i % 3
2.7 函数 21
scala支持方法和函数
方法对对象操作,函数不是
但是文中没有详细说明,方法与函数的区别
2.8 默认参数和带名参数 l1 22
调用方法时,可以使用方法的默认值,也可以在调用时显式声明赋值
def cxsum(i:Int,j:Int = 2) = i + j
cxsum(1)
or
cxsum(1,2)
or
cxsum(1,j=3)
2.9 变长参数 l122
一个方法可以接收多个同类型的参数
def aaa(i:Int*) = i.map(_*2)
println(aaa(2,4))
入参scala会给予 Seq(Int)的类型,返回值是个ArrayBuffer
2.10 过程 23
如果函数体包含在花括号当中,且没有=号,返回类型就是Unit,这样的函数叫过程
过程没有返回值,我们调用它仅仅是为了它的副作用
def speak(s:String){ println(s) } 隐式
def speak(s:String):Unit { println(s) } 显式
2.11 懒值l1 24
延迟计算
2.12 异常 25
讲得太浅,可以先参考java的
练习
1.if else版,模式匹配版
def zf(n: Int) = {
if (n > 0) {
1
} else if (n == 0) {
0
} else {
-1
}
}
def zf2(n:Int) = n match {
case `n` if `n` > 0 => 1
case 0 => 0
case _ => -1
}
找出整型,如果大于0就返回1,等于0就返回0,小于0就返回-1
BigInt(1).signum
2.val a = {}
a = Unit
4.List(0 to 10: _*).reverse.foreach(println)
for(i <- 0 to 10 reverse) println(i)
5.写个过程,打印n到0
def countdown(n: Int){
List(0 to n: _*).reverse.foreach(println)
}
6.循环版
var t:Long = 1
for(i <- "Hello") t = t * i.toLong
println(t)
7.不用循环版
"Hello".map(_.toLong).product
8.
def pro(s: String): Long = {
s.map(_.toLong).product
}
9.
def
product1(s:String):Long={
if(s.length ==
1)
s.charAt(0).toLong
else
s.take(1).charAt(0).toLong * product1(s.drop(1))
}
def
product2(s:Array[Char]):Long={
if(s.length ==1)
s(0).toLong
else
s(0).toLong * product2(s.drop(1))
}
2.1 条件表达式14
scala 的if else是有返回值的
1、val a = if(x > 0) x else -1 返回类型是个Int
2、val b = if(x > 0) x else "minus" 返回类型是Any(因为数据类型的公共父类都是Any)
3、 val c = if (a > 1) a 返回类型是AnyVal,虽然这里没有else,但是scala会引入Unit所以该表达式同等于
val c = if (a > 1) a else () () = 无用值
2.2 语句终止 16
一般一行想要写多个语句的时候会用到分号
默认情况下scala是不用写分号
2.3 块表达式和赋值 16
块 => {}
在scala中{}包含一系列表达式,其结果就是块中最后一个表达式的返回值
2.4 输入和输出17
println("")
println("%s,%d","a",b)
println(s"${},${}")
2.5 循环 18
其他循环类似,只有for有点区别
让变量i遍历<-右边的表达式的所有值
for(i <- 表达式){
}
scala没有提供break continue这些跳出等操作
其实for中还有很多高级用法,文中只件了这么点
2.6 高级for循环和for推导式19
多重循环
for(i <- 1 to 3; j<- 1 to 3) print((10 * i * j) + " ")
scala> for(i <- 1 to 3; j<- 1 to 3) println(i,j)
(1,1)
(1,2)
(1,3)
(2,1)
(2,2)
(2,3)
(3,1)
(3,2)
(3,3)
推导式
val a = (i <i 1 to 10) yield i % 3
2.7 函数 21
scala支持方法和函数
方法对对象操作,函数不是
但是文中没有详细说明,方法与函数的区别
2.8 默认参数和带名参数 l1 22
调用方法时,可以使用方法的默认值,也可以在调用时显式声明赋值
def cxsum(i:Int,j:Int = 2) = i + j
cxsum(1)
or
cxsum(1,2)
or
cxsum(1,j=3)
2.9 变长参数 l122
一个方法可以接收多个同类型的参数
def aaa(i:Int*) = i.map(_*2)
println(aaa(2,4))
入参scala会给予 Seq(Int)的类型,返回值是个ArrayBuffer
2.10 过程 23
如果函数体包含在花括号当中,且没有=号,返回类型就是Unit,这样的函数叫过程
过程没有返回值,我们调用它仅仅是为了它的副作用
def speak(s:String){ println(s) } 隐式
def speak(s:String):Unit { println(s) } 显式
2.11 懒值l1 24
延迟计算
2.12 异常 25
讲得太浅,可以先参考java的
练习
1.if else版,模式匹配版
def zf(n: Int) = {
if (n > 0) {
1
} else if (n == 0) {
0
} else {
-1
}
}
def zf2(n:Int) = n match {
case `n` if `n` > 0 => 1
case 0 => 0
case _ => -1
}
找出整型,如果大于0就返回1,等于0就返回0,小于0就返回-1
BigInt(1).signum
2.val a = {}
a = Unit
4.List(0 to 10: _*).reverse.foreach(println)
for(i <- 0 to 10 reverse) println(i)
5.写个过程,打印n到0
def countdown(n: Int){
List(0 to n: _*).reverse.foreach(println)
}
6.循环版
var t:Long = 1
for(i <- "Hello") t = t * i.toLong
println(t)
7.不用循环版
"Hello".map(_.toLong).product
8.
def pro(s: String): Long = {
s.map(_.toLong).product
}
9.
def
product1(s:String):Long={
if(s.length ==
1)
s.charAt(0).toLong
else
s.take(1).charAt(0).toLong * product1(s.drop(1))
}
def
product2(s:Array[Char]):Long={
if(s.length ==1)
s(0).toLong
else
s(0).toLong * product2(s.drop(1))
}
相关文章推荐
- Scala第二章学习笔记
- java编程思想学习笔记 第二章
- Scala2.11.7学习笔记(三)控制结构及异常处理
- 编译原理学习笔记——第二章:语言及其文法
- Scala学习笔记 - 快学scala第三章
- Scala基本语法学习笔记
- scala学习笔记(十 一)——异常处理
- Scala学习笔记之面向对象
- Hibernate学习笔记 第二章 基本对象关系映射
- Scala学习笔记(三) - 基础类型
- 吴恩达深度学习笔记 第二章作业1
- 统计学习方法——第二章学习笔记
- CSAPP深入理解计算机系统第二章学习笔记(1)
- Scala学习笔记
- 汇编语言学习笔记 ( 第二章)
- 第52讲:Scala中路径依赖代码实战详解学习笔记
- python 学习笔记第二章:安装python
- scala学习笔记——操作符
- Scala学习笔记-7
- Scala学习笔记-apply方法