關鍵字與運算符
硬性關鍵字 (Hard keywords)
以下token 總是會被解析為關鍵字,不能當作識別符 (identifiers) 使用:
as
- 用於類型轉換。
- 指定導入 (import) 的別名
as?
用於安全的類型轉換。break
終止迴圈的執行。class
宣告一個類別 (class)。continue
繼續執行最近一層封閉迴圈的下一次迭代。do
開始一個 do/while 迴圈 (帶有後置條件的迴圈)。else
定義 if 表達式 的一個分支,該分支在條件為 false 時執行。false
指定 Boolean 類型 的 'false' 值。for
開始一個 for 迴圈。fun
宣告一個 函數 (function)。if
開始一個 if 表達式。in
- 指定在 for 迴圈 中被迭代的對象。
- 用作中綴運算符 (infix operator),檢查一個值是否屬於 一個範圍 (range)、 一個集合 (collection) 或另一個 定義了 'contains' 方法 的實體。
- 在 when 表達式 中用於相同的目的。
- 將類型參數標記為 逆變 (contravariant)。
!in
- 用作一個運算符 (operator),檢查一個值是否 不 屬於 一個範圍 (range)、 一個集合 (collection) 或另一個 定義了 'contains' 方法 的實體。
- 在 when 表達式 中用於相同的目的。
interface
宣告一個 介面 (interface)。is
- 檢查 一個值是否具有某種類型。
- 在 when 表達式 中用於相同的目的。
!is
- 檢查 一個值是否 不 具有某種類型。
- 在 when 表達式 中用於相同的目的。
null
是一個常量,表示不指向任何對象的對象引用。object
同時宣告 一個類別 (class) 及其實例。package
指定 目前檔案的套件 (package)。return
從最近一層封閉函數或匿名函數返回。super
this
throw
拋出一個異常 (exception)。true
指定 Boolean 類型 的 'true' 值。try
開始一個異常處理區塊。typealias
宣告一個 類型別名 (type alias)。typeof
保留供未來使用。val
宣告一個只讀 屬性 (property) 或 區域變數 (local variable)。var
宣告一個可變 屬性 (property) 或 區域變數 (local variable)。when
開始一個 when 表達式 (執行給定分支之一)。while
開始一個 while 迴圈 (帶有前置條件的迴圈)。
軟性關鍵字 (Soft keywords)
以下token 在適用的上下文中充當關鍵字,它們可以在其他上下文中用作識別符 (identifiers):
by
catch
開始一個 處理特定異常類型 的區塊。constructor
宣告一個 主要或輔助建構函數。delegate
用作 annotation use-site target。dynamic
在 Kotlin/JS 代碼中引用一個 dynamic 類型。field
用作 annotation use-site target。file
用作 annotation use-site target。finally
開始一個 當 try 區塊退出時始終執行的區塊。get
- 宣告 屬性的 getter。
- 用作 annotation use-site target。
import
將另一個套件 (package) 中的宣告導入到當前檔案。init
開始一個 初始化區塊。param
用作 annotation use-site target。property
用作 annotation use-site target。receiver
用作 annotation use-site target。set
- 宣告 屬性的 setter。
- 用作 annotation use-site target。
setparam
用作 annotation use-site target。value
搭配class
關鍵字宣告一個 inline class。where
指定 泛型類型參數的約束。
修飾符關鍵字 (Modifier keywords)
以下token 在宣告的修飾符列表中充當關鍵字,它們可以在其他上下文中用作識別符 (identifiers):
abstract
將類別 (class) 或成員標記為 抽象 (abstract)。actual
表示 多平台專案 中特定於平台的實現。annotation
宣告一個 annotation class。companion
宣告一個 伴生對象 (companion object)。const
將屬性標記為 編譯時常量。crossinline
禁止 傳遞給 inline 函數的 lambda 中的非本地返回。data
指示編譯器 為類別 (class) 生成規範成員。enum
宣告一個 枚舉 (enumeration)。expect
將宣告標記為 特定於平台,期望在平台模組中實現。external
將宣告標記為在 Kotlin 之外實現 (可通過 JNI 或在 JavaScript 中訪問)。final
禁止 覆寫 (overriding) 成員。infix
允許使用 中綴表示法 呼叫函數。inline
告訴編譯器 在呼叫位置 inline 一個函數和傳遞給它的 lambda。inner
允許從 巢狀類別 引用外部類別實例。internal
將宣告標記為 在當前模組中可見。lateinit
允許在 建構函數 (constructor) 之外初始化一個不可為 null 的屬性。noinline
關閉 傳遞給 inline 函數的 lambda 的 inline。open
允許 子類化一個類別 (class) 或覆寫一個成員。operator
將函數標記為 覆載運算符 (overloading an operator) 或實現一個約定。out
將類型參數標記為 協變 (covariant)。override
將成員標記為 超類成員的覆寫。private
將宣告標記為 在當前類別 (class) 或檔案中可見。protected
將宣告標記為 在當前類別及其子類中可見。public
將宣告標記為 在任何地方都可見。reified
將 inline 函數的類型參數標記為 在運行時可訪問。sealed
宣告一個 密封類別 (sealed class) (具有受限子類化的類別)。suspend
將函數或 lambda 標記為 suspending (可用作 協程 (coroutine))。tailrec
將函數標記為 尾遞迴 (tail-recursive) (允許編譯器用迭代替換遞迴)。vararg
允許 為參數傳遞可變數量的參數。
特殊識別符 (Special identifiers)
以下識別符 (identifiers) 由編譯器在特定上下文中定義,它們可以在其他上下文中用作常規識別符 (identifiers):
field
在屬性訪問器 (accessor) 內部用於引用 屬性的 backing field。it
在 lambda 內部用於 隱式引用其參數。
運算符和特殊符號 (Operators and special symbols)
Kotlin 支援以下運算符和特殊符號:
+
,-
,*
,/
,%
- 數學運算符 (mathematical operators)*
也用於 將陣列 (array) 傳遞給 vararg 參數。
=
- 賦值運算符 (assignment operator)。
- 用於指定 參數的預設值。
+=
,-=
,*=
,/=
,%=
- 增強賦值運算符 (augmented assignment operators)。++
,--
- 遞增和遞減運算符 (increment and decrement operators)。&&
,||
,!
- 邏輯 'and'、'or'、'not' 運算符 (對於位元運算,請改用相應的 中綴函數)。==
,!=
- 相等運算符 (equality operators) (對於非原始類型,翻譯為equals()
的呼叫)。===
,!==
- 引用相等運算符 (referential equality operators)。<
,>
,<=
,>=
- 比較運算符 (comparison operators) (對於非原始類型,翻譯為compareTo()
的呼叫)。[
,]
- 索引訪問運算符 (indexed access operator) (翻譯為get
和set
的呼叫)。!!
斷言表達式不可為 null。?.
執行 安全呼叫 (如果接收者不可為 null,則呼叫方法或訪問屬性)。?:
如果左側值為 null,則採用右側值 (elvis 運算符)。::
創建一個 成員引用 或一個 類別引用。..
,..<
創建 範圍 (ranges)。:
在宣告中將名稱與類型分開。?
將類型標記為 可為 null。->
- 分隔 lambda 表達式 的參數和主體。
- 分隔 函數類型 中的參數和返回類型宣告。
- 分隔 when 表達式 分支的條件和主體。
@
- 引入一個 annotation。
- 引入或引用一個 迴圈標籤。
- 引入或引用一個 lambda 標籤。
- 從 外部作用域 引用一個 'this' 表達式。
- 引用一個 外部超類。
;
分隔同一行上的多個語句。- `` 引用 字串模板 中的變數或表達式。
_
- 替換 lambda 表達式 中未使用的參數。
- 替換 解構宣告 中未使用的參數。
有關運算符優先級,請參閱 Kotlin 語法中的 此參考。