安卓开发用kotlin好,还是java好,以后得趋势是怎么样的?

徐7651981


Android 开发现在很多语言都能实现,现在谷歌大力推广IDEA的kotlin语言来写Android无疑是最为优越的,我个人觉得使用开发语言,用kotlin更好,原因有以下几点:

1、ktx 加持:

JakeWharton 大神我想大家都熟悉,他就是butterknife作者,Android 远古巨神!他的框架非常牛逼,代码易用性极强。在他的ktx的加持下,写Android的kotlin代码多了很多属于自己的附加方法,而且这些方法都很适用,比如Java中findviewbyid 神烦,kotlin中只需要在activity fragment 甚至是dialog中去直接写xml中的命名的id即可。这样代码量可以减少到4成左右!


2、协程:

rxjava之所以很优秀,是因为整体框架底层优秀,具体我这里不再赘述,但是在kotlin中一个东西可以完败rxjava,那便是协程。什么是协程呢?可以这么理解,微线程,即在使用虚拟机极小的资源甚至是单线程条件下完成异步调度,特别基于kotlin预编译特性,能够发挥其机制的极致,这是java不可匹敌的,java没有协程一说。


3、语法精简度:

比如在写pojo类,java get set 一坨拉下来,但是在kt里面直接一个 data class Pojo(val a:String,val b:Int) 直接附有所有pojo特性。


4、扩展函数:

这是kt最为精髓的地方,kt的扩展函数能让viewholder say goodbye。因为使用它可以重写view的findviewbyID的方法,在viewadapter中,不需要viewholder进行控制,只需要使用扩展的findviewbyid的方法即可,这样又省下很多代码。


以上只是说出我在开发中常见遇到的kt优于java的东西,但是java打的apk包要比kt打的小,这点kt是没办法优化的。选择native开发,还是多学点东西比较好,kt的的确确在Android开发上要比java好用很多


谷歌开发者


当然目前来说,Java依然是Android的主流开发语言,但是这两年因为oracle公司各种花样作死,Java的开源协议一直都有很大的问题,这让Google在面对oracle公司的各种“找麻烦”时,非常难受。

Java优势不明显,但是缺陷越来越突出

我一直认为,JVM比Java要牛!当然Java本身也还是很强大的,当年Java出来因为跨平台的原则,逐渐从主流编程语言中杀出重围,几乎完全的面向对象、加上开源社区开发者源源不断的贡献,自然是有很大的优势。

但是随着时间的推移,Java跨平台的优势已经不在明显,但是代码臃肿、运行资源比较大等特点却越来越突出,与此同时Scala/Kotlin等基于JVM的编程语言开始出现。直到Java 8才支持stream操作,关键是语法还非常糟糕,Java已经不再是真正意义上的活跃语言,因为太成熟了,大家已经不想再做过多的改变了。

Kotlin优势很多,但是目前来说还没办法替代Java存在

在扩展函数、空安全、智能类型转换、字符串模板、主构造函数、操作符重载、分离用于只读和可变集合的接口等等这些问题,kotlin有但是Java却没有,没办法很好的解决。

kotlin语言代码可以说变得非常简洁了,并且完全兼容Java,语法糖自然不用多说,更重要的是对于有些想要尝试函数式编程的小伙伴,kotlin的函数式编程体验已经非常好了,虽然跟Lisp,haskell这种以函数式编程为核心的编程语言来说还有很大的差距,但体验已经算是不错的了。

Kotlin是Jetbrains打造,而Android studio正是基于该公司的IntelliJ IDEA,这本质上已经是一个完整开发者生态的雏形,未来假如Google收购Jetbrains,关键是这门语言还确实能够提高Android的开发效率,这是Google真的想要去改变的。Google已经将kotlin作为Android的第一类开发语言,亲爹支持,加上自身的优势,相信kotlin一定会成为一个优秀的工业级开发语言。



EmacserVimer


首先旗帜鲜明的表明观点:

真心没必要学Kotlin,直接Java大法好

而我觉得,要把这个问题讲清楚,可以从以下几个方面来看。

Kotlin出来多久了?

如果从2011年7月,JetBrains推出Kotlin项目来看,好像Kotlin也有些年头了,但实际上,直到2017的Google I/O 大会,Kotlin才得以 “转正”,即开始被视为安卓开发阵营的一级编程语言。

因此,就类库的丰富性和完整性而言,到目前为止,其和Java根本还不再一个量级上。但我们在生产开发中,有时候追求的,其实根本不是技术,而是快捷,能不造轮子,就不造轮子。

当然,事实上,从一开始,Kotlin就可以无缝的调用Java的相关类库,所以,可能有人会觉得,这一点不是问题,但你得反过来想,我们有多少人,真正愿意在开发中,维护那种包含不同语言和风格的项目代码?实际上,那是非常痛苦的。


大厂支持的情况

在讲了历史后,我们可以来看下大厂支持的情况,从2017年已降,除了JetBrains依然在勤力的推动着Kotlin的发展外,其实,我们很少看到一些处于开发顶部的大厂,在这方面有什么特别的动作。

特别是,作为Android顶部当仁不让的公司:Google,考虑到可能的Java版权之争,这两年在这方面的主要着力点,基本上可以看到,是放在了一种新的语言:Dart上(并对应的Flutter框架)。

这实际上是非常重要的一种态度。想想当年桌面开发时代,Delphi的兴起和衰落,靠IDE起步的公司,最终败于平台之下,基本上是一个大概率会发生的事件。

虽然,现在Google和JetBrains也仍然处于蜜月期,连官方的开发IDE:Android Studio也是基于JetBrains的IntelliJ IDEA。

但这样的关系到底有多牢靠,或者说这样的牢靠能不能足以让Google不遗余力的推广Kotlin,以取代Java,我个人并不相信


语言的特性

最后来谈谈语言的特性。Kotlin当年为什么突然的被Google等重视起来?我觉得无他,而是因为Kotlin,用他的“轻”,比对了当年Java开发之“重”,确实的,当Java开发人员第一次看到:扩展函数、模式匹配、Lamda表达式等一系列号称下一代编程语言的特性时,的确是非常之感到惊艳的。

但经过这几年的发展,可以看到,从Java7到Java8,Kotlin的大部分“轻”的特性,也已经为Java吸收,因此,当初为切换而营造的原因,现在也基本上立不住脚了。


不知道这样的回答能不能给你一定的启发。


纸飞机技术拆解局


Kotlin vs Java

关于这两个语言开发Android,哪一个好 ?要回答这个问题,我认为应该结合你的工作环境。我们做程序开发的,如果是平时的兴趣爱好或者研究学习,那么kotlin和Java都可以去尝试;如果你在公司,就要看公司目前的开发环境了。


假如你加入公司的团队后,接手的是目前正在维护的Android项目,而这个项目最早就是用Java开发的,那么很可能你还要继续用Java去开发,维护,更新。因为公司为了快速更新版本,提高维护的效率以及降低团队开发的成本,肯定会继续沿用之前的开发模式,不太可能 1.0 版本用的是 Java,到了2.0 版本的时候,将以前的代码推倒重来,用 kotlin 重写。这虽然可行,但是时间成本太大。因为现在都在快速的抢占市场,所以App这方面也是希望能快速迭代,保证其稳定运行。如果你们公司想要开发一个全新的应用,是一个从无到有的过程,那么也可以考虑采用Kotlin来搭建,因为没有之前的技术包袱。具体还要看公司内部的技术管理层是如何考虑和选择的。


再说一说这两门语言在开发 App 时的感受吧。之前因为 Google 和 Oracle 的一场官司,Google因为Java知识产权的侵权纠纷,让Google给Oracle赔偿了88亿美金。大家也知道Google是一家什么样的公司,因为这件事后,Google为了避免再起纠纷,就与Jetbrain合作,力推 Kotlin 语言作为 Android开发的官方语言。



我在学习和使用 Kotlin的过程中,感觉Kotlin的语法比Java简洁不少,没有Java那么多繁琐的编程规范(每一行后面没有分号,这个真是好啊)。API的调用还是会通过 JDK和Android的SDK来完成。一样可以开发出功能复杂的,结合硬件(camera,GPS等)的应用。至于kotlin语言的特性,下面其他伙伴的回答已经说的很详细了,我就不在冗述。如果你的Java基础比较扎实,那么学习kotlin会非常的快。完全可以平滑过渡。


趋势

从你的问题中,我理解的趋势要分为两个方面。


第一:Android开发的语言选择的趋势

以后Android开发采用的语言,Java短时间内还是不会被替代,但是采用 kotlin 开发的应用会慢慢增多。现在国内的一些公司招聘移动开发工程师的时候,也会招一些拥有 Kotlin移动开发技能的人。



第二:Android(或移动开发)的趋势

上面第一部分的 Kotlin 和 Java,都属于原生开发。


大家都知道跨平台开发,简单讲就是“一次开发,到处使用”。用一种方式开发出应用及其功能,通过编译后,可以让应用在多个平台运行。目前的框架有 Flutter、React Native、ionic 等等,还有更多,我这里暂时举两个例子。它们都是通过 TypeScript + HTML + CSS 开发好应用后,通过编译器编译出来一个 apk 文件,配合一些注册信息,就可以通过应用商店的审核,上架共人们下载使用了。因为 HTML+CSS+JavaScript的门槛低,容易掌握,开发速度快。





这种跨平台移动开发框架,不光给开发者带来了遍历。我想公司的老板也会非常高兴。因为以前要开发 App,要招聘两班人马,一班 for Android,二班 for iOS,人力成本高。现在只需要一班人马即可。招一个人,给他两个人的工资,达到3~4个人的效率,老板睡觉都能笑出来!


野生动物Frank


以后趋势是dart+flutter。哪个语言简单,易上手,成本低,速度快,跨平台,节约开发时间,同样功能代码量少,速度流畅,就是未来的趋势,生态会慢慢完善的,需要时间的积累。


数字化管理师


作为一名程序员,必备的能力就是自学能力和与时俱进的能力,新技术的不断产生,必须在短时间内掌握并学会。作为Google官方认可的一级开发语言,kotlin现在不学,更待何时,在这里和你分享7个Kotlin相较于Java的优势,①更简洁的字符串②更好的函数调用③利用局部函数抽象代码④使用数据类来快速实现model类⑤用类委托来快速实现代理模式⑥apply函数来简化代码⑦用函数型变量来简化回调.但是客观辩证地来说,如果你对Java的安卓开发很熟练的话,用Java也是很不错的选择,但是如果你是新手的话,建议你直接学习Kotlin,毕竟对于安卓开发,kotlin有脱颖而出的优势。如果想了解更多,请关注我,我会在今后与你分享更多的经验


爱编程的欣欣


新技术总不是很靠谱,需要经历试错阶段,但是,新技术代表未来趋势,即使暂时不成熟,也值得你学习


分享到:


相關文章: