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高度可互操作,可以同时用在一个项目中。
2. 安全,这是 Kotlin 的一个很重要的特性。Kotlin 是空指针安全的,JetBrains 做了一件很聪明的事情,它们将运行时才能空指针的检测提前到了编译时,主要方式是增加了 Any?这种可为空的类型,使用 Kotlin 之后,我们程序的空指针会得到明显的改善。
①引入object,便于我们更好的应用单例模式;
②引入data class, 避免了我们手写getter/setter/toString等方法;
③引入参数默认值,避免了不必要的方法重载;
④支持扩展方法,让我们可以省去好多不必要的代码;
①Lambda表达式可以省去了我们创建很多匿名内部类的代码(注由于目前Kotlin基于JVM6,Lambda表达式在字节码阶段依然会翻译成内部类形式)
②Streams API 结合Lambda表达式和方法引用,让我们的代码处理一件事情以描述的形式,而不是命令实现的方式。
③Kotlin支持OOP(面向对象编程)和FP(函数式编程),语言本身并没有限制,给了我们选择的自由,Kotlin对FP的友好支持,便于我们写出更加稳定,易于测试,无副作用的方法和代码
高阶函数和方法扩展这两个特点着实真心受用。方法扩展会让我有一种创造感,这是 Java中的Util方法所无法比拟的。
这个很难说,因为这个世界上并不是一件事物好,就会必然得到广泛应用的。一件事物的推广开来靠的是一群人,但阻力也往往也来自一群人,只不过和前者不是相同人群。 从个人主观来看这个问题,我更加愿意看到这种现象发生。原因并不是因为我更喜欢 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")①为了逐渐摆脱专利流氓 Oracle。从去年的转向 OpenJDK,到现在的支持 Kotlin 作为官方语言,某种意义是为了摆脱藉由9行代码敲诈获取天价赔偿的Oracle。
②Kotlin 确实以其实用,高效赢得了海外很多公司和开发者的认可,比如 Square 的 Jake 大神一直在推 Kotlin。Kotlin 在国外至少有将近 2 年的应用生产环境的实践(非JetBrains内部实践应用)。在移动开发中,相比 iOS 程序员,Android 程序员总是很幸运,因为我们有很多优秀好用的工具(Android Studio 等),选用 Kotlin,则是 Google 为开发者提供高效的开发工具的一贯作风。