美文网首页AndroidKotlinAndroid开发
为什么必须试试用 Kotlin 做 Android 开发?

为什么必须试试用 Kotlin 做 Android 开发?

作者: 6db2cd5e23ce | 来源:发表于2016-11-29 15:28 被阅读1006次

    原文地址:Why You Must Try Kotlin For Android Development ?
    转载请带上原文以及本文链接

    Kotlin 是一种可以运行在 JVM 、 Android 和浏览器上的静态型别编程语言 (statically typed programming language)

    为什么要用 Kotlin 做 Android 开发?

    • 简洁:大量减少重复代码。
    • 安全:避免报错,例如:空指针异常。
    • 多用途(Versatile):无论是构建后端应用、Android应用还是运行在浏览器上的前端程序都不在话下。
    • 可互用(Interoperable):可以100%与 Java 协同工作(100% interoperable with Java™)

    来看看细节(Kotlin vs Java)

    • 与 Java 互用 (Interoperable with Java)当你想尝试一种新的语言时,“可互用”能帮上大忙。“可互用”意味着你可以在 Kotlin 里面复用所有 Java 的类,反之亦然。而且 Java 开发者重新学习 Kotlin 比较容易上手。你在 Java 上能做的所有事情,Kotlin 也都能胜任。如果你不清楚一段 Kotlin 代码如何书写,那就先把 Java 代码写一遍然后 Kotlin 插件会自动转换,这样你就可以看到两者有哪些不同,下一次自己再敲一遍也就学会了。
    • 空指针安全 (Null Safety)Kotlin 致力于防止代码中出现空引用错误,避免类似《价值亿万美金的错误》(The Billion Dollar Mistake) 这样的事情发生 。

    许多编程语言(包括 Java)都有访问空对象导致空指针异常的隐患,在 Java 里面一般叫做:NullPointerException,或者缩写为:NPE

    在 Kotlin 里面,会区分哪些可以为空 (nullable references),哪些不可以为空 (non-null references),例如一个String变量不能为空:

    var a: String = “abc”
    a = null //编译报错
    

    如果想允许空引用,你可以用String?:声明一个可以为空的字符串:

    var b: String? = “abc”
    b = null //通过
    

    现在,如果你想通过变量a调用一个方法或者成员属性,那么就没必要再担心发生空指针异常了,所以可以大胆的这样写:

    val l = a.length
    

    如果把变量a换成变量b,那这个操作就是不安全的,编译器会报一个错误:

    val l = b.length // error: variable ‘b’ can be null
    

    但是如果非要用b来做操作呢?这里也有几个办法。

    空判断:
    首先,可以直接做“空判断”,然后对“空”和“非空”分开处理:

    val l = if (b != null) b.length else -1
    

    安全调用:
    上面那种方式太过普通了,这里还有第二种办法,通过安全调用的操作符 (safe call operator)?.”来实现:

    b?.length
    

    这样,如果b不为空则返回length的值,否则返回null

    • 智能类型转换(Smart Casting) :**
    // Java
    if (node instanceOf Leaf) {
      return ((Leaf) node).symbol;
    }
    // kotlin
    if (node is Leaf) {
      return node.symbol; //智能转换, 不需要强转
    }
    if (document is Payable && document.pay()) { //智能转换
      println(“Payable document ${document.title} was payed for.”)
    }
    

    Kotlin 使用跟 Java 一样的“惰性计算 (lazy evaluation)”,也就是说如果document不是Payable类型的,那么&&后面的语句也就不会执行了,所以当执行到document.pay()的时候,Kotlin 很智能的把document转换成Payable来操作。

    • 参数命名(Named Arguments)从代码可读性的角度来说,给参数命名让 Kotlin 变得非常好用(awesome)
    val amit = Developer(“Amit Shekhar”, age = 22, someValue = 10, profile = “Android Developer”)
    //下面这句代码根本看不懂写的是啥……
    myString.transform(true, false, false, true, false)
    //通过写明参数的名字后,下面的代码变得一目了然
    myString.transform(
     toLowerCase = true,
     toUpperCase = false,
     toCamelCase = false,
     ellipse = true, 
     normalizeSpacing = false
    )
    
    • 函数式编程 (Functional Programming)当 Java 从 8.0 版本才引入“函数式编程”这个概念的时候,Kotlin 早已经开始使用了,其中包含了“高阶函数 (higher-order functions)”、“lambda 表达式”、“操作符重载 ( operator overloading)”、“惰性计算 (lazy evaluation)”,还有针对“集合”提供的很多有用的方法。
      lambda 表达式和 Kotlin 库的结合真正让写代码变得更容易了。
    val numbers = arrayListOf(-42, 17, 13, -9, 12)
    val nonNegative = numbers.filter { it >= 0 }
    println(nonNegative)
    
    listOf(1, 2, 3, 4) //用 1,2,3,4 建立一个集合
    .map { it * 10 } // 将集合里的每个数分别 x 10,返回新的值
    .filter { it > 20 } // 筛选出 > 20的值,集合还剩 30,40
    .forEach { print(it) } // 最终打印 30 40
    
    • 简洁代码(Concise Code):**当用 Kotlin 替换 Java 代码时,可以让你项目的代码量大幅减少。
      例如:
    // Java
    Button button = (Button) findViewById(R.id.button); 
    button.setOnClickListener(new View.OnClickListener() { 
     @Override
     public void onClick(View view) {
     /* your code */
     }
    });
    
    // Kotlin
    val button = findViewById(R.id.fab) as Button 
    button.setOnClickListener { view -> /* your code */}
    

    谢谢阅读,转载请带上原文和本文链接。

    相关阅读:
    Kotlin如何成为我们Android开发的主要语言

    相关文章

      网友评论

      本文标题:为什么必须试试用 Kotlin 做 Android 开发?

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