在前面 的章節中講解了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