使用Kotlin做开发一个月后的感想
谈 kotlin之前 有一类程序员,自己根本没体验过的东西,看了几篇哗众取宠的博文自己也来嘲讽,我称之为云程序员。 就比如 Kotlin,有人蹭热度写几篇类似“我为什么从 kotlin 又回到java”的博文,就把 kotlin 一通批判。有空看看这些蹭热度博文为啥不看看Android Developer 官网所有示例代码都是 kotlin 版本在前,java 版本在后呢? 争论语言、框架的优劣是没有意义的。很多程序员总是对自己一直使用的语言、框架大肆吹捧而对其他语言、框架各种贬低,很明显这样的程序员太狭隘了。 Java确实常年排名第一,其他语言就没有意义了吗?当然不是,即使是批判,你也得自己真的体验过了才有资格。这可不是你行你上的翻版,毕竟了解一门新语言对一个真正程序员老说是很轻松的事。 简洁的语法 Kotlin给我的感觉就是它就是针对Java里所有的痛点来做改变的,比如语法繁琐,烦人的空指针,,缺少函数式编程支持(Java8虽然支持Lambda表达式但还远远不够)等等。 不像它的孪生兄弟Scala那样奔放,Kotlin给我的感受是聪明又克制,对Java程序员来说半天就足够上手开干了,不像Scala门槛那么高。 Java语言是我所接触过语言中语法最繁琐的(有更繁琐的请告知),这种繁琐在main函数就可以体现,而且Java可能也是唯一一个几乎没法不用IDE的语言。其他语言脱离了IDE的语法警告和代码生成模版也勉强能写一写,Java代码你没有试试看? 但是Java的语法之严谨和繁琐恰恰是Java如此流行的原因。没写过Java的人可能没法理解这句话。人们对于Java严苛的语法还不够满意,还要再加上 check-style,findbugs以及各种XXX公司Java代码规范等各种条条框框,最终得到的结果是所有Java程序员写出来的代码都能互相看懂。 即使是刚毕业不久的Java程序员,只要熟悉Java面向对象语法,几乎不存在看不懂其他Java代码的情况(业务看不懂除外)。这样保证了Java程序员的代码下限非常之高,能够保证大型项目的成功。 好像扯 Java 扯的有点多了。接触 Kotlin 之后会发现,kotlin 在尽可能保持和 Java一样的语法严苛性的情况下,大幅度地精简了 Java 代码,写起来非常之爽。
简洁的语法无处不在,比如上面的Bean类如果用java来写至少要多好几倍的代码。单例模式只需要把class换成object即可。这些虽然用Java的IDE的各种模版生成工具一样可以秒生成,但是还是kotlin写起来更舒服一些。 我想强调的是,Kotlin并不是无脑地利用语法糖和新关键字来精简语法,我们可以很清晰地感受到Kotlin在设计过程中尽可能地保证它尽可能的语法严苛性。 空指针 Java 的空指针异常被称之为 “Billion Dollar Mistake”。在上家公司的时候为了避免空指针异常,代码规范要求几乎所有的对象都要进行判空操作,那种嵌套很深的json对象,判空起来真的是又臭又长。
上面的代码解释了三种对可能为空的对象的处理。其实我把 Kotlin 对空指针的处理归类为给所有对象加了个范型——符号?,对于带?的对象则表明它可能为空,你不处理直接使用的话不让编译,也就是把空指针尽量扼杀在编译期间。这个想法真的是简单又巧妙。很多人一听 Kotlin 就说没有空指针了,但是没用过的话并不知道怎么实现的。现在再有面试官问你,知道怎么回答了吧? 函数式编程
函数式编程对很多Java程序员来说是很陌生的。 尽管我不想黑,但是Java真的强到让很多Java程序员只会Java一门语言,并且基本上Java8以上的版本也没接触过。而除了Java(Java8以下)我还真不知道哪门语言不支持函数式编程。 几乎所有语言都支持函数式编程,因此会灵活使用函数式编程真的挺重要。Java不支持是因为函数式编程相对要难一点,不支持函数式编程反而让Java代码的下限更高。 除了难度大一点,函数式编程最令人不爽的就是阅读性差(可能比较依赖写代码的人的水平),我看Java框架源码基本都很顺畅,但是看JavaScript框架简直懵逼。 我现在的水平看Kotlin函数式代码也费劲,但是kotlin毕竟是强类型语言,函数的参数和返回值类型固定的话,认真读还是不难读懂的。 扯远了,函数式编程的好处就是代码灵活度加倍提高,可以写出各种秀操作的代码,显然这也是一把双刃剑。不过随着函数式编程越来越流行,大家的水平越来越高,写出来的函数式代码势必越来越好。 (编辑:ASP站长网) |