在前面 的章节中讲解了Kotlin语言中的数据类型、变量与常量的定义。不了解请参见前面的内容:

  1. Kotlin——初级篇(三):数据类型详解。
  2. 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循环一起使用
  1. 可以查看Array.kt这个类。可以看见其中的iterator()函数,而这个函数实现了Iterator接口。

     /**
    * Creates an iterator for iterating over the elements of the array.
    */
    public operator fun iterator(): Iterator<T>
  2. 查看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、 检查值是否存在于集合或数组中

  • 操作符:

    1. (in) 在
    2. (!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、检查值是否为指定类型的值

  • 操作符

    1. 是(is)
    2. 不是(!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——最详细的控制语句使用的更多相关文章

  1. Kotlin——最详细的常量、变量、注释的使用

    在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...

  2. Kotlin——最详细的接口使用、介绍

    在Kotlin中,接口(Interface)的使用和Java中的使用方式是有很大的区别.不管是接口中的属性定义,方法等.但是定义方式还是相同的. 目录 一.接口的声明 1.接口的声明 关键字:inte ...

  3. Kotlin——最详细的操作符与操作符重载详解(上)

    本篇文章为大家详细的介绍Koltin特有的操作符重载.或许对于有编程经验的朋友来说,操作符这个词绝对不陌生,就算没有任何编辑基础的朋友,数学中的算数运算符也绝不陌生.例如(+.-.*./.>.& ...

  4. Kotlin——最详细的数据类型介绍

    任意一种开发语言都有其数据类型,并且数据类型对于一门开发语言来说是最基本的构成,同时也是最基础的语法.当然,kotlin也不例外.kotlin的数据类型和Java是大致相同的,但是他们的写法不同,并且 ...

  5. Kotlin——最详细的数据类、密封类详解

    在前面几个章节章节中,详细的讲解了Koltin中的接口类(Interface).枚举类(Enmu),还不甚了解的可以查看我的上一篇文章Kotlin--接口类.枚举类详解.当然,在Koltin中,除了接 ...

  6. Kotlin——最详细的抽象类(abstract)、内部类(嵌套类)详解

    如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索QQ群号:497071402 进入正题 在前面几个章节中,详 ...

  7. Kotlin——最详细的环境搭建

    众所周知,Kotlin出来已经有一段时间了.Kotlin有着众多优势,不管是用于Android开发中,还是Java开发,都能缩减很大的代码量,大大提高了工作效率.而小生本人也是才从忙碌的个工作中抽身出 ...

  8. Kotlin 初窥门径[2]:流程控制

    流程控制语句是编程语言中的核心之一.可以分为分支语句.循环语句和跳转语句.本文将详细介绍一下 Kotlin 中的流程控制语句. If 表达式 在Kotlin中一切都是表达式,也就是说一切都返回一个值. ...

  9. Kotlin——初级篇(二):变量、常量、注释

    在Kotlin中的变量.常量以及注释多多少少和Java语言是有着不同之处的.不管是变量.常量的定义方式,还是注释的使用.下面详细的介绍Kotlin中的变量.常量.注释的使用.以及和Java的对比. 如 ...

随机推荐

  1. Java多态总结

    面向对象的三大特性:封装.继承.多态.从一定角度来看,封装和继承几乎都是为多态而准备的.这是我们最后一个概念,也是最重要的知识点. 1.定义: 多态:指允许不同类的对象对同一消息做出响应.即同一消息可 ...

  2. 201521123072《java程序设计》第九周总结

    201521123072<java程序设计>第九周总结 1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 常用异常 题目5-1 1.1 截 ...

  3. Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Table 'zhongfucheng.user' does

    编写第一个Hibernate程序的时候,就发现出现了错误 Exception in thread "main" org.hibernate.exception.SQLGrammar ...

  4. MapReduce极简教程

    一个有趣的例子 你想数出一摞牌中有多少张黑桃.直观方式是一张一张检查并且数出有多少张是黑桃?   MapReduce方法则是: 给在座的所有玩家中分配这摞牌 让每个玩家数自己手中的牌有几张是黑桃,然后 ...

  5. Spring框架(二)

    Spring反射机制: 1, 通过spring来获取一个对象的实例 <bean id="user" class="com.model.User"> ...

  6. MMORPG战斗系统随笔(一)

    前言 很久没有更新博客,中间迁移过一次博客,后来一直忙于项目的开发,忙的晚上回去没时间写博客,周日又要自我调整一下,所以空闲了很久没有继续写博客.最近终于慢慢放慢节奏,项目也快上线了,可以有空写一些个 ...

  7. spring jar包

    org.springframework.aop- 3.0.0.RELEASE--------------------Spring的面向切面编程,提供AOP(面向切面编程)实现 org.springfr ...

  8. Android Studio 字体和字号调整

    点击File,Settings. 找到Editor-Colors&Fonts-Font 点击Save As... 改个名字点击OK. 1为字体,2为字号,3为行间距. 我认为字体设置为Cons ...

  9. 【POJ】2348 Euclid's Game(扩欧)

    Description Two players, Stan and Ollie, play, starting with two natural numbers. Stan, the first pl ...

  10. Ionic3学习笔记(三)禁止横屏

    本文为原创文章,转载请标明出处 目录 安装 使用 参数 1. 安装 命令行输入 ionic cordova plugin add cordova-plugin-screen-orientation n ...