今天你遇到的每一个后端开发者都会告诉你他们用JavaScript,Python,PHP,或者Ruby进行编程。然而,近年来,选择使用 Kotlin 作为开发网络服务器的语言的人却只占了一小部分。
为什么选择 Kotlin?
Kotlin 是一种多范式的编程语言。它支持许多不同的语言特性。如果某个特性缺失,用 Kotlin 创建包含这个特性的代码并不困难。例如,纯函数式语言 Haskell 使用 . 来组合两个函数。在 Kotlin 中,你可以编写一个执行相同行为的函数。
#0 - 协程
协程是轻量级的类似线程的操作,非常适合并发和编写异步代码。不同于 Java,Kotlin 放弃了多线程的概念,而是采用了挂起函数和协程的方法。协程执行的速度更快,效率更高。甚至可以在同一个线程中执行多个协程。
以下代码取自 KotlinLang.org:
fun main() = runBlocking { // this: CoroutineScope
launch { // launch a new coroutine and continue
delay(1000L) // non-blocking delay for 1 second (default time unit is ms)
println("World!") // print after delay
}
print("Hello, ") // main coroutine continues while a previous one is delayed
}
#1 - 命名参数
在 Kotlin 中,你可以通过使用参数名称和其值来调用函数,无论参数的顺序如何。这使得代码非常易读,更容易调试。在函数定义中使用默认参数和命名参数可以大大增加代码的灵活性。
fun Application.configureRoutes() {
routing {
route("/greet") {
get {
call.respondText(
text = "Hello, World!", // <- 命名参数
status = HttpStatusCode.OK
)
}
}
}
}
#2 - 扩展函数
你在上面看到的也是扩展函数的一个例子。在其他编程语言中,你不能对一个已经存在的类(它是一个只读文件)添加函数。然而,在 Kotlin 中,你可以定义扩展函数,让它们表现得就像是那个特定类的成员。
fun String.countDigits(): Int {
return this.count { it in '0'..'9'}
}
fun main() {
println("hello1234".countDigits())
}
不能改变 String 的定义,但可以用用户定义的函数来扩展它。
#3 - 数据类
数据类在处理后端开发时非常重要。它们(包括列表)可以轻松地序列化为 JSON 数据。数据类用于创建具有原始数据类型的模型对象。只有当复杂的数据类型是数据类(可序列化)时,才能使用复杂的数据类型。
class Order(
val number: Int,
val items: List<String>
)
data class OrderData(
val number: Int,
val items: List<String>
)
fun main() {
val ord1 = Order(1, listOf("Banana"))
val ord2 = Order(1, listOf("Banana"))
val ord3 = OrderData(2, listOf("Apple"))
val ord4 = OrderData(2, listOf("Apple"))
println(ord1) // Order@65b54208
println(ord3) // OrderData(number=2, items=[Apple])
println(ord1 == ord2) // false
println(ord3 == ord4) // true
val ord5 = ord1.copy() // Compilation error
val ord6 = ord3.copy(
items = ord3.items + "Orange" // Modifying the items property
)
println(ord6) // OrderData(number=2, items=[Apple, Orange])
}
请注意,在复制数据类实例时,如何使用命名参数来指定需要修改的属性。
#4 - Kotlin DSL
Kotlin DSL 是 JetBrains 实现的一项出色的功能。这使你可以方便地使用 Kotlin 为任何其他语言编写代码。例如,如果你想在收到请求时返回一个HTML文件,你可以在 Kotlin 中编写一个 HTML DSL 代码,并返回其字符串表示形式。
fun main() {
val htmlContent = html {
head {
title { +"This is Kotlin DSL" }
style {
css(".color-red") {
color = "#ff0000"
}
css("h1") {
cursor = "pointer"
fontSize = "2.5rem"
}
}
}
body {
h1 {
+"Heading 1 is 2.5rem big."
}
p(className = "color-red") {
+"Red"
b { +" and bold" }
}
}
}
println(htmlContent)
}
Kotlin 后端库
Kotlin 提供了许多库...
Ktor
Ktor 是一个可以轻松构建连接应用程序的框架——Web 应用程序、HTTP 服务、移动和浏览器应用程序。现代互联应用程序需要异步才能为用户提供最佳体验,而 Kotlin 协程提供了出色的工具,可以轻松、直接地实现这一点。