5.1.2 关键字与运算符
5 分钟阅读
5.1.2 关键字与运算符
硬关键字
以下词元始终被解释为关键字,不能用作标识符:
as
as?用于安全的类型转换。break终止循环的执行。class声明一个类。continue继续执行最近的外层循环的下一步。do开始一个 do/while 循环(带后置条件的循环)。else定义 if 表达式在条件为假时执行的分支。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声明一个类型别名。typeof保留供将来使用。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。
- 用作注解使用处目标。
修饰符关键字
以下词元在声明的修饰符列表中充当关键字,在其他上下文中则可以用作标识符:
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 语法中的这份参考。