Kotlin语言现在怎么不火了?
86 个回答
Kotlin没有大火过,其实一直都在慢慢发展,变得越来越火。
不存在题主所说的原先很火现在不火的情况。
而且google官方强调一切活动以Kotlin优先。
某些库甚至只支持kotlin。哦,如果你不在乎「专为旧版鸿蒙打造」的环境的话,那么新版鸿蒙也同样是一切kotlin优先的。
也许它不能火的原因还是jetbrains比不上sun跟oracle等公司财大气粗吧。是的,它并不是google为了android打造的语言。而是jetbrains为了让程序员更舒服的编程而创造的,google只是恰好选择了它而已。
jetbrains其实在编程界风评挺好的,jb全家桶被认为是「唯一能挑战visual studio宇宙第一ide地位」的产品。所以其实jb的产品应该是靠谱的。
不过就我个人而言,以前没使用kotlin的原因还是因为 成见 。我曾经因为成见而一直不肯接受kotlin,「既然Java就够用了,为什么还需要另外一个语言?」。但我真的用kotlin写了一个项目之后就开始后悔:后悔接触它太晚了。
很多java程序员,尤其是服务器端程序员。根本没有尝试过kotlin,就直接从主观上抵制了它。我很理解这种「不愿意跳出舒适区」的想法。不过很快,新语言特性带来的愉悦就会战胜这种犹豫。
理论上,所有能使用java虚拟机的地方都能使用kotlin,不过实际上,部分ide可能不一定能方便的部署起来kotlin编辑与编译,或许这会是个阻碍吧。谁说得准呢?
回到题主的问题:其实当年如果你问C++跟C学啥,还是会告诉你C是要学的,虽然你最终要用C++。再后来有了Java,会告诉你C++总是要学的,即便你会用Java。
对Kotlin或许也是如此,Kotlin背后运行的还是jvm的那一套东西,理解Java对理解其背后的机制有帮助,所以Java总是要学的。但如果只想拿个语言来干活,无疑用Kotlin更舒服。
最后:语言的语法本身并不会成为语言的障碍,主要的护城河还是在语言本身自带的库。由于Kotlin与Java共享同一套api库,所以某种程度上他们是同一个语言,你不必纠结学谁。因为两者本质是差不多的。
不过Kotlin自身有一套语言扩展,这部分Java没有,所以能看得懂Kotlin基本能看懂Java,但能看懂Java并不能看得懂Kotlin,把Kotlin当作Java的超集并无不可,(类似于C++被当作C语言的超集),这样说来,其实学Kotlin是会比学Java好那么一点点的。
Kotlin从来也没大火过吧……
其实很简单,就是2000年之后,程序设计语言越来越不能孤立的评价。 几乎所有的程序设计语言都是和库绑定的 ,而Google不把Java基础类库全部重写一次,或者说Java生态不用Kotlin重写一次。那Kotlin在JVM的地位也就只能和Scala什么的一样不温不火。只会在开发android的时候考虑一下……
其实如果真的觉得语言可以提升生产力,那直接用C#就好了……
.NET的BCL就是C#写的,所以才会用起来如丝般顺滑。
就算是用C#,如果一个异步方法不提供XXXAsync版本,而只提供BeginXXX和EndXXX版本,那封装一下也是挺难受的……
之前有很多直接弄个翻译器从Java翻译成C#代码的 http:// XXX.NET 项目,能跑起来,但是用起来就是说不出的恶心。这就是语言和类库不适配造成的违和感(别东张西望,说的就是你 http:// Hibernate.NET 和 http:// Lucene.NET )……
说白了,设计个语言,比写个支撑他的基础库简单多了……
顺便说一句,一个优秀的程序设计语言不在于他有多少语法元素和特性,而在于这个语言的语法元素是否 符合直觉 。更进一步的就是是否 符合你的直觉 。
符合直觉,或者说你的直觉和语言设计者的口味一致的语言, 不单用起来爽,学起来也快 。
你要追求语言简单,直接用脚本最简单,不支持寻址和指针,没有值类型的Java本质上就比一些脚本语言多了个接口和继承的语法。而且非要装模做样的区分继承类和实现接口除了恶心人没有什么太大的意义。
要追求极致简单直接Brainfuck就好了,哪有什么语法元素少就学起来快的理论……
C语言语法元素更少,除了比Java多个union、宏和指针还有啥?
有人反复强调无缝,而事实就是, 无缝调用是最廉价的玩意儿 。对于JVM和CLR这种平台,语言无缝调用非常廉价,.NET和Java都支持Python甚至JS无缝调用,.NET甚至给出了CLS规范来降低语言互操作性的障碍。我都不说这些拓展, 就说亲儿子F#又如何呢 ?
如果你想知道这些语言为什么火不起来,那很简单: 语言是和库绑定的 。但是如果你们只是想证明我自己能把两种语言能混用的很好,这说明这个答案 你们一个字都没看进去 。
最后说个残酷的真相吧,因为99%的程序员写的代码压根儿就不会被别人调用,所以也没人关心他们用什么语言写的,而他们 只会找实现这个功能最广泛能抄到的代码 ……哦,这就是Java火的秘密,还有PHP……
最后总结一下吧:
1、基于JVM的所有语言都能互相所谓的无缝调用,这其实是非常廉价的特性。
2、如果对于程序员来说,语言真的那么重要,能够大幅的提升生产力,直接用C#就好了,何必用Kotlin呢?毕竟大部分特性就是从C#抄的,别说什么糖太多,什么取舍。隔壁的Java不用Kotlin的时候一个说法。
3、所以,Kotlin火不起来的原因很大程度上和语言一毛钱关系没有,而在于社群和库。这也是为什么基于JVM除Java外的其他语言和基于CLR的除C#外的其他语言火不起来一回事儿。因为库没有针对性的优化。当年C#为了支持LINQ,硬生生的搞出扩展方法是为何?就是因为库上面不支持Where、Select方法,你支持lambda,支持LINQ Expression又如何?Java作为学生也不得不抄接口默认实现来玩,套路都一样。说白了如果List不提供stream方法,你非要写成 new Stream( list )看起来就难受多了……
所以语言和库是个相辅相成的事情,这一点上C#尤为突出,你库不升级,语言是无法升级的。比如说C#2依赖于System.Collection.Generics,C#3依赖于Enumerable扩展方法,C#4依赖于DLR,C#5依赖于Task的扩展,C#6依赖于FormattableString,C#7依赖于ValueTuple……
4、最后绝大多数程序员就是个CP的手艺活儿,语言优雅与否其实压根儿不重要,有得抄,有得用才是最重要的。Python在机器学习大火是因为Python适合写机器学习的算法么?显然不是,是因为大部分机器学习的库提供了Python接入,网上大把的Python代码可以去抄……恶意的揣度一下,如果当年阴差阳错用的是Lua或者JavaScript做胶合语言……