10 月 29 日消息,Facebook 的母公司 meta 透露其开发 Android 应用使用的语言从 Java 迁移到了 Kotlin,这是一种更年轻的编程语言,也依赖于 Java 虚拟机(JVM)。
Kotlin 由软件工具制造商 JetBrains 创建,于 2011 年首次亮相,2016 年推出了 1.0 版本。次年,Kotlin 被谷歌采纳为安卓开发的第一类(支持)语言,并被置于自己的基金会管理之下,由 JetBrains 和谷歌资助。
在这之前,大多数安卓应用都是用 Java 编写的。2019 年 5 月,在其开发者大会上,谷歌开始鼓励安卓开发者青睐 Kotlin 而不是 Java。当年年底,谷歌表示,在排名前 1000 位的安卓应用中,有 60% 包含 Kotlin 代码。
IT之家了解到,谷歌推荐使用 Kotlin 的理由是,它更简洁、更安全,支持结构化并发,使异步代码更容易,并且可以与 Java 互操作。不过这可能也与 Java 管理人甲骨文有关,甲骨文曾花十多年时间就 Android 中使用的 Java API 向谷歌提出侵权索赔(最终失败)。
meta 似乎也对 Kotlin 感兴趣,Facebook 软件工程师 Omer Strulovich 称,他们已经在用 Kotlin 替换其几个流行的 Android 应用中的 Java 代码,这些应用包括 Facebook、Instagram、Messenger、Portal 和 Quest。
Strulovich 说:“Kotlin 被普遍认为是一种比 Java 更好的语言,在每年的 Stack Overflow 开发者调查中,Kotlin 的好评率高于 Java,”他指出,Kotlin 已经成为 Android 开发的流行语言,“因此,我们将 meta 的 Android 开发转向 Kotlin 是合理的。”
但是,除了在安卓生态系统中的受欢迎程度,Strulovich 承认,在更广泛的市场中,其流行度仍然远逊于 Java,Java 是世界第二大或第三大流行的语言。
Kotlin 相对于 Java 的优势包括:内置为空性(nullability)处理,支持内联函数和 lambda 表达式,代码更短,能定义 DSL(Domain-specific language)。缺点是需要在很长时间内面对混合代码库,更难维护,而且 Kotlin 存在的时间比 Java 短,拥有一套不太成熟的工具。
Strulovich 说:“今天,我们的 Facebook、Messenger 和 Instagram 的安卓应用都有超过 100 万行的 Kotlin 代码,而且转换率还在增加。我们的安卓代码库总共有超过 1000 万行的 Kotlin 代码。”
Strulovich 没有说 meta 是什么时候开始这种转变的,也没有说其 Android 应用代码的转换比例是多少。
Strulovich 还称:“平均而言,我们已经看到这次迁移的代码行数减少了 11%。并且没有出现性能倒退,所以至少转换后的应用程序保持了它们原有的性能。”
Strulovich 说,meta 的迁移正在进行,并在加速,但他同时表示:“Kotlin 仍然缺乏一些我们在与 Java 合作中已经习惯的工具和优化。但我们正在努力缩小这些差距。随着我们取得的进展和这些工具和库的成熟,我们也将努力把它们放回给社区。”
kotlin和java区别是什么?
kotlin能够用更短的代码实现更多的功能,这是java无法比拟的。kotlin特有的扩展属性,不再需要java工具类,对开发更加友好。
java中的bean类总是需要使用插件生成settergetter方法。
开放源码
TheIntelliJKotlin插件扩展了Java编译器使得Kotlin代码能够得以编写、编译和调试。除此之外,关于基本的Java集合,已经有编写好的帮助函数,可以更顺畅地衔接将在Java8中出现的集合扩展。有两篇文章对Kotlin与Java以及Kotlin与Scala分别进行了比较,对各自特性和异同进行了对比。
其基础编译器可以被独立出来并嵌入到Maven、Ant或Gradle工具链中。这使得在IDE中开发的代码能够利用已有的机制来构建,从而尽可能地减少了在新环境中使用所受的干预,哪怕与那些没有安装Kotlin插件的开发人员一起合作项目也没有问题。
即便Scala可能还是更为强大些,Kotlin还是尝试着提供比Java更好的函数、模式匹配、空指针预防和泛型。
Kotlin会替代java吗?
下面来讲一下Kotlin和Java相比的优势是什么?
更简洁:这是它重要的优点之一,可以比Java编写少得多的代码。
更安全:Kotlin是空安全的,它在编译期间就会处理各种为null的情况,无需像java一样添加很多的判空代码,节约很多调试空
指针异常的时间,很大程度上避免出现NullPointException。
易扩展:扩展函数意味着我们不仅可以扩展我们原有写好的类,还可以扩展系统级的类,非常灵活,另外如果在类里编写扩展函数,那么只对当前类生效。
函数式:Kotlin使用了很多函数式编程的概念,比如用到了lambda表达式来更方便地解决问题。
Kotlin Android Extensions:再也不用编写烦人的findViewById()了,如果你集成了ButterKnife,是时候删除对它的依赖了,
Kotlin支持了对于View以id形式访问。
不用写分号,就像你看到的上述代码一样,对于很多写过脚本语言的童鞋来说,不要写分号这一点真是节省了很多时间,对于一
天写几百行几千行甚至上万行代码的童鞋们来说,相当于省了多少个分号.
到这里有的同学想要说了,你说的这些好处确实不错,但是我之前的项目全是用java语言来写的,难不成让我推倒重来过?别急
,最后我要说的一个最大的优势就是
与Java语言可混合编程,也就是说我们可以继续使用原来所有用Java写的代码和库,因为两个语言之间高度互操作,想尝试的童
鞋们建议可以从新的小功能小模块入手,对这些模块使用Kotlin代码进行编写,原有的稳定模块之后再逐步重构。
对初学者友好,kotlin对java语言转用kotlin提供了很多便利,对于初学者来说免去很多不必要的烦恼。最贴心的是Kotlin插件
支持一键由Java转Kotlin,为你之后想要重构提供了很大的便利性。希望能帮到你,优“”就“”业“”野“”鸡“”希望你能明白
Android 开发有哪些新技术出现
1、开发工具
Android Studio: Google 官方放弃 Eclipse 和 Android Studio 普及。AS 虽然不算新,但是对 Android Studio 这个软件的更新速度快的惊人,有大量的新功能发布。例如支持很多注解代码提示注解、Live code template、支持自动生成 Parcelable 实现等等,作为开发者,持续关注这个更新列表 Recent Changes,一定会让写代码的生活更加美好。
2、编程“语言”
Kotlin:作为 Android 领域的 Swift,绝对如沐新风。抛弃沉重的 Java 语法,Kotlin 融入了很多现代编程语言的思想,作为开发者,接受新的语言,了解新语言的发展趋势,更有利于开阔你的思路和加深对语言的理解。在 Android 开发上,使用 Kotlin 并不会付出什么代价,为什么不来试试使用Kotlin进行Android开发。
React Nativ: 跨平台一直是程序员的梦想,而且移动应用的跨平台解决方案也很多,因为 Facebook 的参与和力推,让这个解决方案带上了光环。第一个用 React Native 开发的 App 已经在 Google Play 上架 Facebook 广告管理工具,听说 Android 的 SDK 也马上会到来,React Native。
Sky:与 React Native 类似,使用 Web 开发语言来做移动平台的开发,虽然这个只是一个尝试,但是这是 Google 自身推出的,特别是在 Java 语言的使用上败诉之后,这可能会有一些作为呢,domokit/sky_sdk。
3、开发模式
Dagger 2:依赖注入并不是什么新技术,但是使用在 Android 确实一个新的尝试。Android App 越来越被当成严肃的大型项目来构建,很多在以前大型服务器开发上使用的技术都被应用到了移动开发。Android 开发分模块开发,使用 Dagger 来松耦合模块。特别值得一体的是,Dagger 2 现在由 Google 亲自接管。 Dagger ‡ A fast dependency injector for Android and Java。
MVP:因为 Android 并没有严格的业务和界面区分,项目一复杂,就很容易使代码陷入混乱。现在 Android 开发社区对 MVP 模式讨论越来越热,觉得 MVP 是非常适合 Android APP 开发。MVP for Android: how to organize the presentation layer。
RxAndroid:函数响应式编程(Functional Reactive Programming)也不是新内容,RxAndroid 把 RxJava 带到 Android 环境中。很多时候,编写 Android 程序,也可以看成是数据的处理和流动,换一种思想编程,曾经看起来很棘手的问题,瞬间就很优雅的解决了:ReactiveX/RxAndroid。
MVVM:这是因为开始官方支持 DataBinding,把 MVVM 直接带到 Android 中。数据绑定在 Windows WPF 和 Web 已经非常常见,它非常高效的开发效率,只关心数据和业务。这也对 Android 开发来说,无疑是一个非常重大的影响:android UI设计MVVM设计模式讨论?。
插件化:针对大型 Android 项目,很多 App 开始使用插件来分模块构建相对独立的功能。
Hybrid:完全使用 HTML 5 开发 App,目前还不成熟。但是折中方案在很多情况下是非常适合的,典型的就是微信,大部分信息展示都是通过 H5 来完成,同时通过 Hybird 方式,把 Web 和 Native 打通,提供给网页访问本地资源的能力。
4、UI设计
Material Design:已经红遍了大江南北,这方面的讨论实在太多了,而且各种支持库都有了,特别是 Google 官方出了一个支持库 Android Design Support Library。
Sketch 3:这是一个专为设计移动端 UI 的设计工具,作为开发者,不用懂那么复杂的 PS 使用,也可以做非常专业设计。