文档章节

内建控制结构之while循环

柳哥
 柳哥
发布于 2014/06/07 11:47
字数 644
阅读 82
收藏 0

Scala的while循环与其他语言一致。包括状态判断和循环体,只要状态保持真,循环体就一遍遍被执行,如:

package scala
object ScalaTest {
    def main(args:Array[String]):Unit = {
        var a = 1
        wile(a <= 10) {
            println("循环: " + a)
            a += 1
        }
    }
}

Scala同样也有do-while循环,它与while循环基本没有区别,只是把状态检查移到了循环体之后(唯一的区别是,do-while必须执行循环体一次)。如例:

package scala
object ScalaTest {
    def main(args:Array[String]):Unit = {
        var a = 1
        do{
            println("循环: " + a)
            a += 1
        }while(a <= 10)
    }
}

whiledo-while结构之所以被称为“循环”,而不是表达式,是因为它们不能产生有意义的结果。结果的类型是Unit,是表明存在并且唯一存在类型为unit的值,称为unit value,写成 (),()的存在是scala的unit不同于java的void的地方。如下例:

package scala
object ScalaTest {
    def main(args:Array[String]):Unit = {
        println("Unit方法返回值与()比较是不是相等: " + (greet() == ()))
    }
    def greet(){
        println("HI")
    }
}

结果为:

HI
Unit方法返回值与()比较是不是相等:true

示例确认:比较greet的结果和unit值()的相等性,可以得到返回true。

另外,对var再赋值等式本身也是unit值,这是另一种与此相类似的架构。如例:

package scala
object ScalaTest {
    def main(args:Array[String]):Unit = {
        var flag = "N"
        if((flag = space) == ()) println("YES") else println("NO")    //注意这句
    }
    def space() = ""
}

编译这段代码时,scala会警告你使用==比较类型为Unit和()将永远返回true。Scala的赋值语句只能得到Unit值(),因此赋值语句“flag = space()”的值将永远返回()。
由于while循环不产生值,因此它经常被纯函数式语言所舍弃这种语言只有表达式,没有循环。尽管如此,scala仍然包含了while循环,因为有些时候指令式的解决方案更容易读懂,尤其是对那些以指令式背景为主导的程序员来说尤其如此。
通过情况下,我们建议你质疑对while循环的使用如同质疑对var的使用那样。实际上,while循环和var经常是结对出现的。因为while循环不产生值,为了让程序发挥作用,while循环通常不是更新var就是执行I/O。我们建议你在代码中更为审慎地使用while循环。如果对某个while或do-while循环没有非用不可的理由,那么请尝试试用别的方式实现同样的功能

© 著作权归作者所有

共有 人打赏支持
柳哥
粉丝 203
博文 405
码字总数 347782
作品 0
杭州
技术主管
Node 应用的进程管理器--pm2

pm2是一个带有负载均衡功能的 Node 应用的进程管理器。当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它...

匿名
2016/08/01
2.5K
4
Go语言_基础学习篇

GO文件目录结构 该图是go-windows的目录结构 如图,go的程序应该是在gopath文件夹下的,分为bin, pkg, 和src三个子文件夹 src文件夹:每个次级文件夹(如demo)就是代表一个go项目,里面存放...

晨曦之光
2012/06/07
907
0
代码大全读书笔记-----16章循环控制

第16章 控制循环 1.循环的种类 循环用来指代任意一种迭代控制结构,任何一种能够导致应用程序反复执行的一段代码的结构。 循环的种类: (1)计数循环:预先知道循环的次数。(例如常见的for循环...

madbooker
2014/04/26
0
0
程序员必备,快速学习 Python 的全套14张思维导图(附高清版下载)

后台回复关键词 思维导图 可获取本文中的高清思维导图(PDF版) ML & AI∣一个有用的公众号 长按,识别二维码,加关注 获取更多精彩文章

micf435p6d221ssdld2
05/23
0
0
TCL脚本语言详解

语言简介 TCL是一种很通用的脚本语言,功能强大。最早称为“工具命令语言”"Tool Command Language",但是目前已经不是这个含义,不过我们仍然称呼它TCL,发音为"tickle”。TCL经常被用于快速...

zengxiantao1994
2017/09/29
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Bash工作管理详解

Bash工作管理 Bash的工作是对具体任务的一个抽象表述,更确切的说是对管道的应用上的表述。Bash中的工作在形式上表现为一组相关进程或单个进程。工作进程组分为前台和后台,前台进程会对键盘...

小陶小陶
20分钟前
2
0
Qt那些事0.0.1

LIBS += -L$$PWD/lib/ -lStv1QMAKE_POST_LINK += $$QMAKE_COPY $$replace(PWD,"/","\\")\lib\Stv1.dll $$replace(OUT_PWD,"/","\\")\debug\Stv1.dll pro文件里,写起来按理说应该是轻松地......

Ev4n
29分钟前
2
0
如何正确的使用动态VPS(Linux)自动更换IP

背景 现在越来越多的人开始玩网赚项目,蚂蚁再小也是肉,薅羊毛的羊毛党越来越多,一些网赚项目也越来越受欢迎,但是一般的网赚项目都是要求真实用户的,所以要想获得大量的真实ip,一种动态...

bengozhong
36分钟前
2
0
分布式任务系统(LTS)部署学习使用

章节速览 背景介绍 环境部署 LTS架构原理&代码样例 个人心得经验 一、背景介绍 很多公司应该都会遇到job服务部署执行时:定时、并发、分布式这些问题。有的人就是只跑一个job服务,这样会简单...

硅步积千里
46分钟前
31
0
kotlin使用spring data redis(一)

1.引包 #忘记引用这个包的下场就是#nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool2/impl/GenericObjectPoolConfigcompile 'org.apache.commons:commons-p......

weidedong
49分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部