Kotlin for Android 简介

发布于 2024-12-15 18:09:08 字数 5347 浏览 13 评论 0

Kotlin 是众多基于 JVM 的语言之一,它一开始是作为 android 开发中 java 语言的可能的代替者出现的。java 是世界上使用最多的语言之一,而伴随着其他语言的发展使得程序员编程越来越容易,但是 java 并没有尽快地向预期目标发展。

Kotlin 简介

Kotlin 是 JetBrains 创造的基于 JVM 的语言,JetBrains 是 IntelliJ 的缔造团队。
Kotlin 是一个拥有很多函数编程特点的面向对象的编程语言。

为什么要用 Kotlin

我首先声明我并没有使用 Kotlin 很长时间,我几乎是在学习的同时写了这些文章的。我并没有尝试任何其它的替 代语言,例如 Go 和 Scala,所以如果你是真的考虑换一种开发语言的话,我建议你去搜索一下其他人对这些 语言的评价。一个使用 Scala 开发 android 的例子可以在[47deg Github site](http:/
47deg.github.io/translate-bubble-android/ ) 找到。

以下是我选择学习 Kotlin 的原因:

  • 学习曲线相对较快 :以 Scala 作为例子进行比较,我们是向着更简单的方向前进。Kotlin 有更多的限制,但是如果你没有学习过一门现代编程语言的话,Kotlin 更容易学习。
  • 轻量级 :与其他语言相比 Kotlin 的核心库更小。这很重要,因为 android 函数数量限制(函数数量不能大于 64k) 是一个问题,虽
    然有一些选择来解决这个问题,例如 proguard 或 multidexing,但是这些解决方案会加复杂度,并导
    致调试时花费更多的时间。引入 Kotlin 核心库添加了不到 7000 个方法,大致和 support-v4 一样。
  • 高交互性 :Kotlin 和其它 java 库协调使用的特别好,并且交互操作很简单。这是 Kotlin 团队
    在开发新语言是的主要理念之一。他们想在使用 Kotlin 开发时并不用重写之前所有用 java 写的代码,所以,Kotlin 和 java 交互的能力必须非常高。
  • 与 AS 和 Gradle 完美结合 :我们有一个 IDE 的插件和另一个属于 Grade 的插件,因此,用 Kotlin 进行
    android 编程并不困难。

在开始任何争论之前我建议你看一下 Jake Wharton 写的一个有趣的文档 the use of Kotlin for Android development

Kotlin 的优点

1. 可读性更高,更简洁

使用 Kotlin,可以更容易的避免创建模版型代码,因为大多数经典的情景都默认包含在 Kotlin 中。
例如,在 java 中,我们想要创建一个典型的 data class 时需要这样做:

public class Artist {
    private long id;
    private String name;
    private String url;
    private String mbid;
 
    public long getId() {
        return id;
    }
 
    public void setId(long id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getUrl() {
        return url;
    }
 
    public void setUrl(String url) {
        this.url = url;
    }
 
    public String getMbid() {
        return mbid;
    }
 
    public void setMbid(String mbid) {
        this.mbid = mbid;
    }
 
    @Override public String toString() {
        return "Artist{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", url='" + url + '\'' +
                ", mbid='" + mbid + '\'' +
                '}';
    }
}

那么在 Kotlin 需要多少代码呢?仅仅是下面这个简单的数据类:

	data class Artist(
    var id: Long, 
    var name: String, 
    var url: String, 
    var mbid: String)

2. 空指针安全

当我们用 java 开发时,我们的大多数代码是要进行类型检查的,如果我们不想出现 unexpected
NullPointerException
的话,我们就要在运行代码之前持续的检查是否有对象为 null。Kotlin,和其它语
言一样,是空指针安全的,因为我们可以通过安全的调用操作来准确的声明一个 object 可以为 null。

我们可以这样做:

	//This won´t compile. Artist can´t be null
	var notNullArtist: Artist = null
 
	//Artist can be null
	var artist: Artist? = null
 
	// Won´t compile, artist could be null and we need to deal with that
	artist.print()
 
	// Will print only if artist != null
	artist?.print()
 
	// Smart cast. We don´t need to use safe call operator if we previously checked 	nullity
	if (artist != null) {
	    artist.print()
	}
	 
	// Only use it when we are sure it´s not null. Will throw an exception otherwise.
	artist!!.print()
 
	// Use Elvis operator to give an alternative in case the object is null
	val name = artist?.name ?: "empty"

3. 扩展方法

我们可以给任何类添加新方法。这比我们在 project 中使用的工具类可读性更高。例如:我们可以给 Fragment 添加一个新方法来显示 Toast。

fun Fragment.toast(message: CharSequence, duration: Int = Toast.LENGTH_SHORT) {
    Toast.makeText(getActivity(), message, duration).show()
}

我们可以这样使用:

fragment.toast("Hello world!")

4. 支持函数式编程

如果我们可以不用在我们需要的时候每一次都创建一个 listener,就像创建一个 click listener 那样的操作,
而是仅仅定义我们想要做什么?这种想法的确可以实现,它的实现得益于 lambda d 的使用:

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

Kotlin 目前存在的限制

Kotlin 依旧在发展,虽然它相对稳定,并且 final release 版本就很快发布,但是 Kotlin 在进行 android 相关开发的时候还是有些限制的。

  • 交互性与自动代码生成 :一些有名的 android Libraries,例如 Dagger 或 Butterknife,他们依赖于自动
    代码生成,这种情况下如果有名字冲突的话将无法进行代码生成。Kotlin 正在解决这个问题,所以这个问题也许
    会很快解决。无论如何,我将在接下来的文章里阐明,Kotlin 语言的表达能力会让我们觉得不再需要那么多的
    Libraries。
  • 声明自定义 View 比较困难 :Kotlin 类只能声明一个构造函数,然而自定义 View 通常需要三个。如果我
    们使用代码来创建 View 的话可以避免这个问题,但对于使用 XML 文件来声明 View 的话就不能满足需求了。最容易的变通方式是用 java 来声明这些
    自定义 View 的实现类,然后通过 Kotlin 来使用它们。Kotlin 团队许诺将在 M11 release 解决这个问题。
    Update: Kotlin M11 is out and now includes secondary constructors
  • android 下 Junit 测试 :AS 1.1 中介绍的新特性并不适用与 Kotlin。顺便说说,系统测试和 Junit 测试对于纯 Kotlin 项目是完全可用。

结论

对于 android apps 开发,Kotlin 是一个非常有趣的 java 替代者。下一篇文章将会描述如何用 Kotlin 新建一
个 project,和如何更好的适用 Kotlin 来使得 android 开发更加简单。敬请关注!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

就像说晚安

暂无简介

文章
评论
25 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文