在前面 的章节中讲解了Kotlin
语言中的数据类型、变量与常量的定义。不了解请参见前面的内容:html
下面详细为你们讲解Kotlin
中的控制语句使用。不得不说其和Java
中仍是有不少不同的地方。git
在
Kotlin
中的if
语句和Java
仍是仍是有必定的区别的,它能在Java
中更灵活,除了能实现Java
写法外,还能够实现表达式(实现三元运算符),及做为一个块的运用。github
一、传统写法(同Java
写法同样)编程
例:数组
var numA = 2 if (numA == 2){ println("numA == $numA => true") }else{ println("numA == $numA => false") }
输出结果为:编程语言
numA == 2 => true
二、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")
输出结果为:3d
numB = > 3
由上能够看出,Kotlin
中的if能够做为一个表达式并返回一个值。code
三、做为一个块结构,而且最后一句表达式为块的值
例:
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
Kotlin
废除了Java
中的for
(初始值;条件;增减步长)这个规则。可是Kotlin
中对于for
循环语句新增了其余的规则,来知足刚提到的规则。for
循环提供迭代器用来遍历任何东西for
循环数组被编译为一个基于索引的循环,它不会建立一个迭代器对象
一、新增的规则,去知足for
(初始值;条件;增减步长)这个规则
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.二、递减
- 关键字:
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.三、符号(' .. '
) 表示递增的循环的另一种操做
- 使用符号(
'..'
).- 范围:
..[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.四、设置步长
关键字:
step
例:
for (i in 10 until 16 step 2){ print("i => $i \t") }
输出结果为:
i => 10 i => 12 i => 14
二、迭代
for
循环提供一个迭代器用来遍历任何东西。for
循环数组被编译为一个基于索引的循环,它不会建立一个迭代器对象
2.一、遍历字符串
此用法在数据类型章节中的字符串类型中用到过。还不甚清楚的能够查看Kotlin——初级篇(三):数据类型详解。
例:
for (i in "abcdefg"){ print("i => $i \t") }
输出结果为:
i => a i => b i => c i => d i => e i => f i => g
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.三、使用数组的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.四、使用数组的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.五、使用列表或数组的扩展函数遍历
- 数组或列表有一个成员或扩展函数
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
循环语句经常使用的用法。
- 在
Kotlin
中已经废除掉了Java
中的switch
语句。而新增了when(exp){}
语句。when
语句不只能够替代掉switch
语句,并且比switch
语句更增强大
3.一、when语句实现switch语句功能
例:
when(5){ 1 -> { println("1") } 2 -> println("2") 3 -> println("3") 5 -> { println("5") } else -> { println("0") } }
输出结果为:
5
3.二、和逗号结合使用,至关于switch语句中的不使用break跳转语句
例:
when(1){ // 即x = 1,2,3时都输出1。 1 , 2 , 3 -> { println("1") } 5 -> { println("5") } else -> { println("0") } }
输出结果为:
1
3.三、条件可使用任意表达式,不只局限于常量
至关于
if
表达式的用法。
例:
var num:Int = 5 when(num > 5){ true -> { println("num > 5") } false ->{ println("num < 5") } else -> { println("num = 5") } }
输出结果为:
num < 5
3.四、 检查值是否存在于集合或数组中
- 操做符:
(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.五、检查值是否为指定类型的值
- 操做符
- 是
(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.六、不使用表达式的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
语句。
- 其同
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 次
- 其同
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 次
其同
Java
中的跳转语句同样。在此不作累述。
一、return语句
默认状况下,从最近的封闭函数或匿名函数返回。
例:
fun returnExample(){ var str: String = "" if (str.isBlank()){ println("我退出了该方法") return } }
输出结果为:
我退出了该方法
二、break语句
做用:终止最近的闭合循环。
例:
var count: Int = 1 for (i in 1 until 10){ if (i == 5){ println("我在第$i 次退出了循环") break } count++ } println("我循环了多少次:count => $count")
输出结果为:
我在第5 次退出了循环 我循环了多少次:count => 5
三、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