美文网首页
用 Kotlin 写 Android 2—语言基础

用 Kotlin 写 Android 2—语言基础

作者: jkwen | 来源:发表于2021-04-07 07:30 被阅读0次

    从 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—语言基础

          本文链接:https://www.haomeiwen.com/subject/ktiekltx.html