用 Kotlin 写 Android 2—语言基础

从 Java Bean 样式的类定义说起,Kotlin 省去了 set, get 方法的显示实现,所以相比 Java ,Kotlin 的类会简洁很多。

class Student(val name: String) //像这样就是一个类定义
//在 Kotlin 里默认访问权限时 public
//而像这种只有属性,没有其他方法操作的类就叫 值对象 应该是等同于 Java Bean 

变量

在 Kotlin 里,变量声明有两点不同,

  1. 不用显示定义变量类型。
    变量的类型会根据赋值时的类型决定。(像 python)
  2. 需要用关键字 val 和 var 修饰。
    val 用来修饰不可变量,类似 Java 的 final,var 用来修饰可变量,就是可以多次做赋值操作。但是需要注意一点,多次赋值的类型要一致,不能这次赋值 Int,下次有赋值 String。

所以就像上面的 Student 类一样,声明了一个不可变的 name 变量。而对于不可变量,Kotlin 只提供 get 方法,对于可变量,才会有 get 和 set 方法。

智能转换

在 Java 里经常会用到类型判断 instanceof 操作,并且一般满足条件后会进行强制类型转换。对应到 Kotlin 里就会简单些,首先用 is 代替了 instanceof,其次,满足类型后,编译器会自动帮我们转换,也就不用显示的强制转换了——这就是只能转换。

不过智能转换是有前提条件的,

  1. 要有 is 判断,确保满足某个类型。
  2. 进行转换的属性(属性就类似于前面 Student 类的 name 变量)必须由 val 修饰,且没有自定义 get 方法。

如果没法智能转换,不代表不能转换了,在确保正确的情况下,还可以用 as 进行强制转换。

函数

函数,方法一个意思,在 Kotlin 里,函数的声明像这样,

//关键字 fun 用来表示函数
//入参的声明和类的属性声明类似,只是少了变量修饰符
//函数返回类型不和 Java 一样放在前面,而是放在后面,用 : 隔开
private fun read(book: String): Boolean {
    //函数体
}

除此之外,有个概念叫 表达式体 意思就是整个函数返回的是个表达式。这东西主要是可以进一步对函数的写法进行简化,我觉得实际项目里,用的不多,可作为一种代码优化,让人看了档次高点的感觉。

条件控制语句

Kotlin 里也有 if else 表达,区别在于,这个 if else 是个表达式,可以理解为具有返回值。同样的,when 也是。

when 是用来取代 Java 中的 switch 的,和 switch 有两点不同,

  1. 支持任何对象作为条件
  2. 如果没有条件参数,可以用布尔表达式做条件控制

这么来看,when 比 switch 还好用,建议超过两种及以上情况的可以用 when 试试。

另外,前面说 if - else 以及 when 是表达式,具有返回值。那我们像平常 Java 里那样用可以吗?可以,只是这样表现不出其特性。在有些时候,利用这些特性,就能体现出我们编程思想的转变,不然代码真的只是换种写法而已。

循环语句

Kotlin 的 while 和 do-while 循环和 Java 几乎无差。

变动大的是 for 循环,没有了常规写法,foreach 形式也变形了,增加了一个区间概念,例如

//像这样表示从 0 开始遍历到 10 为止
for(i in 0 .. 10) {
    //循环体
}

像上面这样的写法是 Kotlin 里的 for 循环,相关的语法还有

  • in 关键字表示在某个区间,in 还可以用来做判断,例如 i in 0 .. 9 成立的话就会返回 true,否则 false
  • .. 表示闭区间递增
  • until 表示左闭右开区间递增
  • downTo 表示闭区间递减
  • step 表示步长,例如 Java 常规 for 循环会有 i++ 或者 i += 2 这种,step 就是这里的 1 或 2 概念

和开发相关

最后我觉得有两个是个实际开发相关的点,

  • 字符串模板
    ${} 用这样的形式可以在一个字符串里拼上表达式或者变量(如果仅仅一个变量,可以用简化版,去掉花括号),比如我们常写的给 TextView 文本赋值操作,
tvName.text = "我是个菜鸟, ${s.name}"
  • Kotlin 文件
    这点说的是,在工程里用 Kotlin 新建类的时候,你会发现有两个选项,一个是 Kotlin Class,一个是 Kotlin File。如果说像写 Java 那样的话,就是一个 Kotlin Class。但如果将好几个类,或者有类也有接口等平级的放在一起,那原本是 Kotlin Class 的文件就会变成 Kotlin File,但是却不影响结果。
    这样做有啥好处呢?我觉得这样增加了原本像 Java 这样管理包和类文件的灵活度,Kotlin File 就类似于一个包等级了。

以上内容来自对「Kotlin 实战」的阅读和整理。

你可能感兴趣的:(用 Kotlin 写 Android 2—语言基础)