5月18号,goole宣布Kotlin成为官方支持的开发语言以来,Kotlin语言社区,公众号,qq群等全面轰炸,本文是一篇译文,来自国外的一个用户,将给大家介绍,基础语法部分Kotlin和java之间的差异,对于使用java开发android的大牛们来说可以做个基本的比较。
1. Kotlin,do less,get more
Kotlin的一个主要优点是它的简洁。 你用更少的代码获得更多的功能。 而你写的代码越少,你犯的错误就越少。 这很简单。 让我们看看Kotlin的基础知识,从类开始。
上面是一个通常的Java类。 它做的不多。 它只包含一些数据。 但是,当你意识到它给表带来的不足时,看看这段代码有多大是很痛苦的。 为了鼓励你,我们会给你一个等同的类写在Kotlin。
是的,你会为你的数据类自动获取需要的getters,setters,e quals(),hashcode(),toString()和copy()函数! 当然,你可以轻松地重写这些函数,但在大多数情况下,只需声明类及其属性就足够了。
这正是我们的意思,当我们说Kotlin简洁。
2. avoid NullPointerException
现在我们想提醒你在许多编程语言中最大的痛苦 - 空指针异常。 我们几乎不能想象自从托尼·霍尔在1965年发明它之后,有多少开发者遭受了空指针,同时试图使事情更简单一些。
可悲的是,我们不能及时回来,防止Tony犯这个错误。 但是使用Kotlin,我们现在可以轻松地转义NullPointerException。
如果变量是可空的,编译器将不允许你访问它没有适当的检查。 Kotlin强迫你使用? 运算符。 这可以防止应用程序自动崩溃。
它如何在引擎盖下工作? 让我们回顾一下生成的字节码。
正如你所看到的,我们在这里有相同的空检查。 JetBrains的开发人员(创建Kotlin)知道每次检查我们的变量是避免NullPointerException的唯一方法。 但他们也知道Android开发人员不想在他们的项目中处理NullPointerException。 他们可能想:“为什么不自动生成这个检查如果变量是可空的?
JetBrains的开发人员只是这样,让我们的生活更容易了!
3. cast off utils(摆脱工具类)
让我们来讨论一下有关使用util类的丑陋事情。 你有没有一个项目没有他们? 我们几乎不记得这一切。 Kotlin有一个聪明的解决方案 - 扩展功能 - 帮助你摆脱所有的util类一劳永逸。
扩展函数几乎是一个通常的Kotlin函数。 但是当你声明它,你需要指定的实例将具有扩展功能的类。
注意‘this‘,我们作为参数传递给makeText()方法? 它不是类的一个实例,我们声明这个函数,而是一个Context实例。 现在你可以直接从你的Activity或任何其他Context实例调用这个函数。 例如:
你应该记住,扩展函数不以任何方式修改它扩展的类。 那么它如何工作而不改变原来的类? 让我们再次看到字节码。
哈! 您的函数隐式接收它作为第一个参数扩展的类的实例。 因此,在字节码中,对函数体中“this”的任何访问都将替换为对第一个参数的访问。 没有魔法真的。 您可以在项目的任何位置使用此函数。
时间删除你的util包!
4. 你可以忘记视图绑定
你还记得findViewById()method()吗? 我们相信你不喜欢它。 我们也不是。 此外,我们不想为我们需要访问的每个视图声明变量和Butterknife注释。
你可以忘记与Kotlin Android Extensions的视图绑定。 不再需要创建变量和绑定视图。 您可以使用在xml布局中声明的标识符直接访问您的视图。
这太简单了,不是吗?
基本上,findViewById()方法仍在使用中。 但是没有必要自己写。 Kotlin会为你做。
当您使用Android扩展时,findCachedViewById()函数和HashMap实例将会自动生成。 每次通过其标识符访问您的视图将被一个新的函数调用替换。 如果是第一次访问视图,此函数将调用通常的findViewById()函数,并将接收的视图添加到HashMap中,以便在下次访问视图时从中检索视图。
5. 你可以更容易地使用集合
让我们谈谈Kotlin的集合。 因为我们经常需要使用数据模型集合执行困难的操作。 例如,我们可能有一个学生名单,我们需要从中检索三个A级成绩的学生和两个B成绩的学生。
看看Kotlin的解决方案:
下面是我们如何解决Java中的同样的问题:
这只是一个小例子,说明如何在Kotlin和Java中使用集合,但你可以看到差别! 你能想象如果我们处理一个大项目的集合,Kotlin会有什么区别吗?
译者序:Kotlin相对于java的最大的优势,就是简洁,但是java9出来以后,一些繁琐的问题应该会得到一定的解决,同时如果现阶段使用Kotlin去开发android,常用的框架等等就不能使用了,但是学习Kotlin还是有必要的,Kotlin的语言风格更现代化,语法直接继承ActionScript,以现代化的风格,解决Java多年的陈旧问题,省去了使用各类生态工具的麻烦,将主流编程语言向前推动了一步,不再固守于C时代的语法形式。随着Kotlin的不断完善将来会成为和java相媲美的优秀的android开发语言。