关键字与操作符
硬关键字(Hard Keyword)
以下符号始终会被解释为关键字, 不能用作标识符(identifiers):
as用于 类型转换.
as?用于 安全的类型转换.break结束一个循环.class声明一个 类.continue跳转到最内层循环的下一次执行.do开始一个 do/while 循环 (条件判定在后的循环).else定义 if 表达式 的一个分支, 这个分支在条件为 false 时执行.false指定 布尔类型 的 'false' 值.for开始一个 for 循环.fun声明一个 函数.if开始一个 if 表达式.in指定 for 循环 的迭代对象.
用作中缀操作符, 判断一个值是否在 一个值范围 之内, 或者是否属于一个集合, 或者是否属于其他 定义了 'contains' 方法 的实体.
在 when 表达式 中做同样的判断.
将一个类型参数标记为 反向类型变异.
!in用作操作符, 判断一个值是否 不属于 一个值范围, 或者是否 不属于 一个集合, 或者是否 不属于 其他 定义了 'contains' 方法 的实体.
在 when 表达式 中做同样的判断.
interface声明一个 接口.is判断 一个值是不是某个类型.
在 when 表达式 中做同样的判断.
!is判断 一个值是否不是某个类型.
在 when 表达式 中做同样的判断.
null是一个常数, 表示一个不指向任何对象的引用.object同时声明一个类和它的对象实例.package指定 当前源代码文件的包.return从最内层的函数或匿名函数中返回.superthisthrow抛出一个异常.true指定 布尔类型 的 'true' 值.try开始一个异常处理代码段.typealias声明一个 类型别名.typeof保留, 将来使用.when开始一个 when 表达式 (执行其中一个分支).while开始一个 while 循环 (条件判定在前的循环).
软关键字(Soft Keyword)
以下符号在适当的场合下可以是关键字, 在其他场合可以用作标识符:
bycatch开始一个 处理特定的异常类型 的代码段.constructor声明一个 主构造器, 或次级构造器.delegate用作一种 注解的使用目标(target).dynamic在 Kotlin/JS 代码中引用一个 动态类型.field用作一种 注解的使用目标(target).file用作一种 注解的使用目标(target).finally开始一个 try 代码段结束时始终会被执行 的代码段.get声明 属性的取值方法.
用作一种 注解的使用目标(target).
import从另一个包中将一个声明导入到当前源代码文件.init开始一个 初始化代码段.param用作一种 注解的使用目标(target).property用作一种 注解的使用目标(target).receiver用作一种 注解的使用目标(target).set声明 属性的设值方法.
用作一种 注解的使用目标(target).
setparam用作一种 注解的使用目标(target).value与class关键字一起使用, 声明一个 内联类(inline class).where指定 泛型类型参数的约束.
修饰符关键字(Modifier Keyword)
以下符号在声明的修饰符列表中用做关键字, 在其他场合可以用作标识符:
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将类型参数标记为 协变的.override将成员标记为 对超类成员的覆盖.private将声明标记为 只在当前类中, 或当前源代码文件中可以访问.protected将声明标记为 只在当前类, 以及它的子类中可以访问.public将声明标记为 在任何位置都可以访问.reified将内联函数的类型参数标记为 在运行时刻可以访问.sealed声明一个 封闭类 (子类受到限制的类).suspend将函数, 或 lambda 表达式, 标注为挂起函数, 或挂起lambda 表达式 (可在 协程 中使用).tailrec将一个函数标注为 尾递归 (允许编译器用迭代来代替递归).vararg允许 对某个参数传递可变数量的参数值.
特殊标识符
以下表述符在特定情况下由编译器定义, 在其他场合可以用作通常的标识符:
field在属性访问函数的内部, 用来引用 属性的后端域变量.it在 lambda 表达式内部, 用来 引用 lambda 表达式的隐含参数.
操作符与特殊符号
Kotlin 支持以下操作符与特殊符号:
+,-,*,/,%- 算数运算符*也被用来 向一个不定数量参数传递数组.
=赋值操作符.
用来指定 参数的默认值.
+=,-=,*=,/=,%=- 计算并赋值.++,--- 递增与递减操作符.&&,||,!- '与', '或', '非' 逻辑运算符 (用于位运算, 使用对应的 中缀函数).==,!=- 相等和不等比较操作符 (对非基本类型, 会翻译为对equals()函数的调用).===,!==- 引用相等比较操作符.<,>,<=,>=- 比较操作符 (对非基本类型, 会翻译为对compareTo()函数的调用).[,]- 下标访问操作符 (会翻译为对get和set函数的调用).!!断言一个表达式的值不为 null.?.执行一个 安全调用 (如果接受者不为 null, 则调用一个方法, 或调用一个属性的访问函数).?:如果这个运算符左侧的表达式值为 null, 则返回右侧的表达式值(也就是 elvis 操作符)...,..<创建 值范围.:在声明中, 用作名称与类型之间的分隔符.?将一个类型标记为 可为 null.->在 lambda 表达式 中, 用作参数与函数体之间的分隔符.
在 函数类型 中, 用作参数与返回类型之间的分隔符.
在 when 表达式 的分支中, 用作分支条件与分支体之间的分隔符.
@引入一个 注解.
定义, 或者引用一个 循环标签.
定义, 或者引用一个 lambda 表达式标签.
引用一个 外层范围的 'this' 表达式.
引用一个 外部类的超类.
;用于在同一行中分隔多条语句.$在 字符串模板 中引用变量或表达式._在 lambda 表达式 中代替未使用的参数.
在 解构声明 中代替未使用的参数.
关于操作符优先顺序, 请参见 Kotlin 语法中的 这一章节.