1.4 为什么选择Kotlin
正在从事Java编程工作的程序员深知Java存在诸多问题,Kotlin除解决这些问题外,还提供了Java不具备的一些特性,并且100%兼容Java,支持无成本迁移,这为Java程序员提供了一个非常好的选择。
1.4.1 Java程序员的选择
下面先来看看Java存在的问题。
●空引用(Null references):连空引用的发明者都承认这是一个“十亿美元(billion-dollar)的错误”。不论怎样都无法避免它,因为Java的类型系统就是不安全的。
●原始类型(Raw types):开发应用程序时总会为了保持兼容性而卡在泛型原始类型的问题上,我们都知道要努力避免Raw types的警告,但是它们毕竟是在语言层面上存在的,这必定会造成误解并形成不安全因素。
●协变数组(Covariant arrays):可以创建一个string类型的数组和一个object类型的数组,然后把string数组分配给object数组。这样的代码虽然可以通过编译,但是一旦尝试在运行时分配一个数给object数组,就会在运行时抛出异常。
●Java 8存在高阶方法(Higher-order functions),但是它们是通过SAM类型实现的。SAM是一个单个抽象方法,每个函数类型都需要一个对应的接口。当想要创建一个并不存在的Lambda表达式或不存在对应关系的函数类型时,就要自己创建函数类型作为接口。
●泛型中的通配符:泛型总是难以操作、阅读、书写和理解。对编译器而言,异常检查也变得很困难。
对于上面列出的这些缺陷,Kotlin通常直接移除了那些特性,同时添加了一些新的特性。
●Lambda表达式。
●数据类(Data classes)。
●函数字面量和内联函数(Function literals & inline functions)。
●函数扩展(Extension functions)。
●空安全(Null safety)。
●智能转换(Smart casts)。
●字符串模板(String templates)。
●主构造函数(Primary constructors)。
●类委托(Class delegation)。
●类型推断(Type inference)。
●单例(Singletons)。
●声明点变量(Declaration-site variance)。
●区间表达式(Range expressions)。
Kotlin之所以能跟随JVM的生态系统不断地进步,是因为它没有任何限制。Kotlin编译出来的正是JVM字节码。在JVM看来,Kotlin跟其他语言是一样的。事实上,在IntelliJ或Android Studio上用Kotlin的插件时,会自带一个字节码查看器,可以显示每个方法生成的JVM字节码。
Kotlin 来自业界而不是学术界,它解决了开发者现今面临的很多实际问题,上面列出的只是比较重要的。从Java切换到Kotlin无须成本,Kotlin提供了一个高质量的从Java转换到Kotlin的工具,可以一键将现有Java项目一次性转换成Kotlin项目,而该项目仍可以正常编译,即使是一个包含上百万行代码的复杂项目。
Kotlin程序能够使用所有现存的Java框架和库,甚至包括那些依赖注解处理的高级框架。它们之间的交互是无缝的,不需要包装或适配层。Kotlin 可以整合 Maven、Gradle及其他构建系统。
1.4.2 新手的选择
对于新手程序员来说,他们所有的选择都会围绕从业收入及自己的能力来进行。能够带来理想的收入,需要掌握的知识是在自己能力范围内的,这种语言就是新手程序员最容易选择的。
目前,从事移动开发工作是一个不错的选择,多数人使用Java语言从事Android开发。但是,Kotlin替代Java只是时间问题。不需要太多的原因,解决了Java现存的问题、100%兼容Java,即使没有其他新的特性,仅这两个原因就足够了,况且它确实还引入了很多新特性。除此之外,Google公司选择Kotlin作为Android第一开发语言,后面会持续地投入和支持,这为Kotlin语言的长远发展奠定了基础。
前面已经介绍了Kotlin的很多特点,下面总结一下影响程序员选择Kotlin的几点原因。
●Kotlin十分平易近人,语法精炼直观。
●Kotlin不苛求特定的编程哲学,例如极度的函数式编程或面向对象编程风格。
●Kotlin允许用户继续使用工作效率提升工具。IntelliJ的IDE对Kotlin的支持十分完善:可以对代码进行重构、搜索、导航,以及使用自动完成功能,而且IDE充分支持调试、单元测试和性能分析等。
●由知名公司为Kotlin提供强大的商业支持。JetBrains公司有一个高度称职的大团队负责该项目,有稳定的商业模式,甚至在其部分旗舰产品中使用Kotlin,这表明短期内Kotlin不会被放弃。尽管Kotlin是免费的,但是JetBrains公司还是能够通过它增加商业版本IDE的销售来赚大钱,这将激励他们根据用户的意愿持续改进它。与此相比,对于那些由不相关产品资助的语言开发者,当用户需求与之前的设计理念冲突时,他们很少会因此做出调整。
●Kotlin语言十分注重语法的可读性,代码审查不会成为问题,对Kotlin不熟悉的团队成员仍然能够完成该工作。