簡介
本篇博客主要是介紹Kotlin語法中的【語句】相關(guān)的知識走贪,幫助各位更快的掌握Kotlin,如果有疏漏或者錯誤惑芭,請在留言中指正,謝謝遂跟。 系列匯總地址
準(zhǔn)備
在學(xué)習(xí)之前我們先有點基礎(chǔ)知識上的認(rèn)識逃沿,如下:
-
Kotlin
中函數(shù)使用fun
關(guān)鍵詞聲明。
條件語句
if表達(dá)式
在Kotlin
中if
是表達(dá)式幻锁,也就是說不需要三目運算符了凯亮,因為if
本身就支持。下面舉例說明:
val max = if (a > b) a else b //a=1哄尔,b=2, max=b=2 假消,返回b的值給max
總結(jié):Kotlin
中if
更加智能,不需要判斷分行岭接,如果滿足條件則執(zhí)行if和else之間的語句富拗,反之執(zhí)行else后的語句,不過不使用"{}"時鸣戴,if或else后只能寫一個語句,我們還觀察到if表達(dá)式返回的是變量值(不同于函數(shù)需要return關(guān)鍵詞)啃沪,其實也支持有返回值的函數(shù)。
如果在執(zhí)行的時候窄锅,想執(zhí)行更多的語句创千,還需要去寫"{}"。細(xì)心的朋友或許會發(fā)現(xiàn)一個問題,當(dāng)前使用了"{}",如果出現(xiàn)了多個變量值或者有返回值的函數(shù)签餐,其結(jié)果究竟是什么呢寓涨?會如同return一樣嗎,阻斷后續(xù)代碼的執(zhí)行氯檐?下面我們通過例子講解:
//比較兩個值大小
fun ifDemo2(a: Int, b: Int) { //--函數(shù)的概念后續(xù)再講,目前按照java的函數(shù)理解即可
var max = if (a > b) {
a
stringDemo(3)
} else {
numberDemo(4)
b
}
println(max)
}
//返回輸入的值 --Int
fun numberDemo(c: Int): Int {
return c
}
//返回對應(yīng)值的對應(yīng)內(nèi)容--String
fun stringDemo(c: Int): String {
return c.toString() + "sd"http:// 注意此處不能直接 c+"sd",java中允許体捏,Kotlin中不允許
}
測試:
-
ifDemo2(1冠摄,2)
,結(jié)果2
-
ifDemo2(2,1)
,結(jié)果3sd
總結(jié):
對于if表達(dá)式几缭,其返回的內(nèi)容類型可以不相同河泳,對于可返回值的函數(shù)也同樣支持,且其返回的內(nèi)容僅和其順序有關(guān)年栓,并不會阻斷后續(xù)代碼的執(zhí)行拆挥。
when表達(dá)式
在Kotlin
中when
取代了java
中得switch
方法,且功能更加強(qiáng)大支持各種類型某抓。下面舉例說明:
fun whenDemo(a: Any) {//Any 類似java中的Object
when (a) {
1 -> println("選擇的1")//使用"->"來表示分支 --Int
"2" -> { //多行語句需要使用"{}" --String
println("選擇『2』")
}
true -> { //--Boolean
println("選擇true")
}
in 0..9 -> {// in 表示是否在range中 --后續(xù)會講
println("在0-9之內(nèi)")
}
is String -> { //is表示是否是某種類型纸兔,類似java中instanceOf() --后續(xù)會講
println("是字符串")
}
numberDemo(3) -> { //支持有返回值的函數(shù)
println("選擇3")
}
10, 11 -> { //當(dāng)兩個條件都執(zhí)行相同代碼時這樣寫
println("等于10或者11")
}
else->{
printLn("類似default") //類似switch中的default
}
}
}
總結(jié):when
相比于switch
可以支持不同類型的分支語句,其中else
類似default
需要放在最后且只能有一個否副。
循環(huán)語句
for循環(huán)
Kotlin
中for
循環(huán)可以對任何提供迭代器(iterator
)的對象進(jìn)行遍歷汉矿,語法如下:
for (item in collection)
print(item)
循環(huán)體可以是一個代碼塊。
for (item: Int in ints) {
// ...
}
這個時候你可能就會問了备禀,什么樣的對象提供了迭代器洲拇,滿足下面的條件之一即可:
- 有一個成員函數(shù)或者擴(kuò)展函數(shù)
iterator()
,它的返回類型 - 有一個成員函數(shù)或者擴(kuò)展函數(shù)
next()
曲尸,并且 - 有一個成員函數(shù)或者擴(kuò)展函數(shù)
hasNext()
返回Boolean
赋续。
當(dāng)然有人或許會問,我想使用之前的for(int i=0;i<list.size;i++)
的形式遍歷呢另患,需要得到索引纽乱,當(dāng)然Kotlin
也是支持的,代碼如下:
for (i in array.indices) //注意此處不需要聲明i,默認(rèn)是Int
print(array[i]) //可以通過索引獲取內(nèi)容
甚至可以讓你體會到遍歷map
時的感覺
for ((index, value) in array.withIndex()) { //索引(Int)和值(Any)
println("the element at $index is $value")
}
此處補(bǔ)充一個關(guān)于數(shù)組的知識柴淘,對于數(shù)組的創(chuàng)建我們都很熟悉了迫淹,但是下面的你見過嗎?
var array = arrayOf("1", "2", 3, 4) //可以是不同類型的哦为严,這個和python一致
這個也可以進(jìn)行遍歷敛熬,不過value
需要使用Any
,此處需要注意哦第股。此處的數(shù)據(jù)保存也是按照Any
保存应民。
while循環(huán)
while
和 do..while
照常使用
while (x > 0) {
x--
}
do {
val y = retrieveData()
} while (y != null) // y 在此處可見
總結(jié)
至此已經(jīng)學(xué)完了Kotlin
的【語句】相關(guān)的知識,多回顧多思考,繼續(xù)后續(xù)內(nèi)容诲锹。