为什么要学习Kotlin

来源:互联网 发布:以太网无法连接到网络 编辑:程序博客网 时间:2024/06/07 10:26

谷歌在2017年的I/O开发者大会上宣布,将Kotlin语言作为Android的一级开发编程语言。Android studio(3.0)也将 提供支持。这个消息一出来,kotlin就火了。看下历史,JetBrains在2010年就推出Kotlin编程语言。kotlin与Java完全互通,这样一来Kotlin可以很好的利用,Java语言建立起来的生态圈。那么我们真的需要学习Koltin吗?首先可以告诉大家Kotlin也是面向JVM的语言,它并灭有提高运行的效率。但是Kotlin具有很多现代语言的特点,代码变得简洁很多,提高了开发的效率。下面介绍下Kotlin开发Android的一些有趣和精彩的地方。只是介绍,不讲语法。

1.告别黄油刀(Butter Knife)

在实际开发安卓App的时候我们首先要定义布局,在布局中我们需要定义我们的控件Button、TextView、ImageView等。定义完布局我们就需要在Activity中去得到这些控件,最原始的方法是通过Activity类自带的findViewById方法。后来我们有了Butter Knife这个库以后,我们可以省去很多重复的模板代码。只需要在我们声明的成员变量上加上注解就可以。当然还需要在onCreate方法中初始化,我们可以把初始化放在BaseActivity中。但是有了kotlin-android-extensions这个插件事情就更简单了,我们只需要配置好这个插件后,在Activity中import这些控件就可以在Activity中直接使用,连变量声明都不需要了。

<?xml version="1.0" encoding="utf-8"?><FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.myfirstkotlinapp.ui.MainActivity">    <android.support.v7.widget.RecyclerView        android:id="@+id/myList"        android:layout_width="match_parent"        android:layout_height="match_parent">    </android.support.v7.widget.RecyclerView></FrameLayout>
import kotlinx.android.synthetic.main.activity_main.*  //这句话就代表引入了所有控件class MainActivity : AppCompatActivity() {    override fun onCreate(savedInstanceState: Bundle?) {        super.onCreate(savedInstanceState)        setContentView(R.layout.activity_main)        // 你可以值解使用RecyclerView控件,变量名字和布局中的名字相同        myList.layoutManager = LinearLayoutManager(this)    }}

2.神奇的扩展方法(Extension functions)

Android的sdk和Java的jdk给我们定义了很多的类,帮助我们更加便捷的开发。但是用我们传统的Java语言,是没有办法为原来的类增加新的方法的。没关系,Kotlin能办到。

package com.example.extensionsimport java.text.DateFormatimport java.util.*fun Long.toDateString(dateFormat: Int = DateFormat.MEDIUM): String {    val df = DateFormat.getDateInstance(dateFormat, Locale.getDefault())    return df.format(this)}

上面的代码我们为Long这个类增加了一个toDateString的方法,参数是dateFormat,并且还可以定义一个默认值DateFormat.MEDIUM。主要是我们在开发的时候用起来会特别的方便。我们可以直接把一个Long类型的时间戳通过这个方法转换成String类型的字符串

3.高阶函数(Higher-Order Functions )

Kotlin还有一个Java不具备的特性,就是给方法传参数的时候,这个参数也可以是个方法。多么神奇。我们写个方法,就是从一个List种取出偶数,组成一个新的List。

我们用Java写:

    public List<Integer> filter(List<Integer> list) {        List<Integer> resultList = new ArrayList<>();        for (int t : list) {            if (t % 2 == 0) {                resultList.add(t);            }        }        return resultList;    }

我们用Kotlin写:

    fun  filter(items: Collection<Int>, f: (Int) -> Boolean): List<Int> {        val filtered = arrayListOf<Int>()        for (item in filtered) {            if (f(item)) {                filtered.add(item)            }        }        return filtered    }

在Kotlin中,方法的参数类型是在:的后面。(Int) -> Boolean这个是上面方法的第二个参数的参数类型。表示这个参数是个方法并且这个方法的传入的是一个Int类型的值,返回值是Boolean类型的值。那么怎么调用这个上面这个方法呢?

val numbers = listOf<Int>(1, 2, 3, 4)// 得到所有偶数组成的Listfilter(numbers, {    it % 2 == 0}) 

在Kotlin中当一个方法的方法参数是最后一个的时候我们还可以写成这样

val numbers = listOf<Int>(1, 2, 3, 4)// 可以把大挂号放外面filter(numbers) {    it % 2 == 0}

如果我们想得到List中的奇数组成的List可以这样,相当简单

val numbers = listOf<Int>(1, 2, 3, 4)filter(numbers) {    it % 2 == 1  // 奇数}

从上面的例子我们可以看出方法参数的厉害和简洁了。

4.治愈空指针异常(Null Safety)

在用Java语言开发Android应用的时候有个很麻烦的事情就是空指针异常。为了保证我们的应用不挂掉,我们需要不停的用if语句去判断一个变量是否为空。

String a  = null;System.out.println(a.length());

在Java中上面的代码一定会报空指针异常,应用挂掉。看看在Kotling是怎么处理这个问题的

val a: String? = nullprintln(a?.length)

上面的代码可以成功的编译,并且在运行的时候不会挂掉,最后打印出null。

5.非常方便的data class

在实际开发的时候,网络请求数据是最常见的。通过http请求服务端返回一串Json数据。我们一般通过Gson这个库,把数据保存到一个Java类中,这个类只做数据的储存,只有setter和getter。老外把这种类叫POJO。在Kotlin中我们可以通过data class来保存数据,相当的简单明了。我们来做个比较

假设我们需要保存一个用户的数据,包括用户的名字、年龄、手机号,看看用Java的实现

public class User {    private String name;    private int age;    private String mobile;    public User(String name, int age, String mobile) {        this.name = name;        this.age = age;        this.mobile = mobile;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    public String getMobile() {        return mobile;    }    public void setMobile(String mobile) {        this.mobile = mobile;    }}

看看Kotlin的实现,自动实现equals和hashCode方法,自动实现getter和setter

data class User(val name: String, val age: Int, val mobile: String)

通过上面的比较,Kotlin的实现是实在是简单很多,让人一目了然。

总结

我就说了5点,你是不是心动了。其实Kotlin还有很多有趣的语法。个人觉得,既然kotlin得到了Goole的支持和认可我觉得还是有必要去学习一下。Kotlin作为一门现代语言,学会了其中的精华,对我们学习其他语言也是有帮助的。kotlin很精彩。

Kotlin简明学习—文章列表

原创粉丝点击