关于java:未来的方向由-Java-到-Kotlin-转变

6次阅读

共计 3226 个字符,预计需要花费 9 分钟才能阅读完成。

前言

Kotlin 非常适合开发服务器端应用程序,能够让你编写扼要且表现力强的代码,同时放弃与现有基于 Java 的技术栈的齐全兼容性以及平滑的学习曲线:表现力:Kotlin 的变革式语言性能,例如反对类型平安的构建器和委托属性,有助于构建弱小而易于应用的形象。

这是摘录 kotlin 推广网站介绍这个语言的一段话,intelliJ 作为一家最懂程序员的公司,推出了 kotlin 语言,在应用了一段时间后,我认为 kotlin 实现有资格配得上这段评估。

  1. 非常适合开发服务器端
  2. 表现力强
  3. 兼容 java
  4. 弱小易用

通过这段时间对 kotlin 的摸索和理解,我想表白一下本人对 kotlin 对集体以及对企业的转变意义的思考。

转变的第一步:学好 java

如果是一个对 java 语言不太了解的老手,不太倡议一开始就深刻的理解 kotlin 的运作形式。

kotlin 语法自身是对 java 中很多写法的封装,将 java 繁琐的写法转变成格调简练的 kotlin 写法,再将 kotlin 最终转化为 java class。

举一个简略的例子:

val str = user?.id

下面一段简短的 kotlin 语句,转化为 java,就是:

String str = null
if (user != null) {str = user.id}

最终 kotlin 还是要回归到 java 之上。

java 自身撑持着宏大的生态,绝大多数的企业、开源库,都仍然还在应用 java 开发,kotlin 可能做到与 java 自身最大水平的兼容,十分不容易。

在可预感的将来外面,java 仍然是开发界的基石,有着不可代替的位置,因而作为一个真正的 kotlin 语言学习者,java 依然是必修课程。

转变的第二步:用心了解 kotlin

对一个刚刚接触 kotlin 的使用者来说,对各种符号、关键字的使用,相对是一大阻力。

如果想可能疾速的明确 kotlin 真正的短处,那么肯定要了解 kotlin 为什么要这样干?

kotlin 为什么要应用问号 “?”

编写 java 的过程,最广泛,最艰难的就是在解决空指针问题。

一个零碎的输出,要思考健壮性,必须要定义好哪些变量是能够为空的 哪些变量又是不可为空的 ,当变量为空或者不为空,怎么去解决, 上游代码给我的变量到底是不是空的

置信只有是一个思考问题比拟全面的程序员,在编写代码时都会有这样的放心。

kotlin 的目标就是要毁灭程序员的放心。

第一个目标是间接在源头管制好变量为空或者不为空的状况,这样程序员在每一步的编写代码时,可能安心的晓得,我这个变量是必定不会为空的,如果是为空的状况,我曾经有了应答方法。

第二个目标,是对可能为空的变量,可能有十分敌对、简略、可读性强的解决

var userName = user?.name // 当 user 不为空时将属性 name 复制给变量 userName

user?.let { // 当 user 不为空时,打印 name 属性的值
    println(it.name)
}

user?.name?.let { // 当 user 以及 user.name 不为空时,打印 name 的值
    println(it)
} ?: println("name 为空") // 否则就输入 name 为空

user?.name = "kotlin" // 当 user 不为空时,给属性赋值

在这里能够稍作一下进展,思考一下在 java 解决这样的逻辑,须要以怎么的形式实现。

这种写法足以感动任何在 java 中屡次解决空指针问题、或者在代码运行一段时间莫名其妙呈现空指针异样的程序员。

kotlin 排汇 stream

如果是一个对程序写法有些谋求的程序员,置信肯定不会错过 jdk1.8 语法中的 stream 和 lambda。

当我心愿将 List<V> 中的 V 的某一个属性作为键转变为 Map<String, V> 时,stream 曾经提供了十分简洁的写法:

Map<String, Choice> result = choices.stream().collect(Collectors.toMap(Choice::getName, Function.identity()));

java 曾经十分简洁了,然而我每次心愿做这样一种操作时,每次都在代码外面翻阅或者在网上搜寻一遍用法。

在你应用了 kotlin 的做法后,置信你肯定不会遗记它的写法:

val result = choices.map {it.name to it}.toMap()

对于简单一些 stream 写法,你可能须要理解一番 java 如何向 kotlin 转变的,然而个别写法,只要求你删除 stream() 即可。

能够说,kotlin 齐全排汇了 stream 的精华,并且在这之上,青出于蓝而胜于蓝。

遗记 lombok 和 get set

lomok 是 java 世界中不可漠视的补充力量,他让简略的 get set 定义不再被程序员须要,但同时它对类的间接批改,也让很多深刻应用的程序员诟病。

归根结底还是因为 java 中的封装概念,即管制无限字段裸露。

于是在 kotlin 中,不再有 get set 的概念,只有赋值和间接获取,只须要利用 privatevalvar 这个几个关键字,就可能实现管制字段的可见范畴。

val name: String? = null // 可能获取,不能批改

var name: String? = null // 可能获取,可能批改

private val name: String? = null // 不可获取,不可批改

同样在 spring boot 中罕用的 lombok 注解 @RequiredArgsConstructor,用简略的构造函数间接生成字段就可能代替。

自身 lombok 的注解对 kotlin 代码就不失效,当转变应用 kotlin 时,移除 lombok 也是理所应当的事件。

少就是多

当你可能了解 kotlin 这三点次要的用处,并可能利用自若,那么你将节俭至多三分之一的代码量。

在代码的世界里,少就是多,缩小冗余代码,就是在为本人争取开发工夫,就是问题呈现的概率在缩小,就是问题产生时排查的速度在进步。

这或者就是 kotlin 为程序员积攒的通过工夫积淀下来的实实在在的教训。

转变的第三步:实际

当你胜利的被 kotlin 简洁老练的语法所吸引时,在通过团队中进步人士的批准下,心愿替换为 kotlin 时,请留神到,kotlin 齐全兼容 java,不仅是 kotlin 致力的方向,责任更在使用者身上。

替换自身是欢快的,之前的代码在你的手中一行一行的缩短,一个个空指针判断在被替换为简洁的问号,然而危险也在一步步的进步,每进行一步替换都要做好充沛的回归测试,谁也无奈意料在主动 java 到 kotlin 的代码转换器,是否将逻辑推理的那么谨严。

在替换的过程中

  1. 你可会遇到 java static 的办法无奈与 kotlin 很好的兼容
  2. java 接口中的 default 办法,无奈在 mybatis 中的 mapper 接口中利用
  3. 各种意想不到的艰难

然而在这些艰难背地,解决完后的意义远大于艰难自身,因而这一些都是值得的。

古代语言中的 kotlin 和 swift3

kotlin 语法的诞生不是偶尔因素,而且代码在一直倒退过程中的必然结果。

比照 kotlin 与 swift3,你会发现两者惊人的类似,或者是因为两个语言中的设计人员有一些重合。

然而这些重合的点,何尝不是一代代的人应用后积攒下来的产物,总是会有人去一直的谋求更高效、更不便、更快捷的开发方式。

这些形式也肯定会被古代的语言一直排汇,这些长处终将会被保留,始终连续到新一代的计算机呈现。

对将来 kotlin 的瞻望

心愿 kotlin 语言可能被更多人和更多的企业承受。

对集体来说承受的不肯定是非要应用 kotlin 开发,更多须要承受的是 kotlin 在设计过程汇总烁烁发光的思维形式,一直要求本人在本来的 java 技能上获取精进。

对企业来说,缩小谬误老本、升高错误率、升高开发工夫,永远是效率为上,了解 kotlin 带来的价值并可能正当的加以利用,是重中之重。

同时也心愿将来 kotlin 自身可能再进一层,不再以 java 作为两头语言,而是可能间接一步到位,领有齐全属于本人的编写、编译、运行的体系。

正文完
 0