乐趣区

关于kotlin:微服务开发系列为什么选择-kotlin

我的项目中采纳的开发语言是 kotlin。

开发人员能够依据本人须要采纳 java 语言开发,然而很显著的,我的项目中各种工具类曾经为了 kotlin 做出了很多批改,如果大量采纳 java 开发,后果可能是比纯 java 开发的速度还要慢。

至于为什么要保持采纳 kotlin 开发,之前我有发表过一些文章来形容 kotlin 好用的中央,但还是在应用过程中总会时不时的被 kotlin 惊艳一下。

kotlin 除了齐全兼容 java 之外,还可能在架构中施展不少劣势,除了上面形容的中央,前面的介绍也会波及。

极少的代码量

kotlin 将 java8 中的 stream 一系列的操作,都通过扩大个性,做了极大的简化。

例如 list 转 map users.associate {it.name to it},就省略了大堆繁琐的代码。

编写代码过程中的智能推断变量类型,可能帮忙你防止重复的推断类型,从而把本人绕晕。

对于传入匿名函数,可能防止手动创立函数对象。

对于空指针的“?”操作,可能极大简化对于空变量的判断解决。

等等,诸如此类的操作,如果可能齐全把握,就可能缩小数倍的代码量,学习过概率学的应该明确,更少的动作达到雷同的目标,天然产生问题的概率更小

设计利器

缩小代码量并不是 kotlin 的起点。

如果一个框架齐全由 kotlin 搭建,只利用其个性来督促个别开发者写出更好的业务代码就太节约了。

kotlin 还可能帮忙你补全框架设计中的一些遗憾。

异样抛出

以框架设计中必不可少的业务异样抛出为例。

if (user.id.isNullOrEmpty()) {throw SomeException("user id cannot be empty")
}

这样的代码不可胜数,然而利用简略的扩大个性,就可能以新鲜并且正当的形式抛出异样。

fun Boolean.ifSome(message: String?) = throw SomeException(message)

user.id.isNullOrEmpty().Boolean.ifSome("user id cannot be empty")

这样除非在非凡状况下,否则框架中的任何中央都应用这种形式来抛出异样,即节俭代码,又领有更高的可读性。

这种形式目前 java 有一种工具 manifold 中的扩大性能也可能肯定水平上实现这种办法。

更不便的 json 开发

在框架中封装了 jackson 的应用。

之前的版本,如果想要把 java 对象转换成 jackson 对象,都须要像这样:

val json = Jackson.toJavaObject(user)

于是在使用了扩大之后,发明出了更加好用的转换逻辑。

fun Any.toObject() = Jackson.convertObject(this)
fun Any.toArray() = Jackson.convertArray(this)
fun Any.jsonString() = Jackson.objectToString(this)
inline fun <reified T> Any.convert() = Jackson.convert(this, object : TypeReference<T>() {})

在当前的应用中,任何对象本身都能够在 json 和 javaObject 之间自在的转换,这更加合乎人们的思考逻辑。

kotlin 是否值得信赖?

有一些人对 kotlin 这个语言是否稳固有疑虑。

实际上这一点齐全不须要思考。

一款开发语言可能被公布进去,曾经阐明了所有。

你可能会说,kotlin 在一些极其的状况下,可能会有意料之外的体现,毕竟 koltin 是先编译成 java,因而在简单的状况下,会呈现一些问题。

对此我想说,没有一款语言可能防止这一种状况,对编译器有肯定理解的人,可能针对编译器的编译形式,做写一些匪夷所思的让编译器出错的程序。

就连 java 自身也有一些 bug,你应该在网上遇到过很多对于 jvm bug 的剖析。

尽管这种问题在失常的开发流程中可能会呈现,然而是 kotlin 的起因吗?

很显著不是,因为没有语言能防止,甚至有些不合理的中央都不能称之为 bug,而是个性。

许多人对 jvm 自身都谈不上理解的有多深刻,更加没有去狐疑 kotlin 的理由。

本文参加了思否技术征文,欢送正在浏览的你也退出。

退出移动版