当前位置:   article > 正文

为什么推荐 Java 开发人员都学习并使用 Kotlin?_kotlin谁在用

kotlin谁在用

我使用 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的分号的可选的。
  • Kotlin中使用 val 和 var 来区分不可变和可变的变量。使用 val 声明变量只能被赋值一次,而使用 var 声明的变量可以被多次赋值。
  • Kotlin的变量类型声明是可选的,编译器可以尽可能地进行类型推断。如 val name="Alex" 中的 name 的类型被自动推断为 String,并不需要显式的进行声明。
  • Kotlin中创建对象不需要 new。
  • Kotlin提供了对范围(range)的支持,如 1..5 表示从1到5的范围。
  • Kotlin中的字符串字面量提供了对模板的原生支持,不再需要 Java 中的 String.format。比如,val str="name is $name" 中的 name 是引用的变量。
  • Kotlin中对包、类和源文件之间采用了更加松散的组织结构。一个Kotlin文件中可以包含多个 public 的类。类的 package 声明不需要与其源文件在文件系统中的层次结构完全匹配(不过不建议这么做)。
  • Kotlin中对 getter 和 setter 方法的使用进行了简化。如果一个类中有 getName 方法,可以直接以 name 属性的形式来访问;同样的,如果有 setName 方法,可以使用赋值操作来调用,如 user.name = "Alex" 就相当于调用 user.setName("Alex")。
  • Kotlin中的变量和方法可以出现在顶层中,并不需要作为类的成员。
  • Kotlin 直接提供了对文本块的支持,使用三个双引号可以声明多行文本。

Kotlin的语法真正体现了少即是多(Less is More)的精髓,可以去掉Java中很多不必要的boilerplate代码。

空指针安全,告别NPE

空指针问题应该是 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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/726713
推荐阅读
相关标签
  

闽ICP备14008679号