最近看了一下kotlin编程语言,第一感觉是代码里充斥着各种符号,给人一种七零八落的感觉。比如kotlin中,继承使用冒号:,这其实是c++的继承语法,而java的设计者当初可能觉得c++的继承语法太过于抽象,或者与java总体设计风格不符,而是使用extends关键字,现在绕了一圈又回去了,不知道各位语言的使用者对此有何感想?说白了,就是更简单、更省事,封装的更好,少了很多看似无用的代码。但是这样带来的就是程序可读性较差。毫无疑问,写字时,一撇一拿,横平竖直的正楷字,很容易阅读,谁都读得懂,而龙飞凤舞的草书,读起来实在晦涩,基本靠猜。还有比如kotlin使用 in 运算符来检测某个数字是否在指定区间内,区间格式为 x..y :,这样的语法糖实在没劲。那用c语言的思路考虑的话,那是不是就相当于定义一个宏呢,#define ,就这样,程序编译时会完成宏展开,自动替换。然后最基本的变量定义和方法声明,c++/java嘛,可以说是类型在前,变量名在后,相当于中国人的姓在前,名在后的方式,而kotlin,采用的是变量名在前,类型在后的玩法,有点欧美老外这种名在前,姓在后的名字方式,对于变量还好些,但是方法就有点别扭了,比如:fun isInDiskCache(url: String, download: Boolean): Boolean,方法名和返回值类型中间离开那么远,感觉不科学。还有kotlin的高阶函数,用的爽吗,其实java 8中也有的,这样一对比,发现kotlin的优势并不是比java强很多。java 8中的stream api同样可以简化集合操作。类型推断var局部变量,java 10也支持了。至于判断对象是否为null,kotlin有!关键字,确实很简洁,java 8提供了optionnal容器,不过对于我这样以前写c++的人,对于这些语法糖或者库暂时还没啥好感,反正已经习惯if判断了。甚至写java代码时,只是new对象,而没有delete对象,还有些不习惯,毕竟这应该是成对出现的东西。在c/c++里面,其实手动管理内存很爽的,因为程序运行到哪一步,用了多少内存,你可以精确计算出来,而像java,天知道用了多少内存,地知道什么时候回收内存。因为kotlin的现代化,同样一个功能模块,java写完用20行代码,kotlin写完用10行代码,但我并不认为这样少写几行代码就可以提高工作效率,实际上现在ide的智能补全如此强大,很多时候看着很多代码,实际都是ide生成的,自己并没有写很多代码。其实,多写几行代码,并不会多花多少时间,反而可读性会更强,多花的这点时间是非常值得的。包括注释以及变量名和方法名的命名,多思考一下,花点时间给变量和方法命名一个合理的名字,这些都值得的。代码越清晰越好,而不是越少越好。追求清晰的代码和高质量的代码,然后才是减少冗余和臃肿的代码,让代码简洁。
不过我的kotlin代码量实际是0行,实际在开发中还没有大量使用kotlin,所以上面的对比以及个人见解其实非常粗浅,甚至是错误的,只是最近看了些这方面资料,说说自己的一些想法。多说一句,公司这个项目之所以采用kotlin,据说是因为工程师想使用函数式编程,但是该项目的jdk版本不支持,同时由于历史问题,jdk无法升级,那想使用函数式编程怎么破,那就用kotlin吧,于是项目中开始java和kotlin混用。从开发成本来讲,我在看这个工程时,脑子里一直在想,这哥们万一哪天离职了怎么办,这些用kotlin写的工程,类名、方法名、变量名均没有注释,上哪找合适的接替人员,找到了要多久能上手修改,可能是我想多了。
2011年7月,JetBrains推出kotlin项目,2016年2月15日,kotlin v1.0(第一个官方稳定版本)发布,kotlin在飞速发展,除了kotlin还有scala,这些都是在java的基础上精心设计的编程语言,填补了很多java的坑,也加进了很多新特性,作为程序员,要适应这种变化,积极学习,拥抱技术与变化。用习惯了,也就不会觉得什么,也就不会看哪哪都别扭了,就跟当初写惯了繁体字,突然让你写简体字,那一代人估计也是痛苦的。没什么可喷的,只是单纯觉得kotlin没有想象中的那么好而已,所谓的几大优势,也就那样吧。最后想说,在牛逼的语法也解决不了复杂的业务和复杂的逻辑,这需要对业务的理解,当你条理清晰时,什么语言都ok,否则没想好就做,条理不清晰,用什么语言开发都白扯。另外,我看了很多用了kotlin后回来贬低java的文章,kotlin很现代化,优势很多,开发过程中代码量少了很多,但毕竟是站在巨人的肩膀上,没不要、也不应该嘲笑脚下的巨人——java,况且java也在进步。
下图为最新的编程语言排行,壮哉,我大c语言,还是那么niubility。