從java到Kotlin之-控制流

if...else

????????在 Kotlin 中植旧,if...else是一個表達(dá)式,即它會返回一個值离唐。

// 作為表達(dá)式
val max = if (a > b) a else b

????????if 的分支可以是代碼塊病附,最后的表達(dá)式作為該塊的值:

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

注意:

  1. if...else可以達(dá)到和三目運算符相同的效果,所以kotlin就不需要三目運算符
  2. if...else的返回值是可以忽略的亥鬓,忽略后就和java的語句沒什么差別
  3. 當(dāng)使用 if 作為表達(dá)式而不是語句(例如:返回它的值或者把它賦給變量)完沪,該表達(dá)式需要有 else 分支。

(取消了三目運算符對不少人應(yīng)該是好消息吧贮竟,帶有返回值也是很棒的設(shè)計)

when

????????在 Kotlin 中丽焊,when取代了類 Java的 switch-case語句。when語句的形式入下:

when (x) {
    //普通條件下咕别,沒有Java中的case和break語句
    1 -> print("x == 1") 
    //多個條件有相同的處理時技健,可以把多個條件放在一起,用逗號分隔
    2,3 -> print("x == 2 or x == 3")
    //可以用任意表達(dá)式和函數(shù)(而不只是常量)作為分支條件
    1+3 -> print("x == 4")
    add(1+4) -> print("x == 5")
    //可以檢測一個值在(in)或者不在(!in)一個區(qū)間或者集合中
    in 6..10 -> print("x is in the 6~10")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    //這里的else相當(dāng)與Java的default語句
    else -> { 
        print("x is neither 1 nor 2")
    }
}

????????和if...else類似惰拱,when也是一個表達(dá)式雌贱,具有返回值啊送,滿足條件的分支中最后的表達(dá)式就是其返回值

var result = when (x % 2) {
    0 -> {
        println("x是偶數(shù)")
        0
    }
    else -> {
        println("x是奇數(shù)")
        1
    }
}

????????when還可以檢測一個值是(is)或者不是(!is)一個特定類型的值。注意: 由于智能轉(zhuǎn)換欣孤,你可以訪問該類型的方法與屬性而無需任何額外的檢測馋没。

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

????????可以不提供參數(shù),所有的分支條件都是簡單的布爾表達(dá)式降传,而當(dāng)一個分支的條件為真時則執(zhí)行該分支篷朵,從而取代if-else if鏈

when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
}

????????自 Kotlin 1.3 起,可以使用以下語法將 when 的主語(subject婆排,譯注:指 when 所判斷的表達(dá)式)捕獲到變量中:

fun Request.getBody() =
        when (val response = executeRequest()) {
            is Success -> response.body
            is HttpError -> throw HttpException(response.status)
        }

(總之666声旺,這個when相比于java的簡直太強(qiáng)大了有沒有)

for

????????for 循環(huán)可以對任何提供迭代器(iterator)的對象進(jìn)行遍歷,這相當(dāng)于像 Java 中的 foreach 循環(huán)

Kotlin Java
for (item in collection) print(item) for (int item in collection) System.out.print(item)

????????Kotlin中段只,在數(shù)字區(qū)間上迭代腮猖,請使用區(qū)間表達(dá)式替代java中的for(;;)語句:

for (i in 1..3) {
    println(i)
}
for (i in 6 downTo 0 step 2) {
    println(i)
}

????????通過索引遍歷一個數(shù)組或者一個 list,可以這么做:

for (i in array.indices) {
    println(array[i])
}
//可以用庫函數(shù) withIndex
for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

(這個for配合一些關(guān)健字可以實現(xiàn)一些花式遍歷呢)

while和do...while

????????while和do...while的用法和java一致
(不容易啊赞枕,終于看到一個和java用法一致的了)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末澈缺,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子炕婶,更是在濱河造成了極大的恐慌姐赡,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件古话,死亡現(xiàn)場離奇詭異雏吭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)陪踩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門杖们,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人肩狂,你說我怎么就攤上這事摘完。” “怎么了傻谁?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵孝治,是天一觀的道長。 經(jīng)常有香客問我审磁,道長谈飒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任态蒂,我火速辦了婚禮杭措,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钾恢。我一直安慰自己手素,他們只是感情好鸳址,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著泉懦,像睡著了一般稿黍。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崩哩,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天巡球,我揣著相機(jī)與錄音,去河邊找鬼邓嘹。 笑死辕漂,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吴超。 我是一名探鬼主播,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼鸯乃,長吁一口氣:“原來是場噩夢啊……” “哼鲸阻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起缨睡,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤鸟悴,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后奖年,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體细诸,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年陋守,在試婚紗的時候發(fā)現(xiàn)自己被綠了震贵。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡水评,死狀恐怖猩系,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情中燥,我是刑警寧澤寇甸,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站疗涉,受9級特大地震影響拿霉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜咱扣,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一绽淘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偏窝,春花似錦收恢、人聲如沸武学。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽火窒。三九已至,卻和暖如春驮肉,著一層夾襖步出監(jiān)牢的瞬間熏矿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工离钝, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留票编,地道東北人。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓卵渴,卻偏偏與公主長得像慧域,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子浪读,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348