当前位置: 首页 > 科技观察

Android开发者自述文件:我为什么要改用Kotlin?

时间:2023-03-12 01:45:33 科技观察

写在上面,作为一个不熬夜的人,一觉醒来发现Kotlin已经成为Android的官方语言,可谓是喜出望外。为了趁热打铁,我决定将原定于本周日发布的文章提前三天发布。希望能及时让大家了解Kotlin。相信很多开发者,尤其是Android开发者,都或多或少听说过Kotlin。当然,没听说过或者不熟悉也没关系。因为这篇文章和博客后面的内容会涉及到很多关于Kotlin的知识分享。在写这篇文章的一个多月前,Flipboard中国的Android项目已经正式采用Kotlin作为项目开发语言,这意味着新增的代码文件将以Kotlin代码格式出现,同时,旧的Java代码也将be会陆续被翻译成Kotlin代码。在使用Kotlin期间,被它的简洁、高效、快捷所震撼,所以有必要写一篇文章来谈谈Kotlin的特点。如果能达到推广Kotlin的效果,我会很欣慰。Kotlin的“履历”来自著名的IDEIntelliJIDEA(AndroidStudio就是基于此开发的)软件开发公司JetBrains(位于东欧的捷克共和国)起源于JetBrains的圣彼得堡团队,名字取自圣彼得堡附近的一个小岛(科特林岛)。基于JVM的静态类型编程语言来自知名工具开发商JetBrains,这决定了Kotlin的基因必须包含实用高效的特性。那么我们来看看Kotlin的特点。当然这也是我转投Kotlin的一个重要原因。语法简单,不冗长Kotlin支持类型推断,不像Java那样冗长。另外,用var表示变量,用val表示常量更简洁。方法也很简单。甚至function也缩写为fun,这增加了一点双关性。类的继承和实现非常简单,使用即可:Kotlin不需要每句话都用分号(;)。空指针安全空指针(NullPointerException或NPE)是我们使用Java开发程序时最常见的崩溃。因为在Java中我们必须写很多这样的防御代码:在Kotlin中空指针异常处理得很好。对类型的处理,即添加?类型后表示变量或参数和返回值可以为null,否则不允许将null赋值给变量参数或返回null。对于可能为null的变量或参数,在调用对象方法或属性之前,需要加上?,否则编译不通过。比如下面的代码就是Kotlin实现空指针安全的一个例子,相对于Java的实现,一行代码就可以搞定。关于空指针安全的原理,可以参考这篇文章学习一些学习Kotlin的方法。支持方法扩展很多时候Framework提供给我们的API往往是比较原子化的,我们在调用的时候需要结合起来,因为会生成一些Util类。一个简单的例子,我们想更快的显示Toast信息,在Java中我们可以做到。但是Kotlin的实现是惊人的。我们只需要重写扩展方法即可。例如,longToast方法被扩展到所有Context对象。如果不去源码,你可能分不清是Framework提供的还是自己扩展的。注意:Kotlin的方法扩展实际上并没有修改对应的类文件,而是由编译器和IDE处理的。使它看起来像我们扩展了方法。Lambda、高阶函数、StreamsAPI和函数式编程支持所谓的Lambda表达式作为匿名函数,这使我们的代码更简单。比如下面的代码就是lambda的应用。所谓高阶函数就是:可以接受函数作为参数,也可以返回函数作为结果。举一个接受函数作为参数的例子。在Android开发中,我们经常使用SharedPreference来存储数据。如果忘记调用apply或commit,则无法应用数据修改。利用Kotlin中高阶函数的功能,我们可以更好的解决这个问题:当然,在上面的例子中,我们同时也利用了方法扩展的特性。Kotlin支持StreamsAPI和方法引用,这使得函数式编程更加方便。比如下面的代码就是我们结合Jsoup抓取一个代理网站的数据。代码更简单,实现起来也更快。字符串模板无论是Java还是Android开发,我们都会用到字符串拼接,比如日志输出等。在Kotlin中,支持字符串模板,我们可以轻松完成字符串数组的组合:与Java的良好交互Kotlin和Java都是基于JVM的编程语言。Kotlin和Java的交互非常好,可以说是天衣无缝。这表现在:Kotlin可以自由引用Java代码,反之亦然。Kotlin可以使用所有现有的Java框架和库。借助IntelliJ插件,可以轻松将Java文件转换为kotlin。Kotlin被广泛使用。Kotlin支持广泛的Android应用程序开发。工具有很多,比如kotterknife(ButterKnifeKotlin版)、RxKotlin、Anko等,当然还有很多已经存在的Java库可以使用。此外,Kotlin还可以编译为Javascript。最近用Kotlin写了一段代码来抓取代理,实现起来非常快。甚至比普通的JavaScript实现更快。在性能方面,Kotlin的执行效率在理论上与Java代码的执行效率是一致的。有时Kotlin可能会显得更高。比如Kotlin提供了方法内联设置,可以设置一些高频方法进行内联操作,减少运行时出栈和保存状态的开销。看完这篇,你想试试Kotlin吗?其简洁的语法、众多特性的集合、高效的实现等在国外早已风靡一时。Pinterest、Square、Flipboard等国外公司已经开始将其应用到生产中。中间。关于转用Kotlin,在我做决定之前(Kotlin还没有上任),我想过选择Kotlin是不是就意味着放弃Java。冷静下来想一想,其实并不是这样,因为Kotlin太接近Java语法了,而Kotlin一直在处理Java相关的东西,所以这个顾虑不是问题。对于个人项目,切换到Kotlin通常不是一个困难的选择。毕竟,Kotlin就是这么优秀的语言。相信很多人还是愿意尝试使用这种事半功倍的语言。更困难的决定是如何让团队转向Kotlin。我个人认为,团队难以转换的原因有很多,比如学习成本、历史包袱等等。但实际上,根源在于思维方式。外国人喜欢用工具来提高开发效率,因为人工成本高。国内球队提高效率的方式通常是增加成员。好在Flipboard美国团队从2015年(可能更早)就开始引入Kotlin,所以中国团队对Kotlin的选择也比较顺利。当然,更重要的是目前团队规模较小,成员们一致认可Kotlin的优势。关于团队转Kotlin的方式,一般来说自上而下的实现是比较可行的。这意味着要么直接技术负责人思想更开放,要么需要有人不断提拔以影响团队。做一个更现实的类比,Java就像一列普通火车,从老家保定到北京西需要将近2个小时甚至更长的时间,而Kotlin则是只要40分钟就能到达高铁。通常人们会选择高铁,因为它节省了时间,提高了体验。这个时间和经验对应的是编程。我觉得应该是高效率、高可读性和可维护性的代码。那么现在有了谷歌的支持,KotlintoAndroid相信在不久的将来会如火如荼。篡改Python的名言“人生苦短,我用Kotlin”,这样一门高效??实用的语言理应被越来越多的团队所接受并应用到开发和生产中。当然,也希望能在国内环境中大放异彩。本文作者为Flipboard中国Android研发工程师段建华。