Kotlin學習筆記(1):標簽

標簽的聲明方式:標簽名++"@"莱预,如:abc@
標簽的引用方式:"@"++標簽名,如:@abc

Kotlin中標簽的含義和Java中的基本一致项滑,都是為了方便跳轉到指定位置依沮,常和 breakcontinue 搭配使用。但是Kotlin中的標簽還可以和 return 搭配使用,表示在標簽處返回危喉。

Break和Continue

舉例如下:

fun main(args: Array<String>) {
    for (i in 1..4) {
        for (j in 1..4) {
            if (i == 2 && j == 2) {
                break
            }
            println("i = $i, j = $j")
        }
    }
}

以上代碼表示中的 break 僅僅是跳出了內層循環(huán)宋渔,也就是當 i=2,j=2 時終止內層循環(huán),然后 i 加 1 繼續(xù)循環(huán)辜限。打印結果如下:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 2, j = 1
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
i = 3, j = 4
i = 4, j = 1
i = 4, j = 2
i = 4, j = 3
i = 4, j = 4

如果想讓 i=2,j=2 時直接跳出外層循環(huán)皇拣,就可以使用標簽,代碼如下:

fun main(args: Array<String>) {
    loop@ for (i in 1..4) {
        for (j in 1..4) {
            if (i == 2 && j == 2) {
                break@loop
            }
            println("i = $i, j = $j")
        }
    }
}

在外層循環(huán)處聲明一個標簽loop@薄嫡,當需要 break 的時候氧急,直接使用break@loop就可以跳出外層循環(huán)。運行結果如下:

i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 2, j = 1

上面的代碼等價于如下Java代碼:

    public static void main(String[] args) {
        loop: for (int i = 1; i <= 4; i++) {
            for (int j = 1; j <= 4; j++) {
                if (i == 2 && j == 2) {
                    break loop;
                }
                System.out.println("i = " + i + ", j = " + j);
            }
        }
    }

continue 標簽的使用方式和 break 一樣毫深,不再贅述吩坝。

標簽處返回

舉例如下:

fun main(args: Array<String>) {
    val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
    ints.forEach {
        if (it == 0) return
        print(it)
    }
}

上面代碼中的 return 指的是從 main 函數(shù)中返回,因為 main 函數(shù)是最直接包圍它的函數(shù)哑蔫。所以運行結果為:

123

如果想要從 forEach 中的 lambda 表達式中返回钉寝,就需要使用標簽了。代碼如下鸳址,在 lambda 表達式的前面聲明一個標簽lit@瘩蚪,然后在 return 處使用標簽,即return@lit稿黍。

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach lit@ {
    if (it == 0) return@lit
    print(it)
}

運行結果為:

123456

除了這種方式之外疹瘦,還可以使用隱式標簽。 該標簽與接受 lambda 表達式的函數(shù)同名巡球,在上個例子中就是 forEach 言沐。即:

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach {
    if (it == 0) return@forEach
    print(it)
}

如果不使用標簽,還可以使用匿名函數(shù)替代 lambda 表達式實現(xiàn)上述功能酣栈,代碼如下险胰。 匿名函數(shù)內部的 return 語句將從該匿名函數(shù)自身返回,但使用這種方式不如使用 lambda 表達式代碼清晰簡潔矿筝。

val ints = intArrayOf(1, 2, 3, 0, 4, 5, 6)
ints.forEach(fun(value: Int) {
    if (value == 0) return
    print(value)
})

參考資料:http://kotlinlang.org/docs/reference/returns.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末起便,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子窖维,更是在濱河造成了極大的恐慌榆综,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铸史,死亡現(xiàn)場離奇詭異鼻疮,居然都是意外死亡,警方通過查閱死者的電腦和手機琳轿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門判沟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來耿芹,“玉大人,你說我怎么就攤上這事挪哄“娠酰” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵中燥,是天一觀的道長寇甸。 經(jīng)常有香客問我,道長疗涉,這世上最難降的妖魔是什么拿霉? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮咱扣,結果婚禮上绽淘,老公的妹妹穿的比我還像新娘。我一直安慰自己闹伪,他們只是感情好沪铭,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著偏瓤,像睡著了一般杀怠。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上厅克,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天赔退,我揣著相機與錄音,去河邊找鬼证舟。 笑死硕旗,一個胖子當著我的面吹牛,可吹牛的內容都是我干的女责。 我是一名探鬼主播漆枚,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼抵知!你這毒婦竟也來了墙基?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤刷喜,失蹤者是張志新(化名)和其女友劉穎残制,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體吱肌,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡痘拆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年仰禽,在試婚紗的時候發(fā)現(xiàn)自己被綠了氮墨。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片纺蛆。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖规揪,靈堂內的尸體忽然破棺而出桥氏,到底是詐尸還是另有隱情,我是刑警寧澤猛铅,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布字支,位于F島的核電站,受9級特大地震影響奸忽,放射性物質發(fā)生泄漏堕伪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一栗菜、第九天 我趴在偏房一處隱蔽的房頂上張望欠雌。 院中可真熱鬧,春花似錦疙筹、人聲如沸富俄。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽霍比。三九已至,卻和暖如春暴备,著一層夾襖步出監(jiān)牢的瞬間悠瞬,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工馍驯, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留阁危,地道東北人。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓汰瘫,卻偏偏與公主長得像狂打,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子混弥,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容

  • 前言 人生苦多趴乡,快來 Kotlin ,快速學習Kotlin蝗拿! 什么是Kotlin晾捏? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,201評論 9 118
  • 第2章 Kotlin 語法基礎 人與人之間通過語言來交流溝通,互相協(xié)作哀托。人與計算機之間怎樣“交流溝通”呢惦辛?答案是編...
    光劍書架上的書閱讀 1,615評論 0 6
  • 朋友圈在我定義來說胖齐,我們是朋友玻淑,需要通過文字方式溝通交流,所以把日常生活在這個圈子里展現(xiàn)給大家的作用呀伙。而現(xiàn)在的朋友...
    饒瞳閱讀 325評論 2 0
  • “若是人生有先知补履,那得今夕空余恨”?我們過了喜歡聽故事的年紀剿另,卻忘了自己本身就是一個故事箫锤。 ——題記 “賭...
    凌風寒墨閱讀 284評論 4 4
  • 《柵欄之外》 當天風撥動云影的時侯 琴聲在穹宇深處回響 牽牛花的藤蔓 從不顧忌竹枝 那陳年的舊傷 在變幻的云雨中 ...
    又見月伴鄰閱讀 325評論 0 3