zl程序教程

您现在的位置是:首页 >  其他

当前栏目

01. Kotlin 标识符、关键字和注释

2023-02-26 09:52:15 时间

标识符

标识符就是变量、常量、函数、属性、类、接口和扩展等由程序员指定的名字。构成标识符的字符均有一定的规范,Kotlin 语言中标识符的命名规则如下:

  • 区分大小写:Myname 与 myname 是两个不同的标识符。
  • 首字符,可以是下划线(_)或字母,但不能是数字。
  • 除首字符外其他字符,可以是下划线(_)、字母和数字。
  • 硬关键字(Hard Keywords)不能作为标识符,软关键字(Soft Keywords)、修饰符关键字(Modifier Keywords)在它们的适用场景之外可以作为标识符使用。
  • 特定标识符 field 和 it。在 Kotlin 语言中有两个由编译器定义的特定标识符,它们只能在特定场景中使用有特定的作用,而在其他的场景中可以做标识符使用。

提示 如果一定要使用关键字作为标识符,可以在关键字前后添加反引号(`)。另外,Kotlin语言中字母采用的是双字节 Unicode 编码。Unicode 叫作统一编码制,它包含了亚洲文字编码,如中文、日文、韩文等字符。

关键字

关键字是类似于标识符的保留字符序列,由语言本身定义好的,Kotlin 语言中有 70 多个关键字,全部是小写英文字母,以及 ! 和 ? 等字符构成。分为 3 个大类:

  1. 硬关键字(Hard Keywords),硬关键字如何情况下都不能作为关键字,具体包括如下关键字。 as、as?、break、class、continue、do、else、false、for、fun、if、in、!in、interface、is、!is、null、object、package、return、super、this、throw、true、try、typealias、val、var、when和while。
  2. 软关键字(Soft Keywords),软关键字是在它适用场景中不能作为标识符,而其他场景中可以作为标识符,但为例避免误解,一般也不会这么用。具体包括如下关键字。 by、catch、constructor、delegate、dynamic、field、file、finally、get、import、init、param、property、receiver、set、setparam 和 where。
  3. 修饰符关键字(Modifier Keywords),修饰符关键字是一种特殊的软关键字,它们用来修饰函数、类、接口、参数和属性等内容,在此场景中不能作为标识符。而其他场景中可以作为标识符,具体包括如下关键字。 abstract、annotation、companion、const、crossinline、data、enum、external、final、infix、inner、internal、lateinit、noinline、open、operator、out、override、private、protected、public、reified、sealed、suspend、tailrec 和 vararg。

in 和 !in 关键字

判断一个数值是否在区间中可以使用in关键字。而 !in 关键字,则是判断一个值不在区间中。此外,这两个关键字(in和!in)还可以判断一个数值是否集合或数组中。

val score = 50
if (score !in 60..100) { //使用!in关键字
    println("不及格")
}

val strArray = arrayOf("刘", "关", "张")
val name = "赵"
if (name !in strArray) {
    println(name + "不在队伍中")
}

注释

Kotlin 程序有 3 类注释:单行注释(//)、多行注释(/.../)和文档注释(/*.../)。注释方法与 Java 语言都类似。

// This is an end-of-line comment

/* This is a block comment
   on multiple lines. */

Kotlin 中的块注释可以嵌套。

/* The comment starts here
/* contains a nested comment *⁠/
and ends here. */

代码规范

一行代码的长度应尽量不要超过 80 个字符,如果超过则需断行,可以依据下面的一般规范断开:

  • 在一个逗号后面断开。一个运算符前面断开,要选择较高级别的运算符(而非较低级别的运算符)断开。

下面通过一些示例说明:

longName1 = longName2 * (longName3 + longName4 - longName5)
        + 4 * longName6  // ①
longName1 = longName2 * (longName3 + longName4
        - longName5) + 4 * longName6  //②

fun format(obj: Any, toAppendTo: StringBuffer,
                    fieldPosition: FieldPosition): StringBuffer { //③
    ...
}

if ((longName1 == longName2)
         || (longName3 == longName4) && (longName3 > longName4)
         && (longName2 > longName5)) {  //④

}
  1. 上述代码第 ① 行和第 ② 行是带有小括号运算的表示式,其中代码第 ① 行的断开位置要比第 ② 行的断开位置要好。因为代码第①行断开处位于括号表达式的外边,这是个较高级别的断开。
  2. 代码第 ③ 行函数名断开是在参数逗号之后。
  3. 代码第 ④ 行是 if 等判断结构表达式中,由于可能有很多长的条件表达式,断开的位置应在逻辑运算符处。

Coding conventions | Kotlin 代码规范

https://kotlinlang.org/docs/coding-conventions.html