β

Kotlin for Android (Ⅰ)

Zeatual 11 阅读

几年前,Android开发者还总是面临着诸多问题,比如难用的开发工具、难以统一的UI、以及冗长的java代码等等。而就在去年,随着全新的设计语言 Material Design 的推出和AndroidStudio 1.0正式版的发布,Android开发似乎终于迎来了质变。广大开发者的关注点自然也聚焦到了开发语言上。

这篇文章想要说的是众多可以用来开发Android APP语言中的一种,叫做 Kotlin 。Kotlin是Jetbrains公司起初用于内部开发的而发起的一个开源项目,Kotlin名字的由来也正是这个开发小组的所在地,位于圣皮尔伯格附近一个小岛的名字。Kotlin也是基于JVM的,要介绍Kotlin的原因是因为它与Java具有很高的互通性和IDE对其良好的支持,还有当然也是最重要的,它相对于java作为语言本身的优越性。

基本语法

Kotlin具有丰富的特性, 官方文档 有详尽的介绍和高阶应用,作为快速介绍我只挑出一些自觉比较有趣的地方。

在Kotlin中,类似于Swift的可选类型,程序员的好朋友空指针异常(NPE)会在编译时检查。例如:

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

var b: String? = null // 编译通过
b = "Hello Kotlin"
b.length // 编译报错

if (b != null) {
    b.length // 编译通过
}

// ?:(Elvis 操作符) 当操作符左面有可能为空时使用,若为空返回右面的值
val len = b?.length ?: -1

val len = x!!.length // !!强制认为不为null,慎用

在Kotlin中,可以方便的扩展已有类中的方法。这不仅可以扩展Kotlin类的方法,由于良好的互通性,也可以用于扩展已有Java类中的方法。比如:

public TextView.getString() : String {
    return this.getText().toString();
}

var text: String = textView.getString();

有了这样的途径,我们就可以扩展很多实际业务需要而Android API中用起来并不是很方便的方法。这样一来,就可以避免创建一些类似于StringUtil这样可以提供静态方法的工具类。

无论是采用MVC还是MVP架构,通常我们都要创建很多数据模型。在Kotlin中,class可以添加data前缀修饰,这样以来,编译器会自动为此类创建getter/setter,toString,hashCode,equals,copy方法,也就是说代码会大大的简化,如:

// java
public class Person {
    private String name;
    private int age;
 
    public String getName() {
        return name;
    }

    public void setName(String name) {
    	this.name = name;
    }

    public int getAge() {
        return id;
    }
 
    public void setAge(int age) {
        this.age = age;
    }

    @Override 
    public String toString() {
        return "Person{name=\'" + name + "\'" +
                ", age=\'" + age + "\'}";
    }
}

// kotlin
data class Person(var name: String, var age: Int)

Lambda表达式相信大家都不陌生,Java8中也引入对Lambda表达式的支持。用最常见的OnClickListener举例:

view.setOnClickListener({ println("Hello world!") })

这里是关于一些我认为Kotlin语法中值得一提的亮点,没有单独列出来,在这里统一作简要说明:

fun cases(obj: Any): String = when (obj) {
          -> "One"
    "Hello"    -> "Greeting"
    is Long    -> "Long"
    !is String -> "Not a string"
    else       -> "Unknown"
}

上面这段代码声明并定义了一个函数,相信一看就明白函数的功能,有几点值得我们注意:

  1. cases是函数名,括号中的obj是参数名,Any类似于java中的Object是参数类型,而String对应函数的返回值类型
  2. when表达式:类似于switch/case语句,但相比之下要强大的多,条件不限制类型
  3. “is”类似于java中的“instance of”用于判断类型,“!”操作符取非
  4. 我们注意到表达式可以直接作为函数的返回值

关于循环在Kotlin中也得到了简化:

for (i in 1..5) {
    println("I'm No.${i}")
}

“..”用于范围指定,同时可以注意到在字符串中嵌入变量可以使用“${}”引入。

Kotlin语法的好处和便捷的用法远远不止以上所提及的这几点,学习语法再次强烈推荐 官方文档

Kotlin for Android (Ⅰ) was originally published by Zeatual at Zeatual on May 12, 2015.

作者:Zeatual
A beautiful theme.
原文地址:Kotlin for Android (Ⅰ), 感谢原作者分享。

发表评论