博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用Kotlin开发Android应用(I):介绍
阅读量:5032 次
发布时间:2019-06-12

本文共 4364 字,大约阅读时间需要 14 分钟。

关于Kotlin,网上已有一些介绍的文章,包括Antonio Leiva的这组blog翻译稿。不过,我还是想跟进它们、翻译它们,以锻炼自己的英文翻译。各位高手发现问题,请及时“拍砖”。

 

原文题目:Kotlin for Android (I): Introduction(

原文作者:Antonio Leiva()

原文发布:2015-03-09

 

 

Kotlin是众多基于JVM的编程语言之一。在Android开发中,它可能成为Java继承者。Java是世界上最常用的语言之一,当很多其他编程语言为了更加方便程序员使用在不断发展时,Java却没有能够像预期那样及时跟上。

 

Java的很多不足之处,都在最新的修订版得以修复了,但是Android开发者暂时还使用不到它们。这是使用Kotlin和类似语言的吸引力:在目前的开发环境下使用先进的编程技术。

 

Kotlin是什么?

 

Kotlin是由JetBrains()创建的基于JVM的编程语言,IntelliJ也是JetBrains团队的,而Android Studio又是基于IntelliJ而来的。它是包括很多函数式编程思想的面向对象编程语言

 

Kotlin正是为弥补Java那些缺憾而生的。它极大简化代码,使我们节省编写大量的样板代码工作。

 

为什么要使用Kotlin?

 

首先,我申明我使用Kotlin的时间不长,我几乎是一边学习,一边写这些文章。我还没有试过其他语言,如:GO或Scala,所以你如果真的想换其他语言,我建议你先搜索其他人是如何评价你要转换编程语言。可以在Github的47deg项目()中找到使用Scala语言开发Android应用的好例子。

 

这些是我为什么选择Kotlin学习研究的原因:

  • 相对快速地学习曲线(路径):与Scala实例相比,我们进入更简洁领域。Kotlin虽有很多限制,但是即使你之前从未使用过现代语言,从它起步也很容易。
  • 轻量级:Kotlin代码库比其他语言的都小。这点很重要。因为Android方法的限制总是一个问题,尽管有其它解决方案(如:proguard或multidexing),但是所有这些解决方案都很复杂,在调试时很费时。Kotlin增加的方法少于7000个,与support-v4差不多。
  • 可互操作性高:它能够很好地与其它Java代码库一起运行,而且互操作非常简单。这是Kotlin团队开发新语言时牢记的主要观点之一。他们希望用它来继续开发目前用Java开发的项目,而不需要重写整个代码。所以Kotlin需要与Java代码有极佳地可互操作性。
  • 完美地与Android Studio和Gradle集成:我们有IDE插件和Gradle插件,这样用Kotlin开发Android项目没有困难(我将在下一篇文章中讨论)。
  • 在做决定之前,我建议先阅读Jake Wharton所著《使用Kotlin进行android开发》()文章。这是一篇令人关注的文章。

 

从Kotlin中我们得到什么?

 

1、表达式

 

使用Kotlin,由于编程语言的默认值已经覆盖多数典型的情况,所以可以容易的避免编写样板代码。

 

例如,在Java中,如果要创建一个典型的数据类,就需要写(或至少产生)这样代码:

1 public class Artist { 2     private long id; 3     private String name; 4     private String url; 5     private String mbid; 6   7     public long getId() { 8         return id; 9     }10  11     public void setId(long id) {12         this.id = id;13     }14  15     public String getName() {16         return name;17     }18  19     public void setName(String name) {20         this.name = name;21     }22  23     public String getUrl() {24         return url;25     }26  27     public void setUrl(String url) {28         this.url = url;29     }30  31     public String getMbid() {32         return mbid;33     }34  35     public void setMbid(String mbid) {36         this.mbid = mbid;37     }38  39     @Override public String toString() {40         return "Artist{" +41                 "id=" + id +42                 ", name='" + name + '\'' +43                 ", url='" + url + '\'' +44                 ", mbid='" + mbid + '\'' +45                 '}';46     }47 }

 

用Kotlin需要多少代码?数据类就这么简单:

1 data class Artist(2     var id: Long, 3     var name: String, 4     var url: String, 5     var mbid: String)

 

2、空类型安全

 

在用Java开发时,大多数代码都是预防性的。为了不遇到非预期的NullPointerException,在使用之前,要不断的检测对象是否为空。与许多其它语言一样,因为需要使用安全调用运算符显式指明对象是否能够为空(null),所以Kotlin是空类型安全的()。

 

可以这样做:

1 //This won´t compile. Artist can´t be null 2 var notNullArtist: Artist = null 3  4 //Artist can be null 5 var artist: Artist? = null 6  7 // Won´t compile, artist could be null and we need to deal with that 8 artist.print() 9 10 // Will print only if artist != null11 artist?.print()12 13 // Smart cast. We don´t need to use safe call operator if we previously checked nullity14 if (artist != null) {15     artist.print()16 }17 18 // Only use it when we are sure it´s not null. Will throw an exception otherwise.19 artist!!.print()20 21 // Use Elvis operator to give an alternative in case the object is null22 val name = artist?.name ?: "empty"

 

3、扩展函数

 

可以为任何类添加新函数。在项目中,替代已有的典型实用程序类可使代码更具可读性。例如,为fragment添加新函数,用于显示toast:

 

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

 

现在可以这样做:

 

1 fragment.toast("Hello world!")

 

4、函数式支持(Lambdas)

 

如果不想在每次声明点击操作应该做什么时创建一个新listener,可以直接定义想要做什么吗?答案是肯定的。这(包括许多更有趣的功能)都归功与Lambda表达式的运用:

 

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

 

目前的限制

 

尽管Kotlin十分稳定并且很快(今年夏天)就要发布最终版本,但是它仍然在开发中,用于android应用开发还有一些限制:

 

  • 与autogenerated code的互操作性:有些知名的Android库,如:Dagger或Butterknife,它们依赖autogenerated code,由于有些命名不兼容,而不能工作。Kotlin团队在处理此问题,有一天会解决的(KT-6444:)。不管怎样,如我在下一篇文章中说明的,语言表达能力可使我们认为不需要那些库。

更新:现在Kotlin M12引入支持注释处理。

  • 自定义视图声明方法不够简单:Kotlin类仅能声明一个构造函数,而自定义视图通常需要三个。如果使用类编程方式,这不是一个问题,但是XML用法就不够了。最简易的变通方式是在Java中声明这些类,而后在Kotlin中使用它们。Kotlin团队承诺在M11版本中解决()。

更新:Kotlin M11发布了,并包括辅助构造函数()。

  • Android项目的JUnit测试:在Kotlin中,Android Studio 1.1的新增特性还可能使用。顺便说一下,在纯Kotlin项目中,Instrumentation测试和JUnit测试是全功能的。

更新:Kotlin M12 Gradle插件现在可以用于单元测试了

 

总结

 

对于开发Android APP,Kotlin是令人关注的Java替代者。下篇文章将说明怎样用Kotlin新建一个新项目,以及怎样发挥语言特色,使Android开发更容易。敬请关注!

 

转载于:https://www.cnblogs.com/figozhg/p/4982539.html

你可能感兴趣的文章
【AHOI2013复仇】从一道题来看DFS及其优化的一般步骤和数组分层问题【转】
查看>>
less 分页显示文件内容
查看>>
如何对数据按某列进行分层处理
查看>>
[Qt] this application failed to start because it could not find or load the Qt platform plugin
查看>>
Git Submodule管理项目子模块
查看>>
学会和同事相处的30原则
查看>>
文件操作
查看>>
jquery基本选择器
查看>>
hdu 1010 dfs搜索
查看>>
搭建wamp环境,数据库基础知识
查看>>
android中DatePicker和TimePicker的使用
查看>>
SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
查看>>
Android中获取应用程序(包)的大小-----PackageManager的使用(二)
查看>>
Codeforces Gym 100513M M. Variable Shadowing 暴力
查看>>
浅谈 Mybatis中的 ${ } 和 #{ }的区别
查看>>
CNN 笔记
查看>>
版本更新
查看>>
SQL 单引号转义
查看>>
实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
查看>>
PHP socket客户端长连接
查看>>