本文最后更新于:2 个月前
本文参考kotlin官方开发手册
本文参考kotlin开发手册翻译版本
基本语法
包
包名在源文件顶部定义 :
包名不需要和目录相匹配,源文件可以存在文件系统的任何位置。
函数
两个 Int
参数,返回值是 Int
的函数 :
在kotlin
中,fun
是函数的标志,是固定使用的。这一点和很多解释语言相似。
表达式作为函数体,自动推断返回值类型的函数 :
返回无意义值的函数 :
在PHP中也有这种以$
标定变量的形式。
返回类型是 Unit
时,可省略 :
局部变量
常量( assign-once
read-only
) :
使用关键字val
标志常量
变量 :
var
可以自动匹配数据类型
注释
和 Java , JacaScript 一样,Kotlin 也支持行注释和块注释 :
与 Java 不同的是,Kotlin 的块注释可以嵌套。
使用字符串模板
使用条件表达式
使用 if
作为表达式 :
使用可空变量以及空值检查
当引用可能为空时必须显式标识这个引用是可空的。
如果 str
不是数字,则返回空 :
kotlin
可以使用null匹配,java
中使用equals
进行匹配
返回可空值的函数 :
或者
使用类型检测和自动类型转换
is
操作符用来检测某个表达式是否是某个类型的实例。如果一个不可变的局部变量或者属性值经过类型检测为特定类型后,就没有必要再显示转换 :
or
or even
使用for循环
or
indices指索引,返回值为Int类型,相当于c语言数组的下标值。
使用while循环
使用when表达式
使用 ranges
使用 in
操作符检测某个数字是否在指定范围内 :
判断数字是否在指定范围之外 :
遍历 :
over a progression :
使用集合
迭代一个集合 :
使用 in
操作符判断一个对象是否在集合中 :
使用 lambda 表达式来过滤(filter)和变换(map)集合 :
创建类和实例 :
习惯写法
惯用语法
Kotlin 中的一些常用惯用语法。
创建数据传输对象 (POJOs/POCOs)
Customer
类具有以下函数 :
- 对所有属性的 getters(对于变量提供 setters 方法)
equals()
hashCode()
toString()
copy()
component1()
, component2()
, … , for all properties
函数参数默认值
过滤 list
even shorter :
字符串插入
类型检查
遍历 map/键值对集合
k
, v
可以任意命名
使用 ranges
只读 list
只读 map
访问 map
懒属性
扩展函数
创建单例
if not null 简写
if not null and else 简写
为 null 时执行
不为null时执行
不为 null 时返回非 null map
返回 when 表达式
try/catch 表达式
if 表达式
Builder-style usage of methods that return Unit
单一表达式函数
等价于
可以和其他习惯用法有效结合,简化代码,例如when表达式 :
使用 with 调用一个对象的多个方法
Java 7’s try with resources
需要泛型类型信息的泛型函数的简便形式
使用可空 Boolean 值
编码规范
包含了 Kotlin 语言当前代码风格。
命名风格
如有不确定,默认使用 Java 的编码风格,例如 :
- 使用驼峰命名法(命名避免使用下划线)
- 类型名称首字母大写
- 方法和属性名首字母小写
- 缩进使用4个空格
- 公共函数需要写文档,以便在Kotlin Doc中查看
冒号
类型和父类型之间的冒号前需要有空格,实例和类型之间的冒号前不需要空格 :
Lambdas
在 lambda 表达式中,花括号附近需要使用空格,分离函数体中参数和表达式的箭头两侧需要空格,尽可能把表达式写在圆括号外。
在简短非嵌套的 lambda 表达式中,通常建议不要显示声明参数,而使用 it
代替。反之,在嵌套的Lambdas表达式中,总是应该显式声明属性。
类头格式化
仅有几个参数的类可以缩写为一行代码 :
头很长的类需要进行格式化。每一个主构造器参数单独一行并缩进,右括号也需单独一行。如果我们使用继承,父类构造器的调用或者实现的接口列表应和右括号处于同一行 :
Unit
如果一个函数返回 Unit
,应该被省略 :
函数 vs 属性
某些情况下无参函数和只读属性是可以互换的。尽管语义上相似,但是在具体取舍上还是有格式上的规范的。
底层算法更偏向于属性 :
- 不会抛出异常
O(1)
复杂度
- 计算廉价 (或者第一次运行时进行缓存)
- 多次调用返回相同的结果