Scala入门随笔二
来源:互联网 发布:apple mac book pro 编辑:程序博客网 时间:2024/05/18 09:42
1.Scala的程序控制结构同其他语言一样包括顺序、选择和循环结构。后两种结构分别对应Scala中的if选择语句,while、do while和for循环语句。
2.if选择语句包括if…else…、if…else if…else、if嵌套语句,使用方法同java等高级程序设计语言相同。与其他高级语言不同的一点就是Scala中的if语句可以作为表达式使用,如果其具有返回值,那可以将返回值直接赋值给变量。
scala>val x = if("hello"=="hell") 1 else 0x: Int = 0scala>val x = if("hello"=="hell") println("1") else println("0")x: Unit = ()
3.Scala不推荐使用while循环,而是推崇使用for循环来代替while循环,while循环语句也可以作为一个表达式,但是它与if语句作为表达式时有一个区别,即while循环语句作为表达式时返回值的类型只能是Unit。这是因为函数式语言喜欢使用val类型的变量,但while循环需要与var类型的变量一起使用,所以从严格意义上讲,scala并不是纯函数式编程语言(如果不明白val和var类型变量的区别可移步至博主的《Scala入门随笔一》)
4.Scala中的for循环与其他高级程序设计语言不同,区别:
//其他程序设计语言的for循环语句格式for(初始化变量;条件判断;更新变量){}//scala中for循环语句格式for(变量<-更新变量的集合){}
在scala的for循环语句中“<-“符号叫做生成器(generator),并且for循环语句是通过遍历集合达到循环效果。
for(i<- 1 to 5){ println("i="+i)}//结果i=1i=2i=3i=4i=5
这里的to实际上是RichInt类型中的to方法,1 to 5在执行时会将Int类型隐式转换成scala.runtime.RichInt类型。然后去调用1.to(5)。to方法在scala中的定义:
def to(end: Int): Range.Inclusive = Range.inclusive(self,end)
循环的时候就会将scala.collection.immutable.Range.Inclusive集合中的每个元素赋值给变量i,达到循环效果。除了to方法还有until方法可以使用,它和to方法的区别在于1 to 5的结果是[1,5](1到5的闭区间:1,2,3,4,5)而1 until 5的结果是[1,5)(1到5的左闭右开区间:1,2,3,4)。当然,还可以有1 to (10,2),1 until (10,2)这种形式,括号里面的2是设定的步长。
def until(end: Int, step: Int): Range = Range(self,end,step)def to(end: Int, step: Int): Range.inclusive = Range.inclusive(self,end,step)
for循环还可以添加过滤条件,语法格式:
for(x <- 表达式 if 条件判断1; if 条件判断2...){ //满足所有条件判断时执行循环中的语句;}
栗子
scala>for(i<- 1 to 40 if(i%4==0);if(i%5==0)){ println("i="+i) }//结果i=20i=40
此外for循环可以和yield关键字一起使用作为表达式,这样的表达式具有返回值。下面栗子:
scala>var x = for(i<- 1 to 5) yield ix: scala.collection.immutable.IndexedSeq[Int] = Vector(1,2,3,4,5)
yield会将每循环一次生成的值保存在缓存中,循环结束后它会将所有的值生成一个集合返回。yield后面除了变量还可以跟表达式。下面栗子:
scala> var x=for(i<-1 to 5) yield i/2x: scala.collection.immutable.IndexedSeq[Int] = Vector(0,1,1,2,2)
5.Scala里面没有像其他高级程序设计语言一样提供break、continue关键字。如果在while或者是for循环中冒然使用这两个关键字会报错的。但是如果需要使用break语句的功能可以由两种替代办法来实现:
一、定义Boolean类型的变量,在for或while循环中进行条件判断;
二、在程序中引入scala.util.control.Breaks类,然后调用Breaks类中定义的breakable方法。
//引入Breaks类及其所有方法的语句import scala.util.control.Breaks._//调用Breaks中定义的breakable方法breakable{ //for循环语句,可在其中使用break关键字,break为Breaks中定义的方法}
Breaks类中breakable方法的定义如下:
def breakable(op: => Unit){ try{ op }catch{ case ex: BreakControl => if(ex ne breakException) throw ex }}
Breaks类中break方法定义如下:
def break(): Nothing = { throw breakException }
- Scala入门随笔二
- Scala入门随笔一
- Scala入门随笔三
- scala入门总结二
- scala 快速入门开发二
- 白话scala系列二 scala入门的几个基本知识
- Scala基础入门(二) Scala下载、安装教程
- Scala学习(二)---入门基础知识
- SCALA随笔(一)
- 手绘随笔:随笔(二)
- 入门随笔
- 随笔《二》
- 随笔二
- 随笔二
- 随笔二
- 随笔二
- 随笔二:
- 随笔二
- git命令行配置
- an error occurred while contacting the respository
- B树、B+树、B*树、R树
- Linux软件包
- oracle11g ocp学习笔记(一)
- Scala入门随笔二
- python3+PyQt5 重新实现QT事件处理程序
- ubuntu14.04 安装 opencv3.0
- radio,checkBox,select选中框
- HBase列族设计优化
- 容器为何物,为什么它对OpenStack很重要?
- CSS3 正方体 旋转木马动画
- CRM代码片段
- Error creating bean with name 'sqlSessionFactory' defined in class path resource [applicationContext