Life is great and everything will be ok, Kotlin is here - xiaoniudonghe2015/Android-Java-Code-Style GitHub Wiki

一.Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains开发。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、字符串模板。它与Java高度可互操作,可以同时用在一个项目中。

二.Kotlin特点

1. 简洁,Kotlin 的代码确实比 Java 更加简洁,比如类型推断,省去结尾的分号等等,比最成熟的竞争者Scala还简单,然而这远不能成为我们改用 Kotlin 的原因。

2. 安全,这是 Kotlin 的一个很重要的特性。Kotlin 是空指针安全的,JetBrains 做了一件很聪明的事情,它们将运行时才能空指针的检测提前到了编译时,主要方式是增加了 Any?这种可为空的类型,使用 Kotlin 之后,我们程序的空指针会得到明显的改善。

3. 实用,高效率。Kotlin 的实用具体表现在

①引入object,便于我们更好的应用单例模式;

②引入data class, 避免了我们手写getter/setter/toString等方法;

③引入参数默认值,避免了不必要的方法重载;

④支持扩展方法,让我们可以省去好多不必要的代码;

4. Kotlin引入了 Lambda,Streams API 和函数式编程支持。

①Lambda表达式可以省去了我们创建很多匿名内部类的代码(注由于目前Kotlin基于JVM6,Lambda表达式在字节码阶段依然会翻译成内部类形式)

②Streams API 结合Lambda表达式和方法引用,让我们的代码处理一件事情以描述的形式,而不是命令实现的方式。

③Kotlin支持OOP(面向对象编程)和FP(函数式编程),语言本身并没有限制,给了我们选择的自由,Kotlin对FP的友好支持,便于我们写出更加稳定,易于测试,无副作用的方法和代码

5. 可读性从客观上,Kotlin 语法和特性上让代码更加具有描述性而已。但是不得不指出代码可读性主要依赖编写者的编码素质和能力。

高阶函数和方法扩展这两个特点着实真心受用。方法扩展会让我有一种创造感,这是 Java中的Util方法所无法比拟的。

三.Kotlin 是否会取代 Java

  这个很难说,因为这个世界上并不是一件事物好,就会必然得到广泛应用的。一件事物的推广开来靠的是一群人,但阻力也往往也来自一群人,只不过和前者不是相同人群。   从个人主观来看这个问题,我更加愿意看到这种现象发生。原因并不是因为我更喜欢 Kotlin,而是在于我更愿意看到事物在进步,在变得优秀,所以即便某一天 Kotlin 被更加优秀的语言取代,我也是很欢迎的。

四.例子

简洁性

//variables and constants
var currentVersionCode = 1   //变量当前的版本号,类型Int可以根据值推断出来
var currentVersionName : String = "1.0" //显式标明类型
val APPNAME = "droidyue.com" //常量APPNAME 类型(String)可以根据值推断出来

//methods
fun main(args: Array<String>) {
    println(args)
}

// class
class MainActivity : AppCompatActivity() {
  
}

// data class  自动生成getter,setting,hashcode和equals等方法
data class Book(var name: String, val price: Float, var author: String)

//支持默认参数值,减少方法重载
fun Context.showToast(message: String, duration:Int = Toast.LENGTH_LONG) {
    Toast.makeText(this, message, duration).show()
}

Kotlin支持类型推断,没有Java那样的啰嗦。 另外用var表示变量,val表示常量更加的简洁 方法也很简单,连function都缩写成了fun 类的继承和实现很简单,使用:即可 Kotlin每个句子都不需要加分号(;)

空指针安全 空指针(NullPointerException或NPE)是我们使用Java开发程序中最常见的崩溃了。因为在Java中我们不得不写很多防御性的代码,比如这样

public void test(String string) {
    if (string != null) {
        char[] chars = string.toCharArray();
        if (chars.length > 10) {
            System.out.println(((Character)chars[10]).hashCode());
        }
    }
}

在Kotlin中空指针异常得到了很好的解决。 在类型上的处理,即在类型后面加上?,即表示这个变量或参数以及返回值可以为null,否则不允许为变量参数赋值为null或者返回null 对于一个可能是null的变量或者参数,在调用对象方法或者属性之前,需要加上?,否则编译无法通过。 如下面的代码就是Kotlin实现空指针安全的一个例子,而且相对Java实现而言,简直是一行代码搞定的。

fun testNullSafeOperator(string: String?) {
    System.out.println(string?.toCharArray()?.getOrNull(10)?.hashCode())
}
testNullSafeOperator(null)
testNullSafeOperator("12345678901")
testNullSafeOperator("123")
//result
null
49
null

字符串模板

无论是Java还是Android开发,我们都会用到字符串拼接,比如进行日志输出等等。在Kotlin中,字符串模板是支持的,我们可以很轻松的完成一个字符串数组的组成

val book = Book("Thinking In Java", 59.0f, "Unknown")
val extraValue = "extra"
Log.d("MainActivity", "book.name = ${book.name}; book.price=${book.price};extraValue=$extraValue")

五.为什么会选择 Kotlin,有以下两方面的原因。

①为了逐渐摆脱专利流氓 Oracle。从去年的转向 OpenJDK,到现在的支持 Kotlin 作为官方语言,某种意义是为了摆脱藉由9行代码敲诈获取天价赔偿的Oracle。

②Kotlin 确实以其实用,高效赢得了海外很多公司和开发者的认可,比如 Square 的 Jake 大神一直在推 Kotlin。Kotlin 在国外至少有将近 2 年的应用生产环境的实践(非JetBrains内部实践应用)。在移动开发中,相比 iOS 程序员,Android 程序员总是很幸运,因为我们有很多优秀好用的工具(Android Studio 等),选用 Kotlin,则是 Google 为开发者提供高效的开发工具的一贯作风。

⚠️ **GitHub.com Fallback** ⚠️