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