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

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

标识符


标识符就是变量、常量、函数、属性、类、接口和扩展等由程序员指定的名字。构成标识符的字符均有一定的规范,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。


  1. 软关键字(Soft Keywords),软关键字是在它适用场景中不能作为标识符,而其他场景中可以作为标识符,但为例避免误解,一般也不会这么用。具体包括如下关键字。


by、catch、constructor、delegate、dynamic、field、file、finally、get、import、init、param、property、receiver、set、setparam 和 where。


  1. 修饰符关键字(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. 上述代码第 ① 行和第 ② 行是带有小括号运算的表示式,其中代码第 ① 行的断开位置要比第 ② 行的断开位置要好。因为代码第①行断开处位于括号表达式的外边,这是个较高级别的断开。


  1. 代码第 ③ 行函数名断开是在参数逗号之后。


  1. 代码第 ④ 行是 if 等判断结构表达式中,由于可能有很多长的条件表达式,断开的位置应在逻辑运算符处。


Coding conventions | Kotlin 代码规范


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


目录
相关文章
|
Java API 调度
Kotlin 中的suspend 关键字
Kotlin 中的suspend 关键字
216 0
|
4月前
|
设计模式 Android开发 Kotlin
Android经典实战之Kotlin委托模式和by关键字
本文介绍了Kotlin中`by`关键字在类及属性委托中的运用,通过实例展示了如何利用类委托简化接口实现,以及如何借助标准与自定义属性委托管理属性的读写操作。通过`by`关键字的支持,Kotlin使得委托模式的实现更为直观且高效。
98 4
|
5月前
|
SQL 安全 Java
Android经典面试题之Kotlin中object关键字实现的是什么类型的单例模式?原理是什么?怎么实现双重检验锁单例模式?
Kotlin 单例模式概览 在 Kotlin 中,`object` 关键字轻松实现单例,提供线程安全的“饿汉式”单例。例如: 要延迟初始化,可使用 `companion object` 和 `lazy` 委托: 对于参数化的线程安全单例,结合 `@Volatile` 和 `synchronized`
69 6
|
6月前
|
Kotlin
Kotlin注释
Kotlin注释
197 0
|
API Kotlin
Kotlin中扩展函数、infix关键字、apply函数和DSL的详解
Kotlin中扩展函数、infix关键字、apply函数和DSL的详解
138 0
|
Kotlin
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
Kotlin中接口、抽象类、泛型、out(协变)、in(逆变)、reified关键字的详解
109 0
|
Kotlin
Kotlin中继承、类型转换、Any超类、object关键字详解
Kotlin中继承、类型转换、Any超类、object关键字详解
176 0
|
Kotlin
Kotlin 中定义类、field关键字,主构造函数和次构造函数详解
Kotlin 中定义类、field关键字,主构造函数和次构造函数详解
170 0
|
存储 Java 编译器
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(下)
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(下)
61 0
|
Java Android开发 开发者
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(上)
Kotlin 学习笔记(四)—— 作用域函数、inline 关键字、反引号等 Kotlin 基本用法(上)
105 0