Kotlin——最详细的控制语句使用
在前面 的章节中讲解了Kotlin
语言中的数据类型、变量与常量的定义。不了解请参见前面的内容:
下面详细为大家讲解Kotlin
中的控制语句使用。不得不说其和Java
中还是有很多不一样的地方。
目录
一、if语句
在
Kotlin
中的if
语句和Java
还是还是有一定的区别的,它能在Java
中更灵活,除了能实现Java
写法外,还可以实现表达式(实现三元运算符),及作为一个块的运用。
1、传统写法(同Java
写法一样)
例:
var numA = 2
if (numA == 2){
println("numA == $numA => true")
}else{
println("numA == $numA => false")
}
输出结果为:
numA == 2 => true
2、Kotlin
中的三元运算符
- 在Kotlin中其实是不存在三元运算符(
condition ? then : else
)这种操作的。- 那是因为if语句的特性(
if
表达式会返回一个值)故而不需要三元运算符。
例:
// 在Java中可以这么写,但是Kotlin中直接会报错。
// var numB: Int = (numA > 2) ? 3 : 5
// kotlin中直接用if..else替代。例:
var numB: Int = if ( numA > 2 ) 3 else 5 // 当numA大于2时输出numB的值为3,反之为5
println("numB = > $numB")
输出结果为:
numB = > 3
由上可以看出,Kotlin
中的if可以作为一个表达式并返回一个值。
3、作为一个块结构,并且最后一句表达式为块的值
例:
var numA: Int = 2
var numC: Int = if (numA > 2){
numA++
numA = 10
println("numA > 2 => true")
numA
}else if (numA == 2){
numA++
numA = 20
println("numA == 2 => true")
numA
}else{
numA++
numA = 30
println("numA < 2 => true")
numA
}
// 根据上面的代码可以看出,每一个if分支里面都是一个代码块,并且返回了一个值。根据条件numC的值应该为20
println("numC => $numC")
输出结果为:
numA == 2 => true
numC => 20
二、for语句
Kotlin
废除了Java
中的for
(初始值;条件;增减步长)这个规则。但是Kotlin
中对于for
循环语句新增了其他的规则,来满足刚提到的规则。for
循环提供迭代器用来遍历任何东西for
循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
1、新增的规则,去满足for
(初始值;条件;增减步长)这个规则
- 1.1、递增
关键字:
until
范围:until[n,m)
=> 即大于等于n,小于m
例:
// 循环5次,且步长为1的递增
for (i in 0 until 5){
print("i => $i \t")
}
输出结果为
i => 0 i => 1 i => 2 i => 3 i => 4
- 1.2、递减
- 关键字:
downTo
- 范围:
downTo[n,m]
=> 即小于等于n,大于等于m ,n > m
例:
// 循环5次,且步长为1的递减
for (i in 15 downTo 11){
print("i => $i \t")
}
输出结果为:
i => 15 i => 14 i => 13 i => 12 i => 11
1.3、符号(' .. '
) 表示递增的循环的另外一种操作
- 使用符号(
'..'
).- 范围:
..[n,m]
=> 即大于等于n,小于等于m
- 和
until
的区别,一是简便性。二是范围的不同。
例:
print("使用 符号`..`的打印结果\n")
for (i in 20 .. 25){
print("i => $i \t")
}
println()
print("使用until的打印结果\n")
for (i in 20 until 25){
print("i => $i \t")
}
输出结果为:
使用 符号`..`的打印结果
i => 20 i => 21 i => 22 i => 23 i => 24 i => 25
使用until的打印结果
i => 20 i => 21 i => 22 i => 23 i => 24
1.4、设置步长
关键字:
step
例:
for (i in 10 until 16 step 2){
print("i => $i \t")
}
输出结果为:
i => 10 i => 12 i => 14
2、迭代
for
循环提供一个迭代器用来遍历任何东西。for
循环数组被编译为一个基于索引的循环,它不会创建一个迭代器对象
2.1、遍历字符串
此用法在数据类型章节中的字符串类型中用到过。还不甚清楚的可以查看Kotlin——初级篇(三):数据类型详解。
例:
for (i in "abcdefg"){
print("i => $i \t")
}
输出结果为:
i => a i => b i => c i => d i => e i => f i => g
2.2、遍历数组
此用法在数据类型章节中的数组类型中用到过。还不甚清楚的可以查看Kotlin——初级篇(三):数据类型详解。
例:
var arrayListOne = arrayOf(10,20,30,40,50)
for (i in arrayListOne){
print("i => $i \t")
}
输出结果为:
i => 10 i => 20 i => 30 i => 40 i => 50
2.3、使用数组的indices
属性遍历
例:
var arrayListTwo = arrayOf(1,3,5,7,9)
for (i in arrayListTwo.indices){
println("arrayListTwo[$i] => " + arrayListTwo[i])
}
输出结果为:
arrayListTwo[0] => 1
arrayListTwo[1] => 3
arrayListTwo[2] => 5
arrayListTwo[3] => 7
arrayListTwo[4] => 9
2.4、使用数组的withIndex()
方法遍历
例:
var arrayListTwo = arrayOf(1,3,5,7,9)
for ((index,value) in arrayListTwo.withIndex()){
println("index => $index \t value => $value")
}
输出结果为:
index => 0 value => 1
index => 1 value => 3
index => 2 value => 5
index => 3 value => 7
index => 4 value => 9
2.5、使用列表或数组的扩展函数遍历
- 数组或列表有一个成员或扩展函数
iterator()
实现了Iterator<T>
接口,且该接口提供了next()
与hasNext()
两个成员或扩展函数- 其一般和
while
循环一起使用
可以查看
Array.kt
这个类。可以看见其中的iterator()
函数,而这个函数实现了Iterator
接口。/**
* Creates an iterator for iterating over the elements of the array.
*/
public operator fun iterator(): Iterator<T>
查看
Iterator.kt
这个接口类,这个接口提供了hasNext()
函数和next()
函数。public interface Iterator<out T> { /**
* Returns the next element in the iteration.
*/
public operator fun next(): T /**
* Returns `true` if the iteration has more elements.
*/
public operator fun hasNext(): Boolean
}
例:
var arrayListThree = arrayOf(2,'a',3,false,9)
var iterator: Iterator<Any> = arrayListThree.iterator()
while (iterator.hasNext()){
println(iterator.next())
}
输出结果为:
2
a
3
false
9
终上所述就是for
循环语句常用的用法。
三、when语句
- 在
Kotlin
中已经废除掉了Java
中的switch
语句。而新增了when(exp){}
语句。when
语句不仅可以替代掉switch
语句,而且比switch
语句更加强大
3.1、when语句实现switch语句功能
例:
when(5){
1 -> {
println("1")
}
2 -> println("2")
3 -> println("3")
5 -> {
println("5")
}
else -> {
println("0")
}
}
输出结果为:
5
3.2、和逗号结合使用,相当于switch语句中的不使用break跳转语句
例:
when(1){
// 即x = 1,2,3时都输出1。
1 , 2 , 3 -> {
println("1")
}
5 -> {
println("5")
}
else -> {
println("0")
}
}
输出结果为:
1
3.3、条件可以使用任意表达式,不仅局限于常量
相当于
if
表达式的用法。
例:
var num:Int = 5
when(num > 5){
true -> {
println("num > 5")
}
false ->{
println("num < 5")
}
else -> {
println("num = 5")
}
}
输出结果为:
num < 5
3.4、 检查值是否存在于集合或数组中
- 操作符:
(in)
在(!in)
不在- 限定:只适用于数值类型
例:
var arrayList = arrayOf(1,2,3,4,5)
when(1){
in arrayList.toIntArray() -> {
println("1 存在于 arrayList数组中")
}
in 0 .. 10 -> println("1 属于于 0~10 中")
!in 5 .. 10 -> println("1 不属于 5~10 中")
else -> {
println("都错了 哈哈!")
}
}
输出结果为:
元素`1`存在于 arrayList数组中
其中,符号( .. )
表示至
的意思。如例子中的0 .. 10
就表示0至10
或者0到10
。
3.5、检查值是否为指定类型的值
- 操作符
- 是
(is)
- 不是
(!is)
- 值得注意的是,
Kotlin
的智能转换可以访问类型的方法和属性
例:
when("abc"){
is String -> println("abc是一个字符串")
else -> {
println("abc不是一个字符串")
}
}
// 智能转换
var a: Int = 2
when(a){
!is Int -> {
println("$a 不是一个Int类型的值")
}
else -> {
a = a.shl(2)
println("a => $a")
}
}
输出结果为:
abc是一个字符串
a => 8
3.6、不使用表达式的when语句
表示为最简单的布尔表达式
例:
var array = arrayOfNulls<String>(3)
when{
true -> {
for (i in array){
print(" $i \t")
}
println()
}
else -> {
}
}
输出结果为:
null null null
综上所述,为Kotlin
中when
控制语句的常见用法。可以看出它的强大。以及便利性。不仅可以替代掉Java
语句中的swicth
语句。甚至可以替换掉if
语句。
四、while语句
- 其同
Java
中的while
循环一样。在此不做累述。- 定义格式:
while(exp){ 其中exp为表达式
...
}
例:
var num = 5
var count = 1
while (num < 10){
println("num => $num")
println("循环了$count 次")
count++
num++
}
输出结果为:
num => 5
循环了1 次
num => 6
循环了2 次
num => 7
循环了3 次
num => 8
循环了4 次
num => 9
循环了5 次
五、do...while语句
- 其同
Java
中的do...while
循环一样。在此不做累述。- 定义格式:
do(exp){ // 其中exp为表达式
...
}(while)
例:
var num = 5
var count = 1
do {
println("num => $num")
println("循环了$count 次")
count++
num++
}while (num < 10)
输出结果为:
num => 5
循环了1 次
num => 6
循环了2 次
num => 7
循环了3 次
num => 8
循环了4 次
num => 9
循环了5 次
PS:
do{...}while(exp)与while(exp){...}
最大的区别是do{...}while(exp)
最少执行一次,这点也是和Java
相同的
例:
var num = 5
var count = 1
do {
println("num => $num")
println("循环了$count 次")
count++
num++
}while (num < 5)
输出结果为:
num => 5
循环了1 次
六、跳转语句(return、break、continue)
其同
Java
中的跳转语句一样。在此不做累述。
1、return语句
默认情况下,从最近的封闭函数或匿名函数返回。
例:
fun returnExample(){
var str: String = ""
if (str.isBlank()){
println("我退出了该方法")
return
}
}
输出结果为:
我退出了该方法
2、break语句
作用:终止最近的闭合循环。
例:
var count: Int = 1
for (i in 1 until 10){
if (i == 5){
println("我在第$i 次退出了循环")
break
}
count++
}
println("我循环了多少次:count => $count")
输出结果为:
我在第5 次退出了循环
我循环了多少次:count => 5
3、continue语句
前进到最近的封闭循环的下一个步骤(迭代)。
例:
for (i in 1 until 10){
if (i == 5){
println("我跳过了第$i 次循环")
continue
}
println("i => $i")
}
输出结果为:
i => 1
i => 2
i => 3
i => 4
我跳过了第5 次循环
i => 6
i => 7
i => 8
i => 9
七、总结
不管对于任何一门编程语言,都有最基本的条件逻辑控制语句,而其语句是学习一门编程语言的基础。所以请各位大佬认真并且跟着代码敲一遍。特别是for
语句和when
语句这两个点。因为这两个点都和Java
语言很大的改动。当然,if
语句中的三元运算符也是值得注意的
源代码
如果各位大佬看了之后感觉还阔以,就请各位大佬随便star一下,您的关注是我最大的动力。
我的个人博客:Jetictors
我的掘金:Jetictors
Github:Jteictors
欢迎各位大佬进群共同研究、探索
QQ群号:497071402
Kotlin——最详细的控制语句使用的更多相关文章
- Kotlin——最详细的常量、变量、注释的使用
在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...
- Kotlin——最详细的接口使用、介绍
在Kotlin中,接口(Interface)的使用和Java中的使用方式是有很大的区别.不管是接口中的属性定义,方法等.但是定义方式还是相同的. 目录 一.接口的声明 1.接口的声明 关键字:inte ...
- Kotlin——最详细的操作符与操作符重载详解(上)
本篇文章为大家详细的介绍Koltin特有的操作符重载.或许对于有编程经验的朋友来说,操作符这个词绝对不陌生,就算没有任何编辑基础的朋友,数学中的算数运算符也绝不陌生.例如(+.-.*./.>.& ...
- Kotlin——最详细的数据类型介绍
任意一种开发语言都有其数据类型,并且数据类型对于一门开发语言来说是最基本的构成,同时也是最基础的语法.当然,kotlin也不例外.kotlin的数据类型和Java是大致相同的,但是他们的写法不同,并且 ...
- Kotlin——最详细的数据类、密封类详解
在前面几个章节章节中,详细的讲解了Koltin中的接口类(Interface).枚举类(Enmu),还不甚了解的可以查看我的上一篇文章Kotlin--接口类.枚举类详解.当然,在Koltin中,除了接 ...
- Kotlin——最详细的抽象类(abstract)、内部类(嵌套类)详解
如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索QQ群号:497071402 进入正题 在前面几个章节中,详 ...
- Kotlin——最详细的环境搭建
众所周知,Kotlin出来已经有一段时间了.Kotlin有着众多优势,不管是用于Android开发中,还是Java开发,都能缩减很大的代码量,大大提高了工作效率.而小生本人也是才从忙碌的个工作中抽身出 ...
- Kotlin 初窥门径[2]:流程控制
流程控制语句是编程语言中的核心之一.可以分为分支语句.循环语句和跳转语句.本文将详细介绍一下 Kotlin 中的流程控制语句. If 表达式 在Kotlin中一切都是表达式,也就是说一切都返回一个值. ...
- Kotlin——初级篇(二):变量、常量、注释
在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...
随机推荐
- 201521123099 《Java程序设计》第4周学习总结
1. 本周学习总结 2. 书面作业 注释的应用 使用类的注释与方法的注释为前面编写的类与方法进行注释,并在Eclipse中查看.(截图) 面向对象设计(大作业1,非常重要) 2.1 将在网上商城购物或 ...
- Java中的基本数据类型和基本数据类型之间的转换
在Java中有8中基本数据类型,分别为: 整型: byte.short.int.long 浮点型:float.double 布尔型:boolean 字符型:char. byte: 8位, 封装 ...
- 201521123068 《java程序设计》 第10周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- 201521123016《JAVA程序设计》第1周学习总结
本周学习总结 认识了Java包括JDK:Java开发工具包:JRE:Java执行环境:JVM:Java虚拟机 学习了一些JAVA基本语法,如:public class:public static vo ...
- JSP第四篇【EL表达式介绍、获取各类数据、11个内置对象、执行运算、回显数据、自定义函数、fn方法库】
什么是EL表达式? 表达式语言(Expression Language,EL),EL表达式是用"${}"括起来的脚本,用来更方便的读取对象! EL表达式主要用来读取数据,进行内容的 ...
- JDBC操作数据库之连接数据库
通过JDBC向数据库中添加数据的时候,使用insert语句实现数据的插入,再SQL语句中的参数可以用占位符"?"来替代,然后通过PreparedStatement对象或者State ...
- SDP开发
1.1 前言 在企业间的商业竞争越来越激烈的今天,如何快速实现客户需求,如果快速方开发.修改.更新系统功能,如何降低软件研发的成本等等,在此目标基础上研发了软件快速开发(SDP)工具.通过平台设计器快 ...
- Android 8.0 功能和 API
Android 8.0 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 用户体验 通知 在 Android 8.0 中,我们已重新设计通知,以便为管理通知行为和设置提供更轻松和更统一的 ...
- iOS根据域名获取ip地址
引入头文件 #include <netdb.h> #include <sys/socket.h> #include <arpa/inet.h> //根据域名获取ip ...
- 对Item中定时器的理解
一.Diamond介绍 Diamond主要提供持久配置的发布和订阅服务,最大特点是结构简单,稳定可靠. 主要的使用场景:TDDL使用Diamond动态切换数据库,动态扩容等:业务使用Diamond推送 ...