文档章节

内建控制结构之while循环

柳哥
 柳哥
发布于 2014/06/07 11:47
字数 644
阅读 82
收藏 0
点赞 0
评论 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
代码大全读书笔记-----16章循环控制

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

madbooker
2014/04/26
0
0
Go语言_基础学习篇

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

晨曦之光
2012/06/07
907
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
看书 Python 源码分析笔记 (五)

第9章 Python 虚拟机中的一般表达式 这里一般表达式指对象创建语句, 打印语句等. if, while 等归为控制流语句于下一章. 简单内建对象的创建 示例 python 代码: i = 1 // int objects = "Pyt...

刘军兴
2015/12/21
78
0
FreeMarker循环变量内建函数

这些内建函数只能用于 和 指令 的循环变量 (也可以用于已经废弃的 指令)。 下面是一些说明( 在可以列表的值中进行迭代,返回从0开始的索引): <#-- Note: x is a loop variable --><#list ['...

楠木楠
2016/11/27
283
0
【Linux学习】之 Shell初识

Shell 的 历史: - 1977年 Bourne Shell发布,并作为UNIX 7的默认Shell。 - 由于BourneShell 一直没有正式的版本号且交互性不好, 加州大学伯克利分校的一名学生编写了 C Shell,由于不支持正...

fanfan4569
2017/11/16
0
0
chapter 8 summary

避免“悬挂 else” 映射对象(比如字典)的一个最大好处就是它的搜索操作比类似 if-elif-else 语句或是 for 循环这样的序列查询要快很多. if ...: .... elif ...: .... . . . . else: ... 可以...

happyliferao
2015/10/12
4
0
python核心编程-第六章-个人笔记(一)

序列包括字符串、列表和元组三种类型 1. 序列 1.0 序列的每一个元素可以通过指定一个偏移量的方式得到,多个元素可以通过切片操作的方式一次得到。偏移量从0开始,到总元素数-1结束 1.1 标准...

好好先生_1028
2015/12/08
68
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

社交系统ThinkSNS+ V1.8.3更新播报

     研发发布版本号:1.8.3   本次版本于2018年7月16日发布   本次发布类型:新增功能、细节调整与优化   社交系统ThinkSNSPlus更新体验:请于官网下载/安装最新版或联系QQ35159...

ThinkSNS账号
8分钟前
0
0
教育思考:选择编程是一场父母和孩子的和解[图]

教育思考:选择编程是一场父母和孩子的和解[图]: 之前有个很热的段子是这样讲的:深夜十点的时候,某小区一女子大声喊叫“什么关系?啊?!到底什么关系?你说!”最后发现原来是一位妈妈陪...

原创小博客
9分钟前
0
0
X64汇编之指令格式解析

最近由于项目组内要做特征码搜索的东西,便于去Hook一些未导出函数,你懂得...于是就闲着学习了一下x86/x64的汇编指令格式。x86的汇编指令格式请参照http://bbs.pediy.com/showthread.php?t...

simpower
12分钟前
0
0
rust 语法概要(只适合不熟悉时快速查阅使用,不适合理解其精髓。未完待续)

注意:本内容只适合快查,不适合理解精髓。精髓请研读 https://kaisery.github.io/trpl-zh-cn/foreword.html 基本数据类型 i8,i16,i32,i64,i128 u8,u16,u32,u64,u128 f32,f64 char bool:true...

捍卫机密
15分钟前
0
0
JS中严格模式和非严格模式

1,使用 严格模式的使用很简单,只有在代码首部加入字符串 "use strict"。必须在首部即首部指其前面没有任何有效js代码除注释,否则无效 2.注意事项 (1)不使用var声明变量严格模式中将不通...

AndyZhouX
15分钟前
0
0
Nginx配置error_page 404 500等自定义的错误页面

Nginx 做web server时, 开发中发现有时候的网站代码有错误,我们需要跳转到一个指定内容的错误页面: 1. 在nginx.conf配置文件上加上一句: fastcgi_intercept_errors on; 2. 服务中加上: er...

MichaelShu
17分钟前
0
0
微服务架构下的监控系统设计(一)——指标数据的采集展示

前言 微服务是一种架构风格,一个大型复杂软件应用通常由多个微服务组成。系统中的各个微服务可被独立部署,各个微服务之间是松耦合的。每个微服务仅关注于完成一件任务并很好地完成该任务。...

UCloudTech
22分钟前
0
0
极客时间《趣谈网络协议》之开篇词学习笔记

出于个人兴趣,本人在极客时间购买了网易研究院云计算技术部的首席架构师刘超老师关于计算机网络的专栏之《趣谈网络协议》,由于知识版权原因,不能直接分享刘超老师的原文,所以,我会在每次...

aibinxiao
25分钟前
1
0
Activiti - 新一代的开源 BPM 引擎

Activiti 背景简介、服务和功能介绍 董 娜, 狄 浩, 和 张 晓篱 2012 年 7 月 23 日发布 背景介绍 Activiti 其核心是 BPMN 2.0 的流程引擎。BPMN 是目前被各 BPM 厂商广泛接受的 BPM 标准,全...

孟飞阳
30分钟前
0
0
最有效的方式来适配

最有效的方式来进行屏幕适配 在上代码之前先把屏幕相关的几个概念搞清楚:Density、DensityDpi、ScaleDensity。这里我们不过多讲解这些概念知识。 1.0 获取设计图的屏幕尺寸:这里我以360dp...

android-key
33分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部