3.3 区间运算符

Kotlin提供了两个区间运算符,它们都可以非常方便地构建一种数据结构,这种数据结构可包含特定区间内的所有值。

3.3.1闭区间运算符

闭区间运算符a .. b用于定义一个从a~b(包括a、b边界值)的所有值的区间,对于闭区间运算符而言,a不能大于b,否则程序运行时将会报错。

Kotlin的for-in循环可用于遍历区间内的所有数据。例如如下代码。

程序清单:codes\03\3.3\RangeTest.kt

fun main(args: Array<String>) {

//使用闭区间运算符定义区间

var range1 = 2 .. 6

for( num in range1 ) {

println("${num} * 5 = ${num * 5}")

}

}

上面粗体字代码构建了一个区间,该区间包含2~6的所有数值,包括2、3、4、5、6这5个值。

3.3.2 半开区间运算符

半开区间运算符a until b用于定义一个从a~b(包括a边界值,但不包含b边界值)的所有值的区间,半开区间运算符与闭区间运算符类似,a也不能大于b。
如果a until b中边界a与边界b的值相等,就会产生一个空区间,该区间不包含任何值;如果a .. b中边界a与边界b的值相等,就会产生一个只包含一个值的区间,该区间只包含一个边界值。
利用半开区间遍历数组等列表(数组元素的索引是0到长度减1)时非常方便,例如如下程序(程序清单同上)://定义数组

val books = arrayOf("Swift" , "Kotlin" , "C" , "C++")

//使用半开区间运算符定义区间

for ( index in 0 until books.size) {

println("第${index+1}种语言是:${books[index]}")

}

上面程序构建了0 until books.size的区间,其中books.size返回数组元素的个数,也就是4,而且此处使用的是半开区间,因此该区间代表0、1、2、3等数值。

3.3.3 反向区间

如果程序希望区间可以从大到小,则可使用downTo运算符(其实是一个infix函数),该函数同样构建一个闭区间。对于a downTo b而言,此时要求b不能大于a。
例如如下程序使用downTo定义了反向区间。
程序清单:codes\03\3.3\DownToTest.kt

fun main(args: Array<String>) {

//使用反向闭区间运算符定义区间

var range1 = 6 downTo 2

for( num in range1 ) {

println("${num} * 5 = ${num * 5}")

}

}

上面程序使用downTo定义的区间将会从6逆序降到2,上面程序的输出结果如下所示。

6 * 5 = 30

5 * 5 = 25

4 * 5 = 20

3 * 5 = 15

2 * 5 = 10

3.3.3 区间步长

前面我们见到的所有区间的默认步长都是1,也就是区间内两个值之间的差值是1。而通过step
运算符(其实是一个infix函数)可以显式指定区间的步长。例如如下程序(程序清单同上)。

//为反向闭区间指定步长

for( num in 7 downTo 1 step 2 ) {

println("${num} * 5 = ${num * 5}")

}

上面程序使用downTo定义的区间将会从7逆序降到1,且步长为2,上面程序的输出结果如下所示。

7 * 5 = 35

5 * 5 = 25

3 * 5 = 15

1 * 5 = 5

以上内容节选自《疯狂Kotlin讲义》:一本让您最直接认识Kotlin的疯狂讲义

本书即将于2017年11月发售 敬请期待

往期连载

第一期juejin.im/post/59c0b7…

第二期:juejin.im/post/59c1d6…

第三期:juejin.im/post/59e407…

第四期:juejin.im/post/59ed77…

第五期:juejin.im/post/59eec3…

第六期:juejin.im/post/59effb…

第七期:juejin.im/post/59f153…

第八期:juejin.im/post/59f283…

第九期:juejin.im/post/59f686…

第十期:juejin.im/post/59f7ea…

第十一期:juejin.im/post/59f953…

第十二期:juejin.im/post/59fa7e…

第十三期:juejin.im/post/59fc1e…

第十四期:juejin.im/post/59ffcb…

第十五期:juejin.im/post/5a0162…

第十六期:juejin.im/post/5a0271…

第十七期:juejin.im/post/5a090f…

相关书籍《疯狂Android讲义》item.jd.com/11689014.ht…

疯狂kotlin讲义连载之运算符和表达式——区间运算符相关推荐

  1. 疯狂kotlin讲义连载之Kotlin的基础类型--null安全

    null安全可以说是Kotlin语言对Java的重大改进之一,这样可以避免Java编程时令人恐惧的"NullPointerException"(简称:NPE).但话说回来,null ...

  2. 疯狂kotlin讲义连载之Kotlin的基础类型--字符串

    Kotlin使用String类型字符串.字符串表示一个有序的字符集合,例如在前面代码中看到的"fkit.org"."crazyit.org"等代表字符串,Str ...

  3. 疯狂Kotlin讲义学习笔记04-05章:流程控制、数组和集合

    1.when分支取代swith分支 不在需要使用case关键字 case后面的冒号改为-> default改为更有意义的else 如果一个case里有多条语句,需要将多条语句用大括号括起来 wh ...

  4. 疯狂Kotlin讲义学习笔记07章:面向对象(上)对象,中缀,解构,幕后字段、属性,延迟初始化,访问控制符,构造器,继承,重写,super限定,重写,多态,is类型检查,as强制类型转换

    1.定义类的标准格式 修饰符 class 类名 [ constructor 主构造器]{零到多个次构造器定义零到多个属性....零到多个方法.... } 修饰符open是final的反义词,用于修饰一 ...

  5. 华农c语言计算高精度加法_考研计算机 | 运算符与表达式算术运算符

    一.算术运算符与算术表达式 (一)基本的算术运算符+加法运算符,或正值运算符3+5.+3–减法运算符,或负值运算符5-2.-3* 乘法运算符3*5/除法运算符5/3%模运算符,或称求余运算符,%两侧均 ...

  6. 单片机C语言中的位运算符,单片机c语言教程第八课 运算符和表达式(位运算符)...

    学过汇编的朋友都知道汇编对位的处理能力是很强的,但是单片机C语言也能对运算对象进行按位操作,从而使单片机C语言也能具有一定的对硬件直接进行操作的能力.位运算符的作用是按位对变量进行运算,但是并不改变参 ...

  7. 《疯狂Kotlin讲义》读书笔记2——Kotlin的基本类型

    Kotlin的基本类型 和Java一样,Kotlin也是一种强类型语言,即要求: 1.所有变量都需要先声明.后使用. 2.指定类型的变量只能接受类型与之匹配的值. 强类型语言可以在编译过程中发现源代码 ...

  8. Java学习笔记2.3.3 运算符与表达式 - 关系运算符

    文章目录 零.本讲学习目标 一.关系运算符概念 二.关系运算符使用 (一)分类说明表 (二)注意事项 (三)案例演示 任务1.比较两个学生成绩 任务2.求解一元二次方程 零.本讲学习目标 掌握Java ...

  9. 单片机c语言表达式与的关系,单片机c语言教程第七章--运算符和表达式(关系运算符)...

    描述 关系运算符,同样我们也并不陌生.单片机C语言中有六种关系运算符,这些东西同样是在我们小时候学算术时就已经学习过了的: > 大于 < 小于 >= 大于等于 <= 小于等于 ...

最新文章

  1. 智办事:高效的目标管理,让企业战略目标得以实现
  2. DotNET企业架构应用实践-系统架构与性能-缓存技术与ORM中的缓存查询技术
  3. spoj Find Log
  4. 反模式:神仙大类和黄金大锤
  5. 微课堂迎圣诞送福利 | 姬十三@你:我想和你相聚社区共度圣诞良宵,约么?
  6. 构造函数和析构函数深拷贝和浅拷贝
  7. PWA · 前后端协作 · Node | JTalk 掘金线下活动第七期
  8. mysql相关命令操作
  9. java vbs_VBS基础篇 - vbscript Dictionary对象
  10. 网易云易盾牵手百视通 助力广电领域新媒体内容安全
  11. PaddleOCR文字识别使用
  12. Python写视图界面--pyqt的使用
  13. 获取内网、通过外部网站返回得到内网外部IP (C#/VB.NET)
  14. vue2+vant2搭建H5框架
  15. 前端 如何检测到当前的网页已经退出_如何监控网页崩溃?
  16. pdf 转图片 php,php如何实现pdf转换成图片
  17. Win10关闭自动调节亮度
  18. SecureCRT 如何快速执行常用命令
  19. Bluetooth模块用于管理蓝牙设备,搜索附近蓝牙设备、实现简单数据传输
  20. CTF(二)DES中的S盒

热门文章

  1. IEEE CS:2021年的12大技术趋势
  2. 重磅盘点:过去8年中深度学习最重要的想法
  3. 中科院计算所关于“木兰”语言问题处理情况说明
  4. 城市仿真为何成为大势所趋?
  5. 图解|2018年度中国科学十大进展
  6. 重磅:IBM 340亿美元收购红帽软件,开源生态或将迎来重大变化
  7. 工业4.0进行时:工业机器人为何能够快速爆发?
  8. 2020年投入200000000美元,华为不只挖掘年薪百万的“天才少年”
  9. 将PDF文件拆分成多个文件的教程
  10. 关于 Nginx 配置 WebSocket 400 问题