赞
踩
我使用 Java 已经有很长的时间了,工作中的使用有15年。如果算上在学校的时间的话,那就更长了。Java 的一个很大的优势是平台的开放性。这得益于 Java 字节代码和虚拟机的存在。由于 Java 语言自身的发展速度比较慢,就催生了很多运行在 JVM 上的语言。Scala、Groovy、Kotlin、Clojure 是其中比较流行的,还有一些小众的语言。总有一款语言适合你,而且不断有新的语言出现。
当 Kotlin 最早出现的时候,我只是了解到了它在 Android 开发中的作用,并没有对它有过多的关注。直到后来了解到了协程(Coroutines),才开始深入认识到了 Kotlin 的优势,并逐渐在日常的开发中使用 Kotlin 来替代 Java。这个过程所带来的不仅是自己开发效率的提高,以及对代码信心的增强,更多的是对代码的那种掌控感和简洁的代码所带来的内心的愉悦。
本文的目标是让那些没有听过,或是没有深入了解 Kotlin 的人,对 Kotlin 产生兴趣,并开始尝试在日常的开发中使用 Kotlin 来替代 Java。虽然大部分人在熟悉了一种语言之后,很难再有动力去学习和掌握新的编程语言。但从 Java 到 Kotlin 这样的转变所带来的收益是非常巨大的,是值得投入的。
下面就来说一说 Kotlin 的优势吧。
Java 的语法是比较严格而繁琐的,导致代码不必要的冗长。Kotlin 的语法在很多方面都相对于Java进行了简化,可以用更少的代码来实现同样的功能。下面是几个突出的变化:
Kotlin的语法真正体现了少即是多(Less is More)的精髓,可以去掉Java中很多不必要的boilerplate代码。
空指针问题应该是 Java 程序中最常出现也最让人烦恼的问题。空引用,这个 Tony Hoare 眼中的“数十亿美元的错误”,直到现在还在困扰着不同编程语言的程序员。在Java中,我们一般应对的策略称为防御式编程(defensive programming)。也就是说,对于可能出现值为 null 的地方,应该首先检查值是否为 null ,再使用该引用。如果是很长的对象引用链,如 a.b.c.d 这样的情况, 进行检查的代码就很冗长。需要先检查 a ,再检查 a.b ,以此类推。因为太繁琐,并且没有有效的方式来强制进行,在开发人员有意无意的情况下,这样的防御式检查在很多时候就被省略了,其结果就是运行时的 NullPointerException 。
Java 中出现这样问题的根源在于,单纯从一个对象引用,是无法判断其是否可能为 null 的。Kotlin采取了一种釜底抽薪的做法,把可为 null 和不可为 null 的对象划分成两种不同的类型。比如, String 类型的值是不可能为 null 的,而与之对应的 String? 类型的值是可能为 null 的。如果一个方法的参数是 String 类型,就意味着在方法体中,不需要检查该参数的值是否为 null ,可以放心地直接使用;而如果类型是 String? ,则不能直接使用该参数,需要首先进行 null 检查。直接使用可为 null 类型的变量会产生编译错误。
可为 null 类型的重要意义在于,它强制开发人员去思考一个引用是否应该可能为 null。在 Java 中,一个引用是否可能为 null 的契约是隐式的。这种契约通常以 Java 文档或是团队内部规约的形式出现。Java 编译器并不会帮助你在编译时刻阻止错误的发生。而 Kotlin 中的可为 null 类型让这种契约变为显式的,并由编译器来保证。当你在设计一个类或方法时,就需要仔细思考类中的属性或方法的参数是否可能为 null ,并使用合适的类型来表示。
与可为 null 类型相匹配的,Kotlin 提供了 null 安全的调用操作符 ?. 。使用 ?. 之后,只有前面的引用不为 null 的时候,才会调用后面的操作。当对象引用很长时,使用 ?. 可以写出简洁安全的代码。比如类 User 的属性 add
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。