文档结构  
翻译进度:已翻译     翻译赏金:0 元 (?)    ¥ 我要打赏

Kotlin 是一个用于 JVM、Android 以及浏览器平台上的静态类型编程语言。

为什么要用 Kotlin 开发 Android 应用?

  • 简洁 : 可大大的减少编码工作量
  • 安全 : 避免一些诸如空指针异常的问题
  • 功能丰富 : 可构建服务端应用、Android 应用,以前在浏览器上执行的前端代码
  • 互操作性 : 可以 100% 利用已有的 JVM 框架,和 Java 具有 100% 的互操作性

更多细节 ( Kotlin vs Java :

  • 与 Java 的互操作性 : 当你开始尝试一门新的编程语言时,互操作性是一件非常重要的事情。互操作性意味着你可以重用之前开发的任何 Java 类,所有的 Java 代码都可以在 Kotlin 上运行。学习 Kotlin 对一个 Java 开发者来说没有那么难。你在 Java 中能做的任何事情,在 Kotlin 一样可以做。如果你不知道在 Kotlin 中如何做,那就在 Java 里做,然后通过 Kotlin 插件将之转成 Kotlin。确保你知道代码所发生的事情,这样下一步你就可以自己尝试了。
  • 空引用是安全的 : Kotlin 的类型系统旨在从编码一级就消除空引用的危险性,著名的 The Billion Dollar Mistake.
第 1 段(可获 2.69 积分)

多数编程语言(包括 Java 在内)中最常见的缺陷之一就是访问 null 引用的成员,这会导致空引用异常。在 Java 中就是我们常见的 NullPointerException 或者叫 NPE 空指针异常。

而 Kotlin 的类型系统可以区分一个引用是否为 null 引用。例如,一个常规的字符串变量不允许为 null:

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

为了允许为空,你需要将变量定义为允许为空的字符串,写法是 String?:

var b: String? = “abc”
b = null // ok

如果你调用 a 的某个方法或者属性时,可以确保不会出现空指针异常,因此你可以安全的调用:

val l = a.length

但如果你想要访问 b 的同一个属性,这就不是安全的,编译器会报错:

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

但你仍然可以需要访问这个属性,是吗?有一些方法可以让你这么做。

首先在条件语句中检查 null 值:

你必须显式的检查 b 是否为 null,并分别处理两种不同的情况:

第 2 段(可获 2.14 积分)
val l = if (b != null) b.length else -1

安全调用 :

第二个参数是安全调用操作符 (?.) :

b?.length

如果 b 不为 null 的话,这个表达式返回 b 的长度,否则返回 null。

智能转换

// Java
if (node instanceOf Leaf) {
  return ((Leaf) node).symbol;
}
// kotlin
if (node is Leaf) {
  return node.symbol; // Smart casting, no need of casting
}
if (document is Payable && document.pay()) { // Smart casting
  println(“Payable document ${document.title} was payed for.”)
}

Kotlin 使用惰性求值的方式,类似 Java。因此如果 document 不是一个 Payable 对象,那么第二部分将不会在第一时间执行。如果执行说明 Kotlin 知道 document 是一个 Payable 对象,并使用智能的转换。

默认参数 : 默认参数是 Java 语言缺失的特性,但这个特性使用非常广泛,可以让你的代码更加简洁,更富有表现力,可维护性更强,以及更加易读。

class Developer(val name: String,
 val age: Int,
 val someValue: Int = 0,
 val profile: String = “”) {
}
val amit = Developer(“Amit Shekhar”, 22, 10, “Android Developer”)
val anand = Developer(“Anand Gaurav”, 20, 11)
val ravi = Developer(“Ravi Kumar”, 26)
第 3 段(可获 1.23 积分)

命名参数:该特性是为了提升代码的可读性,命名参数让 Kotlin 变得超棒。

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
)

函数式变成: 尽管 Java 已经发展到 Java 8 ,也带来了几个函数式编程的概念。而 Kotlin 对函数式编程的处理是炉火纯青。包括高阶函数、lambda 表达式、操作符重载以及跟集合关联的很多惰性执行方法等。

结合 Lambda 表达式和 Kotlin 库可以让你编码起来更加容易。

val numbers = arrayListOf(-42, 17, 13, -9, 12)
val nonNegative = numbers.filter { it >= 0 }
println(nonNegative)
listOf(1, 2, 3, 4) // list of 1, 2, 3, 4 
.map { it * 10 } // maps to to 10, 20, 30, 40
.filter { it > 20 } // filters out 30, 40
.forEach { print(it) } // prints 30, 40
第 4 段(可获 0.83 积分)

简洁的代码:当你用 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 */}

感谢阅读本文。如果你觉得有用,请在评论里告诉我,因为这对我很重要。

第 5 段(可获 0.61 积分)

文章评论