值得注意的是,Kotlin提供了一个全面的解决方案。例如,在Kotlin中,我们可以将函数类型定义为:
val sq = { num: Int -> num * num }另一方面,Java 10通过检查右边表达式的类型推断类型。这引入了一些限制。如果我们尝试在Java中执行上述操作,我们会得到一个错误:
类型别名这是Kotlin中一个方便的特性,它允许我们为现有类型分配别名。它不引入新类型,但允许我们使用替代名称引用现有类型,例如:
typealias SerialNumber = StringSerialNumber现在是String类型的别名,可以与String类型互换使用,例如:
val serial: SerialNumber = "FC-100-AC"和下面的代码等价:
val serial: String = "FC-100-AC"很多时候,typealias可以作为一个“解释变量”,提高清晰度。考虑以下声明:
val myMap: Map<String, String> = HashMap()我们知道myMap包含字符串,但我们不知道这些字符串表示什么。我们可以通过引入String类型的别名来澄清这段代码:
typealias ProductId = String typealias SerialNumber = String现在,上述myMap的声明可以改成:
val myMap: Map<ProductId, SerialNumber> = HashMap()上面两个myMap的定义是等价的,但是对于后者,我们可以很容易地判断Map的内容。
Kotlin编译器用底层类型替换了类型别名。因此,myMap的运行时行为不受影响,例如:
myMap.put(“MyKey”, “MyValue”)这种钙化的累积效应是减少了难以捉摸的Bug。在大型分布式团队中,错误通常是由于未能沟通意图造成的。
早期应用早期获得吸引力通常是引入变革的最困难的部分。从确定合适的实验项目开始。通常,有一些早期的采用者愿意尝试并编写最初的Kotlin代码。在接下来的几周里,更大的团队将有机会查看这些代码。人们早期的反应是避免新的和不熟悉的东西。变革需要一些时间来审视。通过提供阅读资源和技术讲座来帮助评估。在最初的几周结束时,更多的人可以决定在多大程度上采用。
对于熟悉Java的开发人员来说,学习曲线很短。以我的经验来看,大多数Java开发人员在一周内都能高效地使用Kotlin。初级开发人员可以在没有经过特殊培训的情况下使用它。以前接触过不同语言或熟悉FP概念会进一步减少采用时间。
未来趋势从1.1版本开始,“协同例程(Co-routine)”就可以用在Kotlin中了。在概念上,它们类似于JavaScript中的async/await。它们允许我们在不阻塞线程的情况下挂起流,从而降低异步编程中的复杂性。
到目前为止,它们还被标记为实验性的。协同例程将在1.3版本中从实验状态毕业。这带来了更多令人兴奋的机会。
Kotlin的路线图在Kotlin Evolution and Enhancement Process(KEEP)的指导下制定。请密切关注这方面的讨论和即将发布的特性。
作者简介Baljeet Sandhu是一名技术负责人,拥有丰富的经验,能够为从制造到金融的各个领域提供软件。他对代码整洁、安全和可扩展的分布式系统感兴趣。Baljeet目前为HYPR工作,致力于构建非集中式的认证解决方案,以消除欺诈,提高用户体验,实现真正的无密码安全。
查看英文原文:An Introduction to Kotlin for Serverside Java Developers
Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx