Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Kotlin----控制语句

Kotlin----控制语句

作者头像
对话、
发布于 2022-02-22 06:17:41
发布于 2022-02-22 06:17:41
62700
代码可运行
举报
文章被收录于专栏:Android-XjAndroid-Xj
运行总次数:0
代码可运行
1、条件分支

(1)、简单分支–if…else

kotlin 中 if…else 语句具有返回值,类似于Java中的三目运算

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//传入两个值 a 和 b ,  将大值显示在TextView控件中
nameTextView.text=if(a>b) a else b

(2)、多分支

A: 特点

kotlin 中没有 switch/case ,

  • 使用 when/else 替代
  • when/else 也有返回值
  • 执行完一个节点之后就会终止循环
  • 分支中判断条件可以是常量/变量/表达式——Java中的switch/case 中 case 节点只能是常量
  • 为了确定所有情况都做了判断,通常不能省略else

B: 基本使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var count:Int = 0 btn_when_simple.setOnClickListener {
tv_answer.text = when (count) { 0 -> "值为0"
1 -> "值为1"

else -> "其他值"
}
count = (count+1) % 3
}

C: 穿透

java 中 switch/case 需要穿透时需要列出每一个常量条件,但 kotlin中可以简化——

  • 多个条件直接写在一行,使用 ”,“
  • 间隔如果条件连续数值,可以通过指定区间范围
  • 如果条件是连续数值,并且需要判断不在区间范围内,则使用
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_when_region.setOnClickListener { tv_answer.text = when (count) {
1,3,5,7,9 -> "取值为13579中的一个"
in 13..19 -> "取值为13到19中的一个"
!in 6..10 -> "取值不再6到10之间" else -> "其他值"
}
count = (count+1) % 20
}

D、以表达式为分支条件

kotlin 中 通过 is 关键字用来判断 A 是否为 B 的实例—— ,等同于 Java中的 A instance B .

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var countType:Number; btn_when_instance.setOnClickListener {
count = (count+1) % 3 countType = when (count) {
0	-> count.toLong();
1	-> count.toDouble() else -> count.toFloat()
}

tv_answer.text = when (countType) { is Long -> "Long类型"
is Double -> "Double类型" else -> "其他类型"
}
}

2、循环处理

(1)、遍历循环

即 for-in 、forEach、 迭代器的使用

(2)、条件循环

满足某个条件时执行/终止循环。

A: 使用关键字

为此,新增了多个关键字:until、setp、downTo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 遍历11到66之间的数值,until 声明了一个左闭右开的区间——不包含66,包含11 for (i in 11 until 66) {
...
}

//     遍历23-89之间的数值,步进为4——每次+4。23..89声明一个左右均闭合的区间
for (i in 23..89 step 4) {
...
}

//倒序遍历从50到7
for (i in 50 downTo 7) {
...
}

B: 使用while、do/while

由于关键字有限,能实现的效果有限,所以,更复杂的逻辑可以使用 while 或 do/while实现

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_repeat_begin.setOnClickListener { var poem:String=""
var i:Int = 0
while (i < poemArray.size) { if (i%2 ==0) {
poem = "$poem${poemArray[i]}\n"
} else {
poem = "$poem${poemArray[i]}\n"
}
i++
}
poem = "${poem}该诗歌一共有${i}句" tv_poem_content.text = poem
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_repeat_end.setOnClickListener { var poem:String=""
var i:Int = 0 do {
if (i%2 ==0) {
poem = "$poem${poemArray[i]}\n"
} else {
poem = "$poem${poemArray[i]}\n"
}
i++
} while (i < poemArray.size)

poem = "${poem}该诗歌一共有${i}句" tv_poem_content.text = poem
}

(3)、中断循环

使用 break——中断循环、continue——跳过本次循环,基本用法同Java,

另外,当嵌套循环时,还可以通过 @循环标签名 指定要中断的循环。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_repeat_break.setOnClickListener { var i:Int = 0
var is_found = false
// outsize@ 表示为外层循环添加标签,名称为 outside outside@ while (i < poemArray.size) {
var j:Int = 0
var item = poemArray[i]; while ( j < item.length) { if (item[j] == '一') { is_found = true
//中断标签名为outside的循环 break@outside
}
j++
}
i++
}

3、空处理

(1)、字符串的有效性判断

校验空字符串的方法:

  • isNullOrEmpty —— 为null或长度为0时返回true。
  • isNullOrBlank —— 为null或长度为0或者全是空格,返回true。
  • isEmpty —— 长度为0时返回true,必须先判断非null
  • isBlank —— 长度为0或者全是空格返回true,必须先判断非null
  • isNotEmpty —— 长度大于0时返回true,必须先判断非null
  • isNotBlank —— 长度大于0并且非空格返回true,必须先判断非null

(2)、声明可空变量

kotlin中默认变量非空,如果需要声明一个可空的变量,则在类型后面追加一个问号?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ar strCanNull:String?

(3)、校验空值的运算符——?、?:、!!

​ ? 表示可空,如果空直接返回null

​ ?: 表示一旦为空返回冒号后面的值,否则返回正常的值

​ !! 表示断言非空(放弃非空判断)。但是,如果做了这个断言,但依旧为null,那么会报空指针。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var length_null:Int? btn_question_dot.setOnClickListener {
   //strB后面跟了一个”?“表示可null,如果为null则直接返回null,   此时   length_null的值为null
   length_null = strB?.length
   tv_check_result.text = "追加 ? 调用对象属性时得到的长度为 $length_null"
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_question_colon.setOnClickListener {
	//如果strB非null,返回正常的 strB.length; 如果strB为null,则返回-1 
    length = strB?.length ?: -1
	tv_check_result.text = "使用 ?: 调用对象属性时得到的长度为 $length"
}
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btn_exclamation_two.setOnClickListener {
    strB = "ABCDE"
	//只有百分百确定非null时,才使用!!,否则依旧会报空指针 	length = strB!!.length
	tv_check_result.text   = "使用!!断言时得到的属性值长度为$length"
}

4、等式判断

(1)、结构相等

  • kotlin中使用 == 判断两个数据是否相等,使用 != 判断是否不相等。
  • kotlin中的String也是使用这种方式。Java中使用equals()
  • kotlin中比较字符串时不再比较在内存中的存储地址,而是直接比较变量值 ,这种方式就被叫做 结构相等,即模样相同/外观相同。

(2)、引用相等

如果需要判断引用是否相等,也就是判断内存地址是否一致,kotlin中使用 =,如果判断不一致,则使用 !

  • 对于基本数据类型(包括字符串),结构相等和引用相等一致。
  • 通过 clone 得到的对象即便属性值一样,但引用地址不一致。

(3)、is 和 in

  • is 和 !is —— 判断A是否为B的实例,如: 对象名 is 类名
  • in 和 !in —— 判断数组中是否包含某个元素,如 变量名 in 数组名
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kotlin学习日志(三)控制语句
最简单的分支莫过于if…else了吧,Java中相信都用过,那么在Kotlin中又是怎么用的呢?其实也比较类似,来看看吧! 布局文件中:
晨曦_LLW
2020/09/25
1K0
Kotlin学习之路(3)控制语句
任何编程语言都会有自己的条件控制语句,这样才能使其逻辑更加的完整。Kotlin的控制语句与Java类似但也有些不同,本节将对条件 循环 以及运算符号表达式进行详细的介绍。
全栈程序员站长
2021/04/07
6830
Kotlin入门(7)循环语句的操作
上一篇文章介绍了简单分支与多路分支的实现,控制语句除了这两种条件分支之外,还有对循环处理的控制,那么本文接下来继续阐述Kotlin如何对循环语句进行操作。 Koltin处理循环语句依旧采纳了for和while关键字,只是在具体用法上有所微调。首先来看for循环,Java遍历某个队列,可以通过“for (item : list)”形式的语句进行循环操作。同样Kotlin也能使用类似形式的循环,区别在于把冒号“:”换成了关键字“in”,具体语句形如“for (item in list)”。下面是Kotlin对数组进行循环处理的代码例子:
aqi00
2019/01/18
8420
Kotlin入门(6)条件分支的实现
上一篇文章介绍了字符串的相关操作,其中示例代码用到了if和for语句,表面上看,Kotlin对控制语句的处理与Java很像,可实际上,Kotlin在这方面做了不少的改进,所以本篇和下一篇文章就分别介绍Kotlin如何操作条件判断和循环语句。 说起条件判断,最简单的莫过于人尽皆知的if...else...了,这个东东从C语言延续到Java,再进化到Kotlin,基本用法仍是一样的,看看下面的示例代码就知道了:
aqi00
2019/01/18
9500
Kotlin入门(8)空值的判断与处理
上一篇文章介绍了如何对循环语句进行操作,末尾还演示了发现空串时直接继续下一循环,只是在初始化字符串数组时使用了“val poem2Array:Array<String?> = ***”,该表达式不免令
aqi00
2019/01/18
4.4K0
Kotlin入门(11)江湖绝技之特殊函数
上一篇文章介绍了Kotlin对函数的输入参数所做的增强之处,其实函数这块Kotlin还有好些重大改进,集中体现在几类特殊函数,比如泛型函数、内联函数、扩展函数、尾递归函数、高阶函数等等,因此本篇文章就对这几种特殊函数进行详细的说明。
aqi00
2019/01/18
1.2K0
Kotlin 基础语法
以上例中 test() 的全名是 com.runoob.main.test、Runoob 的全名是 com.runoob.main.Runoob。
zhangjiqun
2024/12/16
1300
Kotlin入门教程,快使用Kotlin吧
数组用Array类实现,和Java不同的地方在于,Array类有一个size属性表示数组长度,还有get和set方法,但是也可以使用array[position]的方式获取
用户2802329
2018/08/07
1.1K0
Kotlin入门教程,快使用Kotlin吧
Kotlin热身篇: 简介与基本用法
改不完的 Bug,写不完的矫情。公众号 杨正友 现在专注移动基础平台开发 ,涵盖音视频, APM和信息安全等各个知识领域;只做全网最 Geek 的公众号,欢迎您的关注!精彩内容不容错过~ 一. kotlin 简介 Kotlin 拥有强大的生态,因为 Kotlin 是一门跑在 Java 虚拟机上的函数式语言,完全符合 JVM 的设计规范,如: 类型擦除,装箱和拆箱等等。所以也可以像 Java 一样支持 Android 原生环境开发,服务端,甚至大前端方向。那么 Kotlin 和 Java 有什么共同点
小木箱
2020/11/25
1.6K0
开心档-Kotlin 基础语法
以上例中 test() 的全名是 com.kxdang.main.test、Runoob 的全名是 com.kxdang.main.Runoob。
爱学iOS的小麦子
2023/02/08
6990
Kotlin入门(15)独门秘笈之特殊类
上一篇文章介绍了Kotlin的几种开放性修饰符,以及如何从基类派生出子类,其中提到了被abstract修饰的抽象类。除了与Java共有的抽象类,Kotlin还新增了好几种特殊类,这些特殊类分别适应不同的使用场景,极大地方便了开发者的编码工作,下面就来看看Kotlin究竟提供了哪些独门秘笈。
aqi00
2019/01/18
1.3K0
Kotlin入门(16)容器的遍历方式
Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。不过Kotlin作为一门全新的语言,肯定还是要有自己的容器类,不然哪天Java跟Kotlin划清界限,那麻烦就大了。与Java类似,Kotlin也拥有三类基本的容器,分别是集合Set、队列List、映射Map,然后每类容器又分作只读与可变两种类型,这是为了判断该容器能否进行增删改等变更操作。Kotlin对修改操作很慎重,比如变量用val前缀表示不可修改,用var前缀表示允许修改;类默认是不允许继承的,只有添加open前缀才允许该类被继承;至于容器默认为只读容器,如果需要进行修改则需加上Mutable形成新的容器,比如MutableSet表示可变集合,MutableList表示可变队列,MutableMap表示可变映射。 既然Set/List/Map都属于容器,那么必定拥有相同的基本容器方法,具体说明如下: isEmpty : 判断该容器是否为空。 isNotEmpty : 判断该容器是否非空。 clear : 清空该容器。 contains : 判断该容器是否包含指定元素。 iterator : 获取该容器的迭代器。 count : 获取该容器包含的元素个数,也可通过size属性获得元素数量。 初始化赋值 : Kotlin允许在声明容器变量之时进行初始赋值,这点很方便比Java先进,当然不同容器的初始化方法有所区别,具体的对应关系见下表: 只读集合Set    setOf 可变集合    mutableSetOf 只读队列List    listOf 可变队列MutableList    mutableListOf 只读映射Map    mapOf 可变映射MutableMap    mutableMapOf 以上是Kotlin容器的基本方法,更具体的增删改查等用法则有所不同,下面分别介绍这三类六种容器的详细用法。
aqi00
2019/01/18
2.4K0
Kotlin学习日志(二)数据类型
Kotlin的基本数据类型和其他高级语言得分类一样,包括整型、长整型、浮点型、双精度、布尔类型、字符型、字符串这几种常见类型,这样说可能过于抽象,那就和java中的基础数据类型来对比一下吧。
晨曦_LLW
2020/09/25
3.4K0
Kotlin入门(9)函数的基本用法
上一篇文章介绍了Kotlin新增的空安全机制,控制语句部分可算是讲完了,接下来将连续描述Kotlin如何定义和调用函数,本篇文章先介绍函数的基本用法。 前面几篇文章介绍控制语句之时,在setOnClickListener里面写了大段的代码,这不但导致onCreate方法变得很臃肿,而且代码的可读性也变差了。对于这种情况,通常的解决办法是把某段代码挪到一个独立的函数中,然后在原位置调用该函数,这样做的好处很多,不仅增强了代码的可读性,还能多次重复调用函数。那么Kotlin对函数的使用跟Java相比,有哪些区别呢?先从最常见的onCreate方法入手,Java编写的onCreate函数代码如下:
aqi00
2019/01/18
5080
Kotlin学习日志(五)类与对象
通过上述的代码比较,Kotlin对类的写法与Java之间有以下几点区别: (1)Kotlin省略了关键字public,因为Kotlin默认类是开放的,所以不需要这个关键字。 (2)Kotlin用冒号“:”代替extends,也就是通过冒号表示继承关系。 (3)Kotlin进行继承时,父类后面多了括号“()”。
晨曦_LLW
2020/09/25
1.2K0
Kotlin学习日志(四)函数
函数这个词相信各位不会陌生,而Kotlin中也是使用了众多函数的,正所谓面向函数编程。
晨曦_LLW
2020/09/25
1.9K0
Kotlin入门(17)等式判断的情况
话说等式可是编程语言最基本的表达式之一,不管哪种高级语言,无一例外都采用双等号“==”判断两个变量是否相等;就算是复杂的对象,在Java中也可通过equals函数判断两个实例是否相等。按理说这些能够满足绝大多数场合的要求了,那么Kotlin又给等式判断加入了哪些新概念呢?下面就让我们好好探讨一下具体业务中的等式判断。
aqi00
2019/01/18
8940
抱歉!不要用Java的语法思维来写Kotlin
如果你是像我一样是一名 优秀的Java开发者 ^_^,而且已经想用kotlin来实现你的程序,那么,抱歉!不要用Java的语法思维来写Kotlin,不要让kotlin的优雅埋没。如果你没有Java开发经验,下面的内容也对你会有帮助。。。
全科
2018/08/15
3K0
Kotlin实用的语法糖:空安全、类型转换 & 相等性判断
Kotlin被Google官方认为是Android开发的一级编程语言。今天,我将主要讲解,关于Kotlin的一些实用语法糖,主要包括:
Carson.Ho
2020/03/25
1.3K0
Kotlin实用的语法糖:空安全、类型转换 & 相等性判断
Kotlin---控制流程
在if-else的控制流中,可以使用表达是来获取结果,也可以通过闭包来获取表达式结果
None_Ling
2018/12/05
4300
相关推荐
Kotlin学习日志(三)控制语句
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验