关闭 x
IT技术网
    技 采 号
    ITJS.cn - 技术改变世界
    • 实用工具
    • 菜鸟教程
    IT采购网 中国存储网 科技号 CIO智库

    IT技术网

    IT采购网
    • 首页
    • 行业资讯
    • 系统运维
      • 操作系统
        • Windows
        • Linux
        • Mac OS
      • 数据库
        • MySQL
        • Oracle
        • SQL Server
      • 网站建设
    • 人工智能
    • 半导体芯片
    • 笔记本电脑
    • 智能手机
    • 智能汽车
    • 编程语言
    IT技术网 - ITJS.CN
    首页 » 安卓开发 »每个Android程序员应该知道的Kotlin

    每个Android程序员应该知道的Kotlin

    2016-01-10 00:00:00 出处:Sunzxyong
    分享

    Android开发者在语言限制方面面临着一个困境。众所周知,目前的Android开发只支持Java 6(语言本身从Java 7开始进行了一些改进),因此我们每天只能使用一种古老的语言来进行开发,这极大地降低了我们的生产力,同时也迫使我们不得不编写大量的样板与脆弱的代码,然而这样的代码是难以阅读和维护的。幸运的是,Android程序是运行在Java虚拟机之上的,因此从技术上来说,可以运行在JVM之上的一切都可用于开发Android应用。现在已经有很多可以生成JVM能够执行的字节码的语言,其中一些语言开始崭露头角并逐步流行起来,Kotlin就是其中的佼佼者。

    何为Kotlin?

    Kotlin是一门运行在JVM之上的语言。它由Jetbrains创建,而Jetbrains则是诸多强大的工具(如知名的java ide IntelliJ IDEA)背后的公司。Kotlin是一门非常简单的语言,其主要目标之一就是提供强大语言的同时又保持简单且精简的语法。其主要特性如下所示:

    轻量级:这一点对于Android来说非常重要。项目所需要的库应该尽可能的小。Android对于方法数量有严格的限制,Kotlin只额外增加了大约6000个方法。 互操作:Kotlin可与Java语言无缝通信。这意味着我们可以在Kotlin代码中使用任何已有的Java库;因此,即便这门语言还很年轻,但却已经可以使用成百上千的库了。除此之外,Kotlin代码还可以为Java代码所用,这意味着我们可以使用这两种语言来构建软件。你可以使用Kotlin开发新特性,同时使用Java实现代码基的其他部分。 强类型:我们很少需要在代码中指定类型,因为编译器可以在绝大多数情况下推断出变量或是函数返回值的类型。这样就能获得两个好处:简洁与安全。 Null安全:Java最大的一个问题就是null。假如没有对变量或是参数进行null判断,那么程序当中就有可能抛出大量的NullPointerException,然而在编码时这些又是难以检测到的。Kotlin使用了显式的null,这会强制我们在必要时进行null检查。

    目前Kotlin的版本是1.0.0 Beta 3,不过正式版很快就会发布。它完全可以用在生产当中,现在就已经有很多公司成功应用上了Kotlin。

    为何说Kotlin非常适合于Android?

    基本上,这是因为Kotlin的所有特性都非常适合于Android生态圈。Kotlin的库非常小,我们在开发过程中不会引入额外的成本。其大小相当于support-v4库,我们在很多项目中所使用的库都比Kotlin大。除此之外,Android Studio(官方的Android IDE)是基于IntelliJ构建的。这意味着我们的IDE对该语言提供了非常棒的支持。我们可以很快就配置好项目,并且使用熟悉的IDE进行开发。我们可以继续使用Gradle以及IDE所提供的各种运行与调试特性。这与使用Java开发应用别无二致。归功于互操作性,我们可以在Kotlin代码中使用Android SDK而不会遇到任何问题。实际上,部分SDK使用起来会变得更加简单,这是因为互操作性是非常智能的,比如说它可以将getters与setters映射到Kotlin属性上,我们也可以以闭包的形式编写监听器。

    如何在Android开发中使用Kotlin?

    过程非常简单,只需按照下面的步骤来即可:

    从IDE plugins中下载Kotlin插件 在模块中创建Kotlin类 使用“Configure Kotlin in Project…” 开始编码

    Kotlin的一些特性

    Kotlin拥有大量非常打动人心的特性,这里无法一一进行介绍,不过我们来看一下其中最为重要的一些。

    Null安全

    如前所述,Kotlin是null安全的。假如一个类型可能为null,那么我们就需要在类型后面加上一个 。这样,每次在使用该类型的变量时,我们都需要进行null检查。比如说,如下代码将无法编译通过:

    var artist: Artist  = null 
    artist.print()

    第2行会显示一个错误,因为没有对变量进行null检查。我们可以这样做:

    if (artist != null) {
         artist.print() 
    }

    这展示了Kotlin另一个出色的特性:智能类型转换。假如检查了变量的类型,那就无需在检查作用域中对其进行类型转换。这样,我们现在就可以在if中将artist作为Artist类型的变量了。这对于其他检查也是适用的。还有一种更简单的方式来检查null,即在调用对象的函数前使用 。甚至还可以通过Elvis运算符 提供另外一种做法:

    val name = artist .name  : ""

    数据类

    在Java中,假如想要创建数据类或是POJO类(只保存了一些状态的类),我们需要创建一个拥有大量字段、getters与setters的类,也许还要提供toString与equals方法:

    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)

    Kotlin使用属性而非字段。基本上,属性就是字段加上其getter与setter。

    互操作

    Kotlin提供了一些非常棒的互操作特性,这对于Android开发帮助非常大。其中之一就是拥有单个方法的接口与lambda表达式之间的映射。这样,下面这个单击监听器:

    view.setOnClickListener(object : View.OnClickListener {
        override fun onClick(v: View) {
            toast("Click") 
        }
     })

    可以写成这样:

    view.setOnClickListener { toast("Click") }

    此外,getters与setters都会自动映射到属性上。这并不会造成性能上的损失,因为字节码实际上只是调用原来的getters与setters。如下代码所示:

    supportActionBar.title = title
    textView.text = title
    contactsList.adapter = ContactsAdapter()

    Lambda表达式

    Lambda表达式会在极大程度上精简代码,不过重要的是借助于Lambda表达式,我们可以做到之前无法实现或是实现起来非常麻烦的事情。借助于Lambda表达式,我们可以以一种更加函数式的方式来思考问题。Lambda表达式其实就是一种指定类型,并且该类型定义了一个函数的方式。比如说,我们可以像下面这样定义一个变量:

    val listener: (View) -> Boolean

    该变量可以声明一个函数,它接收一个view并返回这个函数。我们需要通过闭包的方式来定义函数的行为:

    val listener = { view: View -> view is TextView }

    上面这个函数会接收一个View,假如该view是TextView的实例,那么它就会返回true。由于编译器可以推断出类型,因此我们无需指定。还可以更加明确一些:

    val listener: (View) -> Boolean = { view -> view is TextView }

    借助于Lambda表达式,我们可以抛弃回调接口的使用。只需设置希望后面会被调用的函数即可:

    fun asyncOperation(value: Int, callback: (Boolean) -> Unit) {
        ...
        callback(true) 
    }
    
    asyncOperation(5) { result -> println("result: $result") }

    还有一种更加简洁的方式,假如函数只接收一个参数,那就可以使用保留字it:

    asyncOperation(5) { println("result: $it") }

    Anko

    Anko是Kotlin团队开发的一个库,旨在简化Android开发。其主要目标在于提供一个DSL,使用Kotlin代码来声明视图:

    verticalLayout {
        val name = editText()
        button("Say Hello") {
            onClick { toast("Hello, ${name.text}!") }
        }
    }

    它还提供了其他一些很有用的特性。比如说,导航到其他Activity:

    startActivity
    
     ("id" to res.id, "name" to res.name)

    总结

    如你所见,Kotlin在很多方面都简化了Android的开发工作。它会提升你的生产力,并且可以通过非常不同且更加简单的方式来解决一些常见的问题。

    上一篇返回首页 下一篇

    声明: 此文观点不代表本站立场;转载务必保留本文链接;版权疑问请联系我们。

    别人在看

    正版 Windows 11产品密钥怎么查找/查看?

    还有3个月,微软将停止 Windows 10 的更新

    Windows 10 终止支持后,企业为何要立即升级?

    Windows 10 将于 2025年10 月终止技术支持,建议迁移到 Windows 11

    Windows 12 发布推迟,微软正全力筹备Windows 11 25H2更新

    Linux 退出 mail的命令是什么

    Linux 提醒 No space left on device,但我的空间看起来还有不少空余呢

    hiberfil.sys文件可以删除吗?了解该文件并手把手教你删除C盘的hiberfil.sys文件

    Window 10和 Windows 11哪个好?答案是:看你自己的需求

    盗版软件成公司里的“隐形炸弹”?老板们的“法务噩梦” 有救了!

    IT头条

    公安部:我国在售汽车搭载的“智驾”系统都不具备“自动驾驶”功能

    02:03

    液冷服务器概念股走强,博汇、润泽等液冷概念股票大涨

    01:17

    亚太地区的 AI 驱动型医疗保健:2025 年及以后的下一步是什么?

    16:30

    智能手机市场风云:iPhone领跑销量榜,华为缺席引争议

    15:43

    大数据算法和“老师傅”经验叠加 智慧化收储粮食尽显“科技范”

    15:17

    技术热点

    SQL汉字转换为拼音的函数

    windows 7系统无法运行Photoshop CS3的解决方法

    巧用MySQL加密函数对Web网站敏感数据进行保护

    MySQL基础知识简介

    Windows7和WinXP下如何实现不输密码自动登录系统的设置方法介绍

    windows 7系统ip地址冲突怎么办?windows 7系统IP地址冲突问题的

      友情链接:
    • IT采购网
    • 科技号
    • 中国存储网
    • 存储网
    • 半导体联盟
    • 医疗软件网
    • 软件中国
    • ITbrand
    • 采购中国
    • CIO智库
    • 考研题库
    • 法务网
    • AI工具网
    • 电子芯片网
    • 安全库
    • 隐私保护
    • 版权申明
    • 联系我们
    IT技术网 版权所有 © 2020-2025,京ICP备14047533号-20,Power by OK设计网

    在上方输入关键词后,回车键 开始搜索。Esc键 取消该搜索窗口。