AndroidKotlinAndroid开发

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

2016-11-29  本文已影响1006人  6db2cd5e23ce

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

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

为什么要用 Kotlin 做 Android 开发?

来看看细节(Kotlin vs Java)

许多编程语言(包括 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

// 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来操作。

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
)
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
// 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开发的主要语言

上一篇下一篇

猜你喜欢

热点阅读