Kotlin For Android介绍

作者: liaowenhao | 来源:发表于2017-09-16 15:43 被阅读63次

    发展

    Kotlin完全兼容JDK6,AndroidStudio3.0及IntelliJ等IDE工具提供集成开发环境支持。

    Kotlin可用于多个平台(JVM/Android、JavaScript)。Kotlin标准库提供了所有平台可用的核心API,不同平台相关的扩展(例如JVM的java.io),以及可统一调用但工作方式不同的API(例如JVM和JavaScript的正则表达式)。

    Kotlin语法

    概念

    Kotlin中,任何东西都对象,包括成员方法/属性等。所有类继承AnyAny不同于Java.lang.Object的一点是,除了hashCode(),toString(),equals()方法,Any没有其他成员。

    对象

    Byte(1: 字节)/Short(2)/Int(4)/Float(4)/Long(8)/Double(8)

    === 需要两个对象的值和引用地址完全相同
    == 只需要两个对象的值相同

    NaN : Not a Number

    val(value, immutable),var(varibale, mutable)

    空安全

    避免空指针的黄金准则是,对于可为空的变量,编译器会强制开发者在使用前进行处理。

    相近函数对比

    let,apply,with,run函数对比 参考

    Kotlin相近函数对比
    属性

    四种可见性:private,protected,internal,public. 默认public.

    属性可以引用特定对象的实例方法

    主构造函数跟随在类的声明后,不能包含任何代码。可使用init方法进行初始化。次构造函数使用constructor声明。没有new关键词

    所有类和方法都是final,除非使用open声明。
    子类可以用var属性覆盖父类的一个val属性,但不能用val覆盖var。

    同伴对象和ObJect都可用作static访问。同伴类与类一起使用,一个类中只能有一个同伴对象。

    Interface及Abstract

    Kotlin中的Interface可以实现方法,子类可选择继承此方法。interface的属性不能拥有隐藏属性backing field,不能对属性进行初始化,而抽象类中的属性可以,抽象类可以使用非public修饰符和final成员。总之,虽然kotlin中的Interface更强大了,但是接口出发点是为了定义一个通用的协作方式,而抽象类是定义一个不完整的抽象父类。

    泛型的替代方案

    out实现了泛型的协变,生产者
    in实现了泛型的逆变,消费者
    数组对象是不型变的。

    reified是具体化,作为kotlin的一个方法泛型关键字,它代表你可以在方法体内访问泛型指定的JVM对象。必须以inline内联方式声明这个方法才有效。参考

    Flow控制流

    if是一个符号,可返回一个值。
    when可做符号也可以做语法。

    Exceptions

    Kotlin中所有exceptions继承Throwable,携带message属性并且不需要检查。

    Android使用

    Anko 库提供了UI构造及线程等实用的扩展函数。建议等一两年后,第三方Kotlin库及Android Studio支持性更趋丰富后再转用Kotlin开发。

    Kotlin可完美兼容Android的Unit TestInstrumentation Test

    与Java的区别

    详细区别
    1. 区别于泛型及通配符的out/in关键词
      <? extends>实现了泛型的协变
      <? super>实现了泛型的逆变
    2. 高级的函数编程支持
      不仅支持Java引入的lambda及Stream库,还支持函数类型及函数引用。
    3. 对集合/空安全/POJO的语法糖
      提供全局的空安全的编译检查,避免出现空指针异常。
      可通过data/object/companion object提供POJO对象的不同需求。
    4. 其他功能
      @操作符提供了GOTO语法跳转功能的支持,在循环/嵌套引用中能方便获取目前对象及目前位置。kotlin能更快捷的定义POJO,单例,观察者,懒加载,委托。对于目前流行的对象编程提供语法糖。
    Kotlin特有
    • Lambda 表达式 + 内联函数 = 高性能自定义控制结构
    • 扩展函数
    • 空安全
    • 智能类型转换
    • 字符串模板
    • 属性
    • 主构造函数
    • 一等公民的委托
    • 变量和属性类型的类型推断
    • 单例
    • 声明处型变 & 类型投影
    • 区间表达式
    • 操作符重载
    • 伴生对象
    • 数据类
    • 分离用于只读和可变集合的接口
    • 协程
    Java特有

    Java对-128到127的Integer对象进行缓存,当创建符合此范围的Integer对象时会复用。
    字符串常量池存放的是对象引用,而不是对象。
    Java中,对象都创建在堆内存中。
    Java中,泛型是不型变的

    感想

    一开始觉得官方推荐Kotlin要耗费时间去学,后来就开始喜欢上这颗语法糖。
    突然觉得Java太原始了。kotlin的使用对初学者和老鸟都十分友好。语法的使用不再是程序员的入门门槛,却也是进阶的门槛。对空安全的支持非常到位。

    扩展阅读

    From Java to Kotlin
    Kotlin 资源大全 - 学 Kotlin 看这一篇教程就够了

    相关文章

      网友评论

        本文标题:Kotlin For Android介绍

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