關鍵字與運算子
硬關鍵字 (Hard keywords)
以下權杖一律會被解讀為關鍵字,且不能用作識別符:
asas?用於安全型別轉換。break終止迴圈的執行。class宣告類別。continue跳轉至最近閉合迴圈的下一個步驟。do開始 do/while 迴圈(具有後置條件的迴圈)。else定義 if 運算式 中當條件為 false 時執行的分支。false指定 Boolean 型別 的 'false' 值。for開始 for 迴圈。fun宣告函式。if開始 if 運算式。in- 指定 for 迴圈 中被反覆運算的物件。
- 作為中綴運算子檢查值是否屬於範圍、集合或其他定義了 'contains' 方法的實體。
- 在 when 運算式 中用於相同目的。
- 將型別參數標記為逆變 (contravariant)。
!in- 作為運算子檢查值是否「不」屬於範圍、集合或其他定義了 'contains' 方法的實體。
- 在 when 運算式 中用於相同目的。
interface宣告介面。is!is- 檢查值是否「不」具有特定型別。
- 在 when 運算式 中用於相同目的。
null是一個常數,表示不指向任何物件的物件參考。object同時宣告類別及其執行個體。package為目前檔案指定套件。return從最近的閉合函式或匿名函式中傳回。superthisthrow拋出例外。true指定 Boolean 型別 的 'true' 值。try開始例外處理區塊。typealias宣告型別別名。typeof保留供未來使用。val宣告唯讀屬性或區域變數。var宣告可變屬性或區域變數。when開始 when 運算式(執行指定分支之一)。while開始 while 迴圈(具有前置條件的迴圈)。
軟關鍵字 (Soft keywords)
以下權杖在適用的上下文中充當關鍵字,在其他上下文中可用作識別符:
bycatch開始處理特定例外型別的區塊。constructor宣告主建構函式或次要建構函式。delegate用作註解使用處目標。dynamic在 Kotlin/JS 程式碼中參照 dynamic 型別。fieldfile用作註解使用處目標。finally開始一個當 try 區塊結束時一律會執行的區塊。get- 宣告屬性的 getter。
- 用作註解使用處目標。
import將另一個套件中的宣告匯入到目前檔案中。init開始初始設定式區塊。param用作註解使用處目標。property用作註解使用處目標。receiver用作註解使用處目標。set- 宣告屬性的 setter。
- 用作註解使用處目標。
setparam用作註解使用處目標。value與class關鍵字配合使用以宣告內嵌類別 (inline class)。where指定泛型型別參數的約束。
修飾詞關鍵字 (Modifier keywords)
以下權杖在宣告的修飾詞清單中充當關鍵字,在其他上下文中可用作識別符:
abstract將類別或成員標記為 abstract。actual在多平台專案中表示平台特定實作。annotation宣告註解類別。companion宣告隨伴物件。const將屬性標記為編譯期常數。crossinline禁止傳遞給內聯函式的 Lambda 中出現非區域傳回。data指示編譯器為類別產生標準成員。enum宣告列舉。expect將宣告標記為平台特定,預期在平台模組中會有實作。external將宣告標記為在 Kotlin 之外實作(透過 JNI 或在 JavaScript 中存取)。final禁止覆寫成員。infix允許使用中綴標記法呼叫函式。inline告知編譯器在呼叫點內聯函式及其傳遞的 Lambda。inner允許從巢狀類別參照外層類別執行個體。internal將宣告標記為在目前模組中可見。lateinit允許在建構函式之外初始化非 null 屬性。noinline關閉對傳遞給內聯函式的 Lambda 的內聯。open允許繼承類別或覆寫成員。operator將函式標記為多載運算子或實作慣例。out將型別參數標記為協變 (covariant)。override將成員標記為覆寫基底類別成員。private將宣告標記為在目前類別或檔案中可見。protected將宣告標記為在目前類別及其子類別中可見。public將宣告標記為隨處可見。reified將內聯函式的型別參數標記為可在執行期存取。sealed宣告密封類別(具有受限子類別化的類別)。suspend將函式或 Lambda 標記為暫停(可用作協同程式)。tailrec將函式標記為尾端遞迴(允許編譯器將遞迴替換為反覆運算)。vararg允許為參數傳遞可變數量的引數。
特殊識別符
以下識別符由編譯器在特定上下文中定義,在其他上下文中可用作一般識別符:
運算子與特殊符號
Kotlin 支援以下運算子與特殊符號:
+,-,*,/,%- 數學運算子*也用於將陣列傳遞給 vararg 參數。
=- 指派運算子。
- 用於指定參數的預設值。
+=,-=,*=,/=,%=- 複合指派運算子。++,--- 遞增和遞減運算子。&&,||,!- 邏輯 'and'、'or'、'not' 運算子(對於按位元運算,請改用對應的中綴函式)。==,!=- 相等運算子(對於非原始型別,轉換為對equals()的呼叫)。===,!==- 參照相等運算子。<,>,<=,>=- 比較運算子(對於非原始型別,轉換為對compareTo()的呼叫)。[,]- 索引存取運算子(轉換為對get和set的呼叫)。!!斷言運算式為非 null。?.執行安全呼叫(如果接收者為非 null,則呼叫方法或存取屬性)。?:如果左側值為 null,則取右側值(elvis 運算子)。::建立成員參照或類別參照。..,..<建立範圍。:在宣告中將名稱與型別分隔。?將型別標記為可為 null。->- 分隔 Lambda 運算式的參數與主體。
- 在函式型別中分隔參數與傳回型別宣告。
- 分隔 when 運算式 分支的條件與主體。
@- 引入註解。
- 引入或參照迴圈標籤。
- 引入或參照 Lambda 標籤。
- 參照來自外層作用域的 'this' 運算式。
- 參照外層基底類別。
;分隔同一行上的多個陳述式。$參照 字串範本 (string template) 中的變數或運算式。_- 在 Lambda 運算式 中替代未使用的參數。
- 在 解構宣告 (destructuring declaration) 中替代未使用的參數。
有關運算子優先順序,請參閱 Kotlin 語法中的此參考資料。
