关键字与操作符
硬关键字
以下标记始终被解释为关键字,不能用作标识符:
asas?用于安全类型转换。break终止循环的执行。class声明一个类。continue继续执行最近的封闭循环的下一步。do开始一个 do/while 循环(带后置条件的循环)。else定义当条件为假时执行的 if 表达式的分支。false指定 Boolean 类型的 'false' 值。for开始一个 for 循环。fun声明一个函数。if开始一个 if 表达式。in!in- 用作操作符,检测一个值是否不属于区间、集合或定义了 'contains' 方法的其它实体。
- 在 when 表达式中用于相同目的。
interface声明一个接口。is!isnull是一个常量,表示不指向任何对象的对象引用。object同时声明一个类及其实例。package指定当前文件的包。return从最近的封闭函数或匿名函数返回。superthisthrow抛出一个异常。true指定 Boolean 类型的 'true' 值。try开始一个异常处理代码块。typealias声明一个类型别名。typeof保留供 future 使用。val声明一个只读属性或局部变量。var声明一个可变属性或局部变量。when开始一个 when 表达式(执行给定的分支之一)。while开始一个 while 循环(带前置条件的循环)。
软关键字
以下标记在其适用的上下文中作为关键字,但在其他上下文中可以用作标识符:
bycatch开始一个处理特定异常类型的代码块。constructor声明一个主构造函数或次构造函数。delegate用作注解使用点目标。dynamic在 Kotlin/JS 代码中引用动态类型。field用作注解使用点目标。file用作注解使用点目标。finally开始一个代码块,该代码块在 try 代码块退出时始终执行。get- 声明属性的 getter。
- 用作注解使用点目标。
import将另一个包的声明导入当前文件。init开始一个初始化代码块。param用作注解使用点目标。property用作注解使用点目标。receiver用作注解使用点目标。set- 声明属性的 setter。
- 用作注解使用点目标。
setparam用作注解使用点目标。value与class关键字一起声明一个内联类。where指定泛型类型形参的约束。
修饰符关键字
以下标记在声明的修饰符列表中作为关键字,但在其他上下文中可以用作标识符:
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将类型形参标记为协变的。override将成员标记为覆盖超类成员。private将声明标记为在当前类或文件中可见。protected将声明标记为在当前类及其子类中可见。public将声明标记为在任何地方可见。reified将内联函数的类型形参标记为在运行时可访问。sealed声明一个密封类(一个限制子类化的类)。suspend将函数或 lambda 表达式标记为挂起(可用作协程)。tailrec将函数标记为尾递归的(允许编译器用迭代替换递归)。vararg允许为形参传递可变数量的实参。
特殊标识符
以下标识符由编译器在特定上下文中定义,但在其他上下文中可以用作常规标识符:
操作符与特殊符号
Kotlin 支持以下操作符和特殊符号:
+、-、*、/、%- 数学操作符*也用于将数组传递给 vararg 形参。
=- 赋值操作符。
- 用于为形参指定默认值。
+=、-=、*=、/=、%=- 增强赋值操作符。++、--- 递增和递减操作符。&&、||、!- 逻辑“与”、“或”、“非”操作符(对于位操作,请使用相应的中缀函数)。==、!=- 相等操作符(对于非原语类型,会转换为equals()调用)。===、!==- 引用相等操作符。<、>、<=、>=- 比较操作符(对于非原语类型,会转换为compareTo()调用)。[、]- 索引访问操作符(会转换为get和set调用)。!!断言表达式为非空的。?.执行安全调用(如果接收者非空,则调用方法或访问属性)。?:如果左侧值为 null,则取右侧值(Elvis 操作符)。::创建成员引用或类引用。..、..<创建区间。:在声明中将名称与类型分开。?将类型标记为可空的。->- 分隔lambda 表达式的形参和主体。
- 分隔函数类型中的形参和返回类型声明。
- 分隔 when 表达式分支的条件和主体。
@- 引入一个注解。
- 引入或引用一个循环标签。
- 引入或引用一个lambda 标签。
- 引用外部作用域的 'this' 表达式。
- 引用外部超类。
;分隔同一行上的多个语句。*在字符串模板中引用变量或表达式。_- 在 lambda 表达式中替换未使用的形参。
- 在解构声明中替换未使用的形参。
关于操作符优先级,请参见 Kotlin 语法中的此参考。
