如何评价 Kotlin 语言?

关注者
3,953
被浏览
2,465,177

237 个回答

写了快一年Kotlin了现在大概可以强答了。

利益相关:个人github上所有获得的star都是Kotlin的项目……日常写脚本有时候都是用的Kotlin写了。现在基本上只有最简单请求测试才直接上python,但是写python逻辑上感觉心很累的,一旦有代码块要稍微修改一点逻辑就要一大块一大块的缩进,这就很烦。

【写着写着发现一不小心就拿其他各种语言作比较,超级不友善的233333】


垃圾Kotlin:

  • 肚子好饿,早知道不学Kotlin了.jpg(去年年底28。后面排名一度掉到44。现在也才回到38)。我还在用Kotlin写Julia语言的idea插件……
用排名38的语言给排名37的语言写IDE支持是一种怎样的体验。。。



  • 非要说的话对于只接触过Java这类语言的人来说Kotlin应该是很有意思。(按照圆胖肿的说法Spring程序员应该除外。话说 @圆胖肿 日常宣传vert.x真的不怕路人转黑吗。虽然vert.x很好,跟kotlin的coroutine结合效果也非常好,但是总感觉这么宣传感觉怪怪的。)
  • 编译速度稍微有点慢,写JVM上的时候勉强还能接受。但是native的编译速度就比较惨了。编译的时候还得要JRE然后一个helloworld编译十秒才能出来。(别跟我说什么隔壁Julia静态编译一个helloworld两分钟,那是解释性语言啊)
  • kts也是一个黑点。idea上的依赖解析报错真的是非常的迷,日常报错。我觉得完全是语言和ide的互相的设计没沟通好的结果。(由于最近在开发IDE插件所以体会很深。)这边.kt和.kts公用kotlin这没问题。但是kts默认情况下为了学gradle不会去写“标准库”这样的东西,这边IDE的设计又没办法降低对语法检查的要求。又没有对于非工程文件的sdk(classpath之类)的设定。然后刚刚得知kts这个解析是没有进度条的,完全是后台运行……只有解析完所有依赖了以后在index的时候才会有进度条。
  • 缺点是如果习惯了写Kotlin就很有可能写代码的时候会各种丢分号以及一边写Java代码一边骂怎么这么烦。


好了我要开始吹(hei)Kotlin了。一眼看过去都是糖。

Kotlin好处都有啥:

  • 个人觉得最重要的一点是思维观念。特别是在没学Java 8 的函数式之前先学会Kotlin的各种扩展/高阶函数的用法,感受就完全不一样。很多时候的需求只要不是太过于特定的话基本上靠forEach,map,filter几个都能很好的理解。思维和写代码不会被 写循环 的这个过程打断,写Java你可能写上循环以后就容易迷。用过Kotlin以后再回来用Java8发现Java8的这也太小儿科了。
  • 语法糖方面,Kotlin的语法糖算是比较人性化的。
    • 用var和val可以省略一次类型的写法。对于一些类型来说我们真没必要多写。其实我个人还是比较喜欢Scala/Groovy那样既能写类型也可以写关键字的方式的声明变量。不过我居然是在用了C#以后发现似乎类型还真没写几次。另外这里强烈建议可以把IDEA里面Kotlin的类型声明用hint显示出来。
    • 扩展方法:个人觉得Kotlin大概是我已知的有扩展方法的编程语言里面写起来最顺手的一个了。和声明一个普通函数的区别就在于多了个 类型. 。比起C#要写几个public static 再加一个this 再类型变量,喵喵喵?我为了用一个扩展还要多写出这么多东西?然后我就会被C升厨喷糖酸emmmm。然后js的话毕竟本身就很灵活直接类型.prototype.funcName,还行吧。Scala的话写起来也是要单独再搞一个类再用implict总有种暴露我智商低无法接受的感觉……以我的智商只会躺在kotlin里面了。
    • 高阶函数(also,apply,let这几个)。能用好高阶函数也是很棒的。比如apply应该有借鉴C#的构造函数的初始化成员赋值写法的,但是可以做更多的事情啊,做完了他自己的事情再返回本身。
    • 可迭代接口就能用到的扩展(上面提到的forEach,map,filter等几个)。自从有了这么些个扩展,彻底成了 it 爱好者协会。虽然it其实是iterator的意思,但是其实当做it来看也是很棒的。意思是你不需要考虑单参数的参数名字,大胆上it。有多个嵌套一起用的时候再重命名。
    • 写了这么久突然发现还没写到空安全。有没有大括号的区别,了解一下。你们知道julia标准库那些人丧心病狂到什么程度吗,为了不搞括号,有简单的if return的判断就直接用 || 和&&来搞定……大括号一层一层嵌套进去对于代码来是一种灾难啊,但是如果用链式调用那种大括号就会好很多(一堆forEach的那种)【?.只写一个两个的时候体验还是挺不错的。。但是如果写成一堆的 ?. 感觉是其实也是很烦的】
    • ……


突然想到一句话,Java最好的第三方库是Kotlin(雾

最近用kotlin改造了手上项目近一半的代码, 从书写上来说非常爽,语法糖的确减少了很多时间以及代码量, 但是-再牛逼的语法解决不了傻逼的业务和逻辑需求