标签:
关于Kotlin,网上已有一些介绍的文章,包括Antonio Leiva的这组blog翻译稿。不过,我还是想跟进它们、翻译它们,以锻炼自己的英文翻译。各位高手发现问题,请及时“拍砖”。
原文题目:Kotlin for Android (I): Introduction(http://antonioleiva.com/kotlin-for-android-introduction/)
原文作者:Antonio Leiva(http://antonioleiva.com/about/)
原文发布:2015-03-09
Kotlin是众多基于JVM的编程语言之一。在Android开发中,它可能成为Java继承者。Java是世界上最常用的语言之一,当很多其他编程语言为了更加方便程序员使用在不断发展时,Java却没有能够像预期那样及时跟上。
Java的很多不足之处,都在最新的修订版得以修复了,但是Android开发者暂时还使用不到它们。这是使用Kotlin和类似语言的吸引力:在目前的开发环境下使用先进的编程技术。
Kotlin是由JetBrains(https://www.jetbrains.com/)创建的基于JVM的编程语言,IntelliJ也是JetBrains团队的,而Android Studio又是基于IntelliJ而来的。它是包括很多函数式编程思想的面向对象编程语言。
Kotlin正是为弥补Java那些缺憾而生的。它极大简化代码,使我们节省编写大量的样板代码工作。
首先,我申明我使用Kotlin的时间不长,我几乎是一边学习,一边写这些文章。我还没有试过其他语言,如:GO或Scala,所以你如果真的想换其他语言,我建议你先搜索其他人是如何评价你要转换编程语言。可以在Github的47deg项目(http://47deg.github.io/translate-bubble-android/)中找到使用Scala语言开发Android应用的好例子。
这些是我为什么选择Kotlin学习研究的原因:
使用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)
在用Java开发时,大多数代码都是预防性的。为了不遇到非预期的NullPointerException,在使用之前,要不断的检测对象是否为空。与许多其它语言一样,因为需要使用安全调用运算符显式指明对象是否能够为空(null),所以Kotlin是空类型安全的(http://kotlinlang.org/docs/reference/null-safety.html)。
可以这样做:
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 != null 11 artist?.print() 12 13 // Smart cast. We don´t need to use safe call operator if we previously checked nullity 14 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 null 22 val name = artist?.name ?: "empty"
可以为任何类添加新函数。在项目中,替代已有的典型实用程序类可使代码更具可读性。例如,为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!")
如果不想在每次声明点击操作应该做什么时创建一个新listener,可以直接定义想要做什么吗?答案是肯定的。这(包括许多更有趣的功能)都归功与Lambda表达式的运用:
1 view.setOnClickListener({ toast("Hello world!") })
尽管Kotlin十分稳定并且很快(今年夏天)就要发布最终版本,但是它仍然在开发中,用于android应用开发还有一些限制:
更新:现在Kotlin M12引入支持注释处理。
更新:Kotlin M11发布了,并包括辅助构造函数(http://kotlinlang.org/docs/reference/classes.html#constructors)。
更新:Kotlin M12 Gradle插件现在可以用于单元测试了。
对于开发Android APP,Kotlin是令人关注的Java替代者。下篇文章将说明怎样用Kotlin新建一个新项目,以及怎样发挥语言特色,使Android开发更容易。敬请关注!
标签:
原文地址:http://www.cnblogs.com/figozhg/p/4982539.html