kotlin條件表示式

2021-09-24 15:21:18 字數 3250 閱讀 1850

衝擊年薪50w,助你高階python工程師》

在 kotlin 中,if 是帶有返回值的表示式。因此kotlin沒有三元運算子(condition ? then : else),因為 if 語句可以做到同樣的事。

// 傳統用法

var max = a

if (a < b) max = b

// 帶 else

var max: int

if (a > b)

else

// 作為表示式

val max = if (a > b) a else b

if分支可以作為塊,最後乙個表示式是該塊的值:

val max = if (a > b)

else

如果使用if作為表示式而不是宣告(例如,返回其值或將其賦值給乙個變數),表示式必須帶有 else 分支。

參看 if語法

when 取代了 c 風格語言的 switch 。最簡單的用法像下面這樣

when (x) 

}

when會對所有的分支進行檢查直到有乙個條件滿足。when 可以用做表示式或宣告。如果用作表示式的話,那麼滿足條件的分支就是表示式的值jjs。如果用做宣告,那麼分支的值會被忽略。(與 if 表示式一樣,每個分支是乙個語句塊,而且它的值就是最後乙個表示式的值)

在其它分支都不匹配的時候預設匹配 else 分支。如果把 when 做為表示式的話 else 分支是強制的,除非編譯器可以證明分支條件已經覆蓋所有可能性。

如果有分支可以用同樣的方式處理的話,分支條件可以連在一起:

when (x)
可以用任意表示式作為分支的條件

when (x)
甚至可以用 in 或者 !in 檢查值是否值在乙個範圍或乙個集合中:

when (x)
也可以用 is 或者 !is 來判斷值是否是某個型別。注意,由於 smart casts ,可以不進行型別檢查就可以使用相應的屬性或方法。

val hasprefix = when (x)
when 也可以用來代替 if-else if 。如果沒有任何引數提供,那麼分支的條件就是簡單的布林表示式,當條件為真時執行相應的分支:

when
參看when語法

for 迴圈可以對所有提供迭代器的變數進行迭代。等同於 c# 等語言中的foreach。語法形式:

for (item in collection)

print(item)

內容可以是乙個語句塊

for (item: int in ints)
像之前提到的, for 可以對任何提供的迭代器的變數進行迭代,比如:

-- 有乙個 iterator() 成員函式或擴充套件函式,其返回型別要

-- 有乙個 next() 成員函式或擴充套件函式, 並且

-- 有乙個返回 boolean 的 hasnext() 成員函式或擴充套件函式。

這三個函式都需要標記為運算子.

對陣列的for迴圈不會建立迭代器物件,而是被編譯成乙個基於索引的迴圈.

如果你想通過 list 或者 array 的索引進行迭代,你可以這樣做:

for (i in array.indices)

print(array[i])

這裡需要說明的是 "iteration through a range " 會被自動編譯成最優的實現,並不會有附加物件生成。

或者,您也可以使用withindex庫函式

for ((index, value) in array.withindex())
參看for語法

while 和 do...while 和其它語言沒什麼區別

while (x > 0) 

do while (y != null) // y 在這是可見的

kotlin 有三種結構跳轉表示式:

-- return

-- break 結束最近的閉合迴圈

-- continue 跳到最近的閉合迴圈的下一次迴圈

上述表示式都可以作為更大的表示式的一部分:

val s = person.name ?: return
這些表示式的型別是 nothing type

在 kotlin 中表示式可以新增標籤。標籤通過 @ 結尾來表示,比如:abc@foobar@都是有效的(參看語法)。使用標籤語法只需像這樣:

loop@ for (i in 1..100)
我們可以用標籤實現 break 或者 continue 的快速跳**

loop@ for (i in 1..100) 

}

break 是跳轉標籤後面的表示式,continue 是跳轉到迴圈的下一次迭代。

在字面函式,區域性函式,以及物件表示式中,函式在kotlin中是可以巢狀的。合法的return 允許我們返回到外層函式。最重要的使用場景就是從lambda表示式中返回,還記得我們之前的寫法嗎:

fun foo() 

}

return 表示式返回到最近的閉合函式,比如foo(注意這樣非區域性返回僅僅可以在內聯函式中使用)。如果我們需要從乙個字面函式返回可以使用標籤修飾 return :

fun foo() 

}

現在它僅僅從字面函式中返回。經常用一種更方便的含蓄的標籤:比如用和傳入的 lambda 表示式名字相同的標籤。

fun foo() 

}

另外,我們可以用函式表示式替代匿名函式。在函式表示式中使用 return 語句可以從函式表示式中返回。

fun foo() )

}

當返回乙個值時,解析器給了乙個參考,比如(原文when returning a value, the parser gives preference to the qualified return, i.e.):

return@a 1
表示 「在標籤@a返回1」 而不是返回乙個標籤表示式(@a 1)命名函式自動定義標籤:

foo outer() 

}

Kotlin學習 Kotlin物件表示式和物件宣告

kotlin 用物件表示式和物件宣告來實現建立乙個對某個類做了輕微改動的類的物件,且不需要去宣告乙個新的子類 通過物件表示式實現乙個匿名內部類的物件用於方法的引數中 window.addmouselistener object mouseadapter override fun mouseenter...

kotlin的lambda表示式

lambda是什麼 簡單來講,lambda是一種函式的表示方式 言外之意也就是說乙個lambda表示式等於乙個函式 更確切的說 lambda是乙個未宣告的函式,會以表示式的形式傳遞 來歷 python 乙個函式返回了乙個內部函式,該內部函式引用了外部函式的相關引數和變數,我們把該返回的內部函式稱為閉...

kotlin函式式表示式

kotlin函式式表示式 當函式返回單個表示式時,可以省略花括號並且在 符號之後指定 體即可 fun double x int int x 2kotlin 當返回值型別可由編譯器推斷時,顯式宣告返回型別是可選的 fun double x int x 2 lambda 表示式的完整語法形式,即函式型別...