kotlin入門潛修之基礎(chǔ)篇—控制表達(dá)式

本文收錄于 kotlin入門潛修專題系列惯吕,歡迎學(xué)習(xí)交流惕它。

創(chuàng)作不易,如有轉(zhuǎn)載废登,還請備注淹魄。

控制表達(dá)式

kotlin中控制表達(dá)式主要有四個:if、when堡距、for甲锡、while 。本篇文章將探討這四種表達(dá)式如何使用以及使用場景是什么羽戒。

if 表達(dá)式

在kotlin中缤沦,if不僅可以作為條件判斷語句,而且還可以作為一個表達(dá)式易稠,當(dāng)作為表達(dá)式出現(xiàn)的時(shí)候是有返回值的缸废。因此kotlin不再提供三元表達(dá)式(即condition? then:else),if-else已經(jīng)足夠表達(dá)上述情景。

if表達(dá)式使用示例如下:

            var min = 0
            var a = -1
            if (a < min) min = a//if 條件判斷

            var b = -2
            if (a < b) {//if else一起使用
                min = a
            } else {
                min = b
            }

            min = if (a < b) a else b//作為表達(dá)式使用
            println(min)//打印 '-2'

kotlin中if表達(dá)式可以是一個塊企量,塊的最后一個表達(dá)式作為返回值测萎,如下所示:

            var min = 0
            val a = -1
            val b = -2
            min = if (a < b) {//if塊,注意這里需要提供返回值并賦值于min變量
                println("a < b")//可以執(zhí)行語句
                a//最后一個表達(dá)式作為返回值
            } else {//同if
                println("a > b")
                b
            }
            println(min)

注意届巩,當(dāng)if作為表達(dá)式的時(shí)候硅瞧,必須要跟else分支。

When表達(dá)式

對于類c語言恕汇,大家都很熟悉switch表達(dá)式腕唧,然而在kotlin中不再有這個表達(dá)式,取而代之的是就是when表達(dá)式瘾英。

            val a = -1
            when (a) {
                1 -> println("a == 1")//注意枣接,這即表示一個匹配條件,類似于switch中的case
                -1 -> println("a == -1")
                0 -> println("a == 0")
                else -> {//類似于switch中的default
                    print("a not match...")
                }
            }

when表達(dá)式會依次檢測每個條件語句方咆,直到匹配了某個條件即終止檢測月腋。如果所有條件都不匹配則進(jìn)入else分支。
此外瓣赂,當(dāng)when單純作為語句出現(xiàn)時(shí),else分支是可以省略的片拍,但是當(dāng)作為表達(dá)式出現(xiàn)時(shí)則必須要有else分支煌集,除非編譯器能夠確認(rèn)when中的分支能夠cover所有的場景,比如when表達(dá)式處理的是枚舉類或者sealed類捌省。具體示例如下:

            val a = -1
            val b = when (a) {//when作為表達(dá)式存在苫纤,需要返回值,并賦值于b
                1 -> println("a == 1")
                -1 -> println("a == -1")
                0 -> println("a == 0")
                else -> {//注意纲缓,這個else此時(shí)必須存在卷拘,否則編譯器會報(bào)錯
                    print("a not match...")
                }
            }

對于條件不同,而處理結(jié)果相同的情形祝高,when可以用"栗弟,"進(jìn)行條件分割,如下所示

            val a = -1
            when (a) {
                0, 1 -> println("a != 0 且 a != 0")//用逗號,合并不同case
                -1 -> println("a == -1")
            }

kotlin中的when非常強(qiáng)大,它可以支持任意表達(dá)式(而不局限于常量)作為判斷條件工闺,如下所示:

            val a = -1
            val b = 2
            when (a) {
                in -2..10 -> println("a在-2-10區(qū)間內(nèi)")//支持任意表達(dá)式
                b.toInt() -> println("a == b == 2")
            }

when的另一個用途可以用作類型檢測乍赫,如下所示:

           fun isInt(a:Any) = when (a) {
                is Int -> println("a是個整數(shù)")//這里利用is關(guān)鍵字進(jìn)行類型判斷
                else -> println("a不是個整數(shù)")
            }
            isInt(2)//打印 'a是個整數(shù)'

when同時(shí)可以作為if-else 的替代方案,如下所示:

            val x = 1
            when {//when塊執(zhí)行后陆蟆,會打印'x>0'
                x > 0 -> print("x > 0")
                x < 0 -> print("x < 0")
                else -> print("x == 0")
            }

上面這種替代方案雷厂,并沒有指定條件(即when沒有接收入?yún)ⅲ藭r(shí)會默認(rèn)根據(jù)每個語句的true和false來進(jìn)行匹配叠殷,如果某個語句返回了true則終止檢測改鲫。

For循環(huán)

kotlin中的for循環(huán)可以遍歷一切提供有迭代器的對象集合,其使用語法如下:

            val ints: Array<Int> = arrayOf(1, 2, 3)
            for (item in ints) {
                println(item)//打印'1 2 3'
            }

for循環(huán)同時(shí)可以迭代一段指定范圍的數(shù)字,如下所示:

            for (item in 1..3) {//range for循環(huán)
                println(item)//打印' 1 2 3'
            }

            for (item in 10 downTo 0 step 2){
                println(item)//'打印 10 8 6 4 2 0'
            }

由上述代碼可知像棘,kotlin的for循環(huán)十分強(qiáng)大纫塌,支持的操作符即豐富有語義化。比如downTo(即遞減到某個值)讲弄、step(步長措左,每次迭代的步長值)等。
對于遍歷數(shù)組或者一段范圍的數(shù)字避除,for循環(huán)并不會生成迭代對象怎披,而是會被編譯器編譯為基于索引的for循環(huán)。如果數(shù)組或者集合想直接通過索引進(jìn)行遍歷瓶摆,也可以通過以下方法進(jìn)行:

            val ints: Array<Int> = arrayOf(1, 2, 3)
            for (index in ints.indices){//第一種方法凉逛,首先獲取索引,然后根據(jù)索引取值
                println(ints[index])
            }
            for ((index, value) in ints.withIndex()){//第二種方法群井,直接可以獲取索引以及其對應(yīng)的值
                println("the element at $index is $value")
            }

While循環(huán)

kotlin中的while循環(huán)和java基本一致状飞,示例如下:

            var k = 10
            while (k > 0){//while循環(huán)
                k--
            }

            do {//do-while循環(huán)
                k++
            }while (k < 10)

while循環(huán)和其他語言相差不大,也比較簡單书斜,這里不再闡述诬辈。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市荐吉,隨后出現(xiàn)的幾起案子焙糟,更是在濱河造成了極大的恐慌,老刑警劉巖样屠,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件穿撮,死亡現(xiàn)場離奇詭異,居然都是意外死亡痪欲,警方通過查閱死者的電腦和手機(jī)悦穿,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來业踢,“玉大人栗柒,你說我怎么就攤上這事≡赏觯” “怎么了傍衡?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長负蠕。 經(jīng)常有香客問我蛙埂,道長,這世上最難降的妖魔是什么遮糖? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任绣的,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘屡江。我一直安慰自己芭概,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布惩嘉。 她就那樣靜靜地躺著罢洲,像睡著了一般。 火紅的嫁衣襯著肌膚如雪文黎。 梳的紋絲不亂的頭發(fā)上惹苗,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機(jī)與錄音耸峭,去河邊找鬼桩蓉。 笑死,一個胖子當(dāng)著我的面吹牛劳闹,可吹牛的內(nèi)容都是我干的院究。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼本涕,長吁一口氣:“原來是場噩夢啊……” “哼业汰!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起偏友,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蔬胯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后位他,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡产场,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年鹅髓,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片京景。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡窿冯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出确徙,到底是詐尸還是另有隱情醒串,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布鄙皇,位于F島的核電站芜赌,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏伴逸。R本人自食惡果不足惜缠沈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧洲愤,春花似錦颓芭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至肛宋,卻和暖如春州藕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悼吱。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工慎框, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人后添。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓笨枯,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遇西。 傳聞我的和親對象是個殘疾皇子馅精,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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

  • 前言 人生苦多,快來 Kotlin 粱檀,快速學(xué)習(xí)Kotlin洲敢! 什么是Kotlin? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,217評論 9 118
  • Kotlin系統(tǒng)化學(xué)習(xí)-20170823文章中有大部分內(nèi)容是借鑒《Kotlin實(shí)戰(zhàn)》中文版茄蚯,特此注明一下压彭。 Kot...
    ClAndEllen閱讀 1,678評論 2 10
  • 3.1 包(package) 我們先來舉個例子。比如說渗常,程序員A寫了一個類叫 JSON , 程序員B也寫了一個類叫...
    谷哥得小弟閱讀 883評論 0 0
  • 每當(dāng)聽到“父愛無聲”壮不,就不自覺地回憶起被他暴打的那些情景,哪里是“無聲”皱碘?罵聲询一、打人聲、哭聲癌椿、叫聲健蕊,聲聲入耳,它們...
    兔子巴尼閱讀 621評論 5 3
  • 文|江清月明人自醉 飛蛾撲進(jìn)燭火的懷抱 燭問她 為什么 蛾說 你是這黑夜中最亮的光 蛾子漸漸燃成灰燼 燭流下淚 你...
    江清月明人自醉閱讀 149評論 0 1