Android:Kotlin詳細(xì)入門學(xué)習(xí)指南-包-控制流-返回與跳轉(zhuǎn)-基礎(chǔ)語(yǔ)法(三)

本人也是在初學(xué)Kotlin,如有錯(cuò)誤薇正,請(qǐng)幫忙指出,持續(xù)更新

Android:Kotlin詳細(xì)入門學(xué)習(xí)指南-包-控制流-返回與跳轉(zhuǎn)-基礎(chǔ)語(yǔ)法(三)

建議先看看前面的文章
Android:Kotlin詳細(xì)入門學(xué)習(xí)指南-基礎(chǔ)語(yǔ)法(一)
Android:Kotlin詳細(xì)入門學(xué)習(xí)指南-基本類型-基礎(chǔ)語(yǔ)法(二)

這篇文章主要分享Kotlin中的-包-控制流-返回與跳轉(zhuǎn)

一個(gè)源文件以包聲明開始:

package foo.bar 
fun bza() {} 
class Goo {}
//...

源文件的所有內(nèi)容(比如類和函數(shù))都被包聲明包括儿奶。因此在上面的例子中沾凄, bza() 的全名應(yīng)該是 foo.bar.bza 梗醇, Goo 的全名是 foo.bar.Goo 。
如果沒有指定包名撒蟀,那這個(gè)文件的內(nèi)容就從屬于沒有名字的 “default” 包叙谨。

Imports

除了模塊中默認(rèn)導(dǎo)入的包,每個(gè)文件都可以有它自己的導(dǎo)入指令保屯。

import foo.Bar // Bar 現(xiàn)在可以不用條件就可以使用
import foo.*/ /foo 中的所有都可以使用
import bar.Bar as bBar // bBar 代表 'bar.Bar

import關(guān)鍵字不局限于導(dǎo)入類;您也可以使用它來導(dǎo)入其他聲明:

  • – 頂級(jí)函數(shù)與屬性
  • – 在對(duì)象聲明中聲明的函數(shù)和屬性
  • – 枚舉常量

可見性和包嵌套

  • 如果最頂?shù)穆暶鳂?biāo)注為 private , 那么它是自己對(duì)應(yīng)包私有手负。
  • 如果包內(nèi)有私有的屬性或方法,那它對(duì)所有的子包是可見的姑尺。
  • 注意包外的的成員是默認(rèn)不導(dǎo)入的竟终,比如在導(dǎo)入 foo.bar 后我們不能獲得 foo 的成員

流程控制

if 表達(dá)式

在 Kotlin 中,if 是表達(dá)式切蟋,它可以返回一個(gè)值统捶。因此Kotlin沒有三元運(yùn)算符 (condition ? then : else),因?yàn)閕f語(yǔ)句已經(jīng)滿足了效果。

// 傳統(tǒng)用法 
var max = a 
if (a < b)
max = b 
// 帶 else 
var max: Int 
if (a > b) 
max = a 
else
max = b 
// 作為表達(dá)式 
val max = if (a > b) a else b

if分支可以作為塊柄粹,最后一個(gè)表達(dá)式是該塊的值:

val max = if (a > b){
     print("Choose a") 
     a 
     }else{
     print("Choose b") 
     b 
 }

如果使用If作為表達(dá)式而不是語(yǔ)句(例如喘鸟,返回其值或?qū)⑵滟x值給一個(gè)變量),則需要 有一個(gè)else分支驻右。

When 表達(dá)式

when 取代了 java 風(fēng)格語(yǔ)言的 switch 什黑。最簡(jiǎn)單的用法像下面這樣

when (x) { 
    1 -> print("x == 1") 
    2 -> print("x == 2") 
    else -> { // 注意這個(gè)語(yǔ)句塊 
    print("x is neither 1 nor 2") 
    } 
}

when會(huì)對(duì)所有的分支進(jìn)行檢查直到有一個(gè)條件滿足。when 可以用做表達(dá)式或聲 明堪夭。如果用作表達(dá)式的話愕把,那么滿足條件的分支就是總表達(dá)式。如果用做聲明森爽,那 么分支的值會(huì)被忽略礼华。(像 if 表達(dá)式一樣,每個(gè)分支是一個(gè)語(yǔ)句塊拗秘,而且它的值就是 最后一個(gè)表達(dá)式的值)
在其它分支都不匹配的時(shí)候默認(rèn)匹配 else 分支圣絮。如果把 when 做為表達(dá)式的話 else 分支是強(qiáng)制的,除非編譯器可以證明分支條件已經(jīng)覆蓋所有可能性雕旨。
如果有分支可以用同樣的方式處理的話扮匠,分支條件可以連在一起:

when (x) { 
    0,1 -> print("x == 0 or x == 1") 
    else -> print("otherwise") 
}

甚至可以用 in 或者 !in 檢查值是否值在一個(gè)范圍或一個(gè)集合中

when (x) { 
    in 1..10 -> print("x is in the range") 
    in validNumbers -> print("x is valid") 
    !in 10..20 -> print("x is outside the range") 
    else -> print("none of the above") 
}

for 循環(huán)

for 循環(huán)通過任何提供的迭代器進(jìn)行迭代。語(yǔ)法是下面這樣的:

for (item in collection) 
    print(item)

for 可以對(duì)任何提供的迭代器進(jìn)行迭代凡涩,迭代器的定義是

  • – 有一個(gè) iterator() 成員函數(shù)或擴(kuò)展函數(shù)棒搜,其返回類型
  • – 有一個(gè) next() 成員函數(shù)或擴(kuò)展函數(shù)
  • – 有一個(gè)返回 Boolean 的 hasNext() 成員函數(shù)或擴(kuò)展函數(shù)

對(duì)數(shù)組的for循環(huán)不會(huì)創(chuàng)建迭代器對(duì)象,而是被編譯成一個(gè)基于索引的循環(huán).
如果你想通過 list 或者 array 的索引進(jìn)行迭代活箕,

for (i in array.indices) 
    print(array[i])

while 循環(huán)

while 和 do…while 像java那樣

while (x > 0) { 
    x-- 
}
do {
val y = retrieveData() 
} while (y != null) // y 在這是可見的

在循環(huán)中使用 break 和 continue
kotlin 支持傳統(tǒng)的 break 和 continue 操作符

返回與跳轉(zhuǎn)

Kotlin 有三種結(jié)構(gòu)跳轉(zhuǎn)表達(dá)式:

  • – return
  • – break 結(jié)束最近的閉合循環(huán)
  • – continue 跳到最近的閉合循環(huán)的下一次循環(huán)

break 和 continue 標(biāo)簽
在 Kotlin 中表達(dá)式可以添加標(biāo)簽力麸。標(biāo)簽通過 @ 結(jié)尾來表示,比 如: abc@ , fooBar@ 都是有效的在這里插入代碼片克蚂。使用標(biāo)簽語(yǔ)法只需像這樣:

loop@ for (i in 1..100){ 
    // ... 
}

現(xiàn)在我們可以用標(biāo)簽實(shí)現(xiàn) break 或者 continue 的快速跳轉(zhuǎn):

loop@ for (i in 1..100) { 
    for (j in i..100) { 
    if (...) 
    break@loop 
    } 
}

break 是跳轉(zhuǎn)標(biāo)簽后面的表達(dá)式闺鲸,continue 是跳轉(zhuǎn)到循環(huán)的下一次迭代。

返回到標(biāo)簽

在字面函數(shù)埃叭,局部函數(shù)摸恍,以及對(duì)象表達(dá)式中,函數(shù)可以在 Kotlin 中被包裹赤屋。return 允許我們返回到外層函數(shù)立镶。最重要的例子就是從字面函數(shù)中返回

fun foo() { 
    ints.forEach { 
    if (it == 0) return 
    print(it) 
    } 
}

return 表達(dá)式返回到最近的閉合函數(shù),比如 foo (注意這樣非局部返回僅僅可以 在內(nèi)聯(lián)函數(shù)中使用)类早。如果我們需要從一個(gè)字面函數(shù)返回可以使用標(biāo)簽修飾 return :

fun foo() { 
    ints.forEach lit@ { 
    if (it ==0) return@lit 
    print(it) 
    } 
}

現(xiàn)在它僅僅從字面函數(shù)中返回媚媒。經(jīng)常用一種更方便的含蓄的標(biāo)簽:比如用和傳入的 lambda 表達(dá)式名字相同的標(biāo)簽。

fun foo() { 
    ints.forEach { 
    if (it == 0) return@forEach 
    print(it) 
    } 
}

另外涩僻,我們可以用函數(shù)表達(dá)式替代匿名函數(shù)欣范。在函數(shù)表達(dá)式中使用 return 語(yǔ)句可以 從函數(shù)表達(dá)式中返回。

fun foo() { 
    ints.forEach(fun(value: Int){ 
    if (value == 0) return 
    print(value) 
    }) 
}

當(dāng)返回一個(gè)值時(shí)令哟,解析器給了一個(gè)參考

return@a 1

表示 “在標(biāo)簽 @a 返回 1 ” 而不是返回一個(gè)標(biāo)簽表達(dá)式 (@a 1)
命名函數(shù)自動(dòng)定義標(biāo)簽:

foo outer() { 
    foo inner() { 
        return@outer 
    } 
}

這篇文章主要分享Kotlin中的-包-控制流-返回與跳轉(zhuǎn)

本人也是在初學(xué)Kotlin,如有錯(cuò)誤妨蛹,請(qǐng)幫忙指出屏富,持續(xù)更新

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市蛙卤,隨后出現(xiàn)的幾起案子狠半,更是在濱河造成了極大的恐慌,老刑警劉巖颤难,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件神年,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡行嗤,警方通過查閱死者的電腦和手機(jī)已日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來栅屏,“玉大人飘千,你說我怎么就攤上這事≌祸ǎ” “怎么了护奈?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)哥纫。 經(jīng)常有香客問我霉旗,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任厌秒,我火速辦了婚禮读拆,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘简僧。我一直安慰自己建椰,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布岛马。 她就那樣靜靜地躺著棉姐,像睡著了一般。 火紅的嫁衣襯著肌膚如雪啦逆。 梳的紋絲不亂的頭發(fā)上伞矩,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音夏志,去河邊找鬼乃坤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛沟蔑,可吹牛的內(nèi)容都是我干的湿诊。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼瘦材,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼厅须!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起食棕,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤朗和,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后簿晓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眶拉,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年憔儿,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忆植。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒臼,死狀恐怖唱逢,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情屋休,我是刑警寧澤坞古,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站劫樟,受9級(jí)特大地震影響痪枫,放射性物質(zhì)發(fā)生泄漏织堂。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一奶陈、第九天 我趴在偏房一處隱蔽的房頂上張望易阳。 院中可真熱鬧,春花似錦吃粒、人聲如沸潦俺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)事示。三九已至,卻和暖如春僻肖,著一層夾襖步出監(jiān)牢的瞬間肖爵,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工臀脏, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留劝堪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓揉稚,卻偏偏與公主長(zhǎng)得像秒啦,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子搀玖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容