我的项目中采纳的开发语言是 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 的理由。
本文参加了思否技术征文,欢送正在浏览的你也退出。