关键字和运算符
硬关键字 (Hard keywords)
以下 token 总是被解释为关键字,不能用作标识符:
as
- 用于类型转换。
- 指定 import 的别名
as?
用于安全类型转换。break
终止循环的执行。class
声明一个 类。continue
继续执行最近的封闭循环的下一步。do
开始一个 do/while 循环 (一个带有后置条件的循环)。else
定义 if 表达式 的分支,该分支在条件为假时执行。false
指定 Boolean 类型 的 'false' 值。for
开始一个 for 循环。fun
声明一个 函数。if
开始一个 if 表达式。in
- 指定在 for 循环 中迭代的对象。
- 用作中缀运算符,以检查一个值是否属于一个范围、 一个集合,或者另一个定义了 'contains' 方法的实体。
- 用于 when 表达式 中,用于相同的目的。
- 将类型参数标记为 逆变 (contravariant)。
!in
- 用作运算符,以检查一个值是否不属于一个范围、 一个集合,或者另一个定义了 'contains' 方法的实体。
- 用于 when 表达式 中,用于相同的目的。
interface
声明一个 接口。is
- 检查一个值是否具有某种类型。
- 用于 when 表达式 中,用于相同的目的。
!is
- 检查一个值是否不具有某种类型。
- 用于 when 表达式 中,用于相同的目的。
null
是一个常量,表示一个不指向任何对象的对象引用。object
同时声明 一个类及其实例。package
指定 当前文件的包。return
从最近的封闭函数或匿名函数返回。super
this
throw
抛出一个异常。true
指定 Boolean 类型 的 'true' 值。try
开始一个异常处理块。typealias
声明一个 类型别名。typeof
保留供将来使用。val
声明一个只读 属性 或 局部变量。var
声明一个可变 属性 或 局部变量。when
开始一个 when 表达式 (执行给定的分支之一)。while
开始一个 while 循环 (一个带有前置条件的循环)。
软关键字 (Soft keywords)
以下 token 在其适用的上下文中充当关键字,并且可以在其他上下文中用作标识符:
by
catch
开始一个 处理特定异常类型 的块。constructor
声明一个 主构造函数或二级构造函数。delegate
用作 注解使用点目标 (annotation use-site target)。dynamic
引用 Kotlin/JS 代码中的 动态类型。field
用作 注解使用点目标 (annotation use-site target)。file
用作 注解使用点目标 (annotation use-site target)。finally
开始一个 try 块退出时始终执行 的块。get
import
将来自另一个包的声明导入到当前文件中。init
开始一个 初始化块。param
用作 注解使用点目标 (annotation use-site target)。property
用作 注解使用点目标 (annotation use-site target)。receiver
用作 注解使用点目标 (annotation use-site target)。set
setparam
用作 注解使用点目标 (annotation use-site target)。value
与class
关键字一起使用,声明一个 内联类 (inline class)。where
指定 泛型类型参数的约束。
修饰符关键字 (Modifier keywords)
以下 token 在声明的修饰符列表中充当关键字,并且可以在其他上下文中用作标识符:
abstract
将类或成员标记为 抽象 (abstract)。actual
表示 多平台项目 中特定于平台的实现。annotation
声明一个 注解类。companion
声明一个 伴生对象。const
将属性标记为 编译时常量。crossinline
禁止 传递给内联函数的 lambda 中的非局部返回。data
指示编译器 为一个类生成规范成员。enum
声明一个 枚举。expect
将声明标记为 特定于平台,期望在平台模块中实现。external
将声明标记为在 Kotlin 之外实现(可通过 JNI 或在 JavaScript 中访问)。final
禁止 重写成员。infix
允许使用 中缀表示法 调用函数。inline
告诉编译器 在调用点内联一个函数和传递给它的 lambda。inner
允许从 嵌套类 引用外部类实例。internal
将声明标记为 在当前模块中可见。lateinit
允许在 构造函数之外初始化非空属性。noinline
关闭 传递给内联函数的 lambda 的内联。open
允许 子类化一个类或重写一个成员。operator
将函数标记为 重载运算符或实现约定。out
将类型参数标记为 协变 (covariant)。override
将成员标记为 超类成员的重写。private
将声明标记为 在当前类或文件中可见。protected
将声明标记为 在当前类及其子类中可见。public
将声明标记为 在任何地方可见。reified
将内联函数的类型参数标记为 在运行时可访问。sealed
声明一个 密封类 (一个具有受限子类化的类)。suspend
将函数或 lambda 标记为挂起 (可用作 协程)。tailrec
将函数标记为 尾递归 (允许编译器用迭代替换递归)。vararg
允许 为参数传递可变数量的参数。
特殊标识符 (Special identifiers)
以下标识符由编译器在特定上下文中定义,并且可以在其他上下文中用作常规标识符:
运算符和特殊符号 (Operators and special symbols)
Kotlin 支持以下运算符和特殊符号:
+
,-
,*
,/
,%
- 数学运算符*
也用于 将数组传递给 vararg 参数。
=
- 赋值运算符。
- 用于指定 参数的默认值。
+=
,-=
,*=
,/=
,%=
- 增强赋值运算符。++
,--
- 递增和递减运算符。&&
,||
,!
- 逻辑 'and'、'or'、'not' 运算符(对于按位运算,请改用相应的 中缀函数)。==
,!=
- 相等运算符 (对于非原始类型,转换为equals()
的调用)。===
,!==
- 引用相等运算符。<
,>
,<=
,>=
- 比较运算符 (对于非原始类型,转换为compareTo()
的调用)。[
,]
- 索引访问运算符 (转换为get
和set
的调用)。!!
断言表达式是非空的。?.
执行 安全调用 (如果接收者是非空的,则调用方法或访问属性)。?:
如果左侧的值为空,则采用右侧的值 (elvis 运算符)。::
创建一个 成员引用 或一个 类引用。..
,..<
创建 范围。:
在声明中将名称与类型分开。?
将类型标记为 可空。->
- 分隔 lambda 表达式 的参数和主体。
- 分隔 函数类型 中的参数和返回类型声明。
- 分隔 when 表达式 分支的条件和主体。
@
- 引入一个 注解。
- 引入或引用一个 循环标签。
- 引入或引用一个 lambda 标签。
- 引用 来自外部作用域的 'this' 表达式。
- 引用一个 外部超类。
;
分隔同一行上的多个语句。$
引用 字符串模板 中的变量或表达式。_
- 替换 lambda 表达式 中未使用的参数。
- 替换 解构声明 中未使用的参数。
有关运算符优先级,请参阅 Kotlin 语法中的 此参考。