《疯狂Kotlin讲义》读书笔记4——流程控制
流程控制
与Java类似,Kotlin同样提供了两种基本的流程控制结构:分支结构和循环结构。
Kotlin提供了 if 和 when 两种分支语句,其中 when 语句可以代替Java的switch语句,且功能更强大;Kotlin提供了 while 、do while 、for-in 循环,抛弃了Java原有的普通for循环。Kotlin也提供了 break 和 continue 来控制循环结构。
4.1 分支结构
4.2.1 if 分支
Kotlin中的 if 分支既可以作为语句使用,也可以作为表达式使用。
//作为语句使用的三种形式:
//形式1
if (expression) {
statements...
}
//形式2
if (expression) {
statements...
} else {
statements...
}
//形式3
if (expression) {
statements...
} else if (expression) {
statements...
}
...
// 注意:使用if else语句时,一定要先处理范围更小的情况
4.2.2 if 表达式
// if 作为表达式使用时:
var age = 20
//将if表达式赋值给str
var str = if (age > 20) "age大于20" else if (age < 20) "age小于20"
else "age等于20"
//由上述代码可知,当if分支作为表达式使用时,整个if表达式最终会返回一个值,因此我们可以
//用它来代替Java中的三目运算符。
//注意:if表达式必须要有返回值
4.2.3 when分支语句
when分支取代了Java中原有的switch语句。
var score = 'B'
when (score) {
'A' -> {
println("You get a A !")
}
'B' -> {
println("You get a B !")
}
'C' -> {
println("You get a C !")
}
'D' -> {
println("You get a D !")
}
else -> {
println("Flunk !")
}
}
when分支相对于switch分支的改进:
- when分支可以匹配多个值。
- when分支后的值不要求是常量,可以是任意表达式。
- when分支对条件表达式的类型没有任何要求。
// when分支可以匹配多个值
var score = 'B'
when (score) {
'A', 'B' -> {
println("优秀")
}
'C', 'D' -> {
println("良好")
}
}
// when分支后的值不要求是常量,可以是任意表达式
var score = 'B'
var str = "EFGH"
when (score) {
str[0] - 4, str[1] - 4 -> {
println("优秀")
}
str[2] - 4, str[3] - 4 -> println("良好")
}
// when分支的条件表达式可以是任意类型
var date = Date()
when (date) { // 以Date类型作为when的条件表达式
Date() -> {
println("666")
}
else -> {
println("555")
}
}
4.2.4 when 表达式
与 if 分支相同,when分支也可以作为表达式使用。when表达式必须有返回值,因此when表达式必须有else分支。
var score = 'B'
val str = when (score) {
'A' -> {
println("666")
"优秀"
}
'B' -> {
println("it's ok")
"良好"
}
else -> {
println("555")
"不及格"
}
}
println(str) //输出:良好
4.2.5 when 分支处理范围
通过使用 in 、 !in 运算符,我们还可以使用when分支检查表达式是否位于指定区间或集合中。
val age = java.util.Random().nextInt(100)
//通过when表达式对str赋值
var str = when (age) {
in 10..25 -> "年轻人"
in 25..50 -> "中年人"
in 51..80 -> "老年人"
else -> "牛人"
}
4.2.6 when 分支处理类型
通过使用 is 、!is 运算符,我们可以使用when分支检查表达式是否为指定类型。
var element: String = "hello world"
when (element) {
is String -> println("String类型")
is Int -> println("Int类型")
is Double -> println("Double类型")
else -> println("其他类型")
}
4.2.7 when条件分支
我们可以用when分支来代替 if..else if 链,具体代码不做赘述。
4.3 循环结构
4.3.1 while循环
与Java相同,不做赘述。
4.3.2 do while 循环
同上。
4.3.3 for - in 循环
for - in 循环格式如下:
for (常量名 in 字符串 | 范围 | 集合) {
statements...
}
上述语法格式有两点需要注意:
for - in 循环中的常量无需声明。 for - in 循环中的常量会在每次循环开始前自动被赋值,因此该常量无需提前声明。for - in 循环可以遍历任何可迭代对象。所谓的可迭代对象就是该对象包含一个iterator()方法,且该方法的返回值对象具有next()、hasNext()方法。
//for-in循环的简单使用
for (num in 2..5) {
println(num)
}
注意:for - in 循环中的循环计数相当于一个用val声明的常量,因此程序不允许在for - in循环中对循环计数器进行赋值。
for (num in 2..5) {
println(num)
num = 8; //对循环计数器num进行赋值会报错
}
4.3.4 嵌套循环
与Java相同,不做赘述。
4.4 循环控制结构
Kotlin提供了 continue 和 break 来控制循环结构,除此之外还可以使用 return 来结束整个方法。
4.4.1 使用 break 结束循环
Kotlin中的break语句基本与Java类型,不过有一点值得一提:在Kotlin中,break语句不仅可以结束其所在的循环,还可以直接结束其外层循环。此时需要在break后紧跟一个标签,用于标识一个外层循环。
Kotlin中的标签就是一个紧跟着@的标识符。Kotlin中的标签只有放在循环语句之前才起作用。
//外层循环,用outer标识
outer@ for (i in 0 until 5) {
//内层循环
for (j in 0 until 3) {
println("i = ${i}, j = ${j}")
if (j == 2) {
break@outer //该break不是结束其所在的循环,而是结束outer所标识的循环
}
}
}
4.4.2 使用 continue 忽略本次循环剩下的语句
使用同break语句,不做赘述。
4.4.3 使用return结束方法
同Java,不做赘述。
《疯狂Kotlin讲义》读书笔记4——流程控制的更多相关文章
- TJI读书笔记09-访问控制权限
TJI读书笔记09-访问控制权限 包,package和import 权限修饰符 接口和实现 类的访问权限控制 首先问一个问题,为什么要有访问控制权限? 安全,这当然是一个很重要的原因. 让类库的使用者 ...
- 强化学习读书笔记 - 10 - on-policy控制的近似方法
强化学习读书笔记 - 10 - on-policy控制的近似方法 学习笔记: Reinforcement Learning: An Introduction, Richard S. Sutton an ...
- 《Node.js In Action》笔记之流程控制
转向Javascript后,开始学习了node.js,选择的第一本书是<Node.js in Action> 将近一个月时间,断断续续看完,选几个点做下笔记 1.实现串行化流程控制 var ...
- 《疯狂java讲义》笔记 1-5章
1.编译语言和解释语言理解,摘自李刚老师的<疯狂Java讲义>第三版: 就是说,Java和.net都是编译型有事解释型语言.编译型就是根据不同平台编译成不同的可执行机器码,编译过程中会进行 ...
- 【原】Java学习笔记005 - 流程控制
package cn.temptation; public class Sample01 { public static void main(String[] args) { // 程序的流程控制(流 ...
- Python学习笔记 - day4 - 流程控制
Python流程控制 Python中的流程控制主要包含两部分:条件判断和循环. Python的缩进和语法 为什么要在这里说缩进和语法,是因为将要学习的条件判断和分支将会涉及到多行代码,在java.c等 ...
- PL/SQL笔记(1)-流程控制,循环,异常,块
流程控制 1.If,then,else,elsif(不是elseif) ' then null; endif; 2.Case 简单case表达式: 搜索型Case表达式: 3.goto语句 begin ...
- C#学习笔记_04_流程控制
04_流程控制 程序的执行结构: 顺序结构 分支结构 循环结构 可以通过某些特定的控制语句来控制代码的执行结构 分支流程控制 if else 基本语法 可以只有if没有else,但是不能没有if只有e ...
- PYTHON 学习笔记2 流程控制工具以及函数定义、匿名函数
前言 在上一节的学习中.已经介绍了几种基本类型.包括字符串的定义,以及字符串中索引.切片.字符串拼接的使用方法.以及基本的整形数据运算.一些之前都没有了解过的运算符.比如 ** 乘方 //整数除法等. ...
随机推荐
- K8S线上集群排查,实测排查Node节点NotReady异常状态
一,文章简述 大家好,本篇是个人的第 2 篇文章.是关于在之前项目中,k8s 线上集群中 Node 节点状态变成 NotReady 状态,导致整个 Node 节点中容器停止服务后的问题排查. 文章中所 ...
- RecycleView 点击事件监听
1.定义RecycleView 监听接口类 1 package com.example.*****; 2 3 import android.view.View; 4 5 public interfac ...
- 《Effective Java》总结
导语 <Effective Java>是和<Thinking in java>齐名的java进阶书籍.作者参与了JDK标准库的编写工作,对于此书的学习,让我收获很多.好记性不如 ...
- 阿里云linux安装nginx,亲测有效
系统平台:CentOS release 6.6 (Final) 64位. 一.安装编译工具及库文件 yum -y install make zlib zlib-devel gcc-c++ libtoo ...
- IHttpClientFactory 踩过的坑
public class BasicUsageModel : PageModel { private readonly IHttpClientFactory _clientFactory; publi ...
- DOM及相关操作
1.背景介绍 什么是DOM?简单地说,DOM是一套对文档的内容进行抽象和概念化的方法, 在现实世界里,人们对所谓的'世界对象模型'都不会陌生,例如,当用'汽车'.'房子'和'树'等名词来 ...
- 代码小知识之UUID
1.生成UUID(UUID保证对在同一时空中的所有机器都是唯一的,UUID的唯一缺陷在于生成的结果串会比较长.UUID 来作为数据库数据表主键是非常不错的选择,保证每次生成的UUID 是唯一的) UU ...
- 基于西门子S7-1500的大型焊接机全套程序,使用博图V14打开(带全部注释)
程序说明:本套程序是在从事自动化行业时候的做的项目的程序,经过在设备上运行测试,其中包含20多个轴的伺服控制以及模拟量,数字量IO的控制,包括扫描枪的读取,属于大型程序,总步数有好几万步. 本程序注释 ...
- Mac创建Root用户
1.打开Mac终端管理工具 前往-实用工具-终端 2.用命令的形式创建账户 sudo passwd root 3.输入当前登录用户密码 4.输入root用户密码并验证
- Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解
封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...