Какие фреймворки для Kotlin вы использовали?

Ответ

Kotlin — это язык, а не фреймворк. Он часто используется со следующими фреймворками и библиотеками:

  1. Spring Boot (с Kotlin): Основной фреймворк для enterprise-разработки. Kotlin предлагает более лаконичный и безопасный синтаксис.

    @RestController
    class UserController(val userService: UserService) {
        @GetMapping("/users/{id}")
        fun getUser(@PathVariable id: Long): ResponseEntity<User> =
            userService.findById(id)?.let { ResponseEntity.ok(it) } 
                ?: ResponseEntity.notFound().build()
    }
  2. Ktor: Асинхронный фреймворк от JetBrains для создания серверов и клиентов.

    fun main() {
        embeddedServer(Netty, port = 8080) {
            routing {
                get("/") { call.respondText("Hello Ktor!") }
                route("/api") {
                    get("/users") { /* ... */ }
                }
            }
        }.start(wait = true)
    }
  3. Exposed: Легковесная ORM/DSL библиотека для Kotlin.

    object Users : Table() {
        val id = long("id").autoIncrement()
        val name = varchar("name", 50)
        override val primaryKey = PrimaryKey(id)
    }
    // Запрос
    val users = Users.selectAll().map { it[Users.name] }

Преимущества Kotlin: null-безопасность, корутины для асинхронности, data-классы, extension-функции.

Ответ 18+ 🔞

А, ну это ж классика, блядь! Сейчас объясню, как есть, без этих ваших заумных слов. Слушай сюда, только не перепутай, а то потом будешь как Герасим — «Му-му» говорить, а нихуя не понимать.

Вот смотри, Котлин — это не какая-то там подставка под жопу, типа фреймворка. Это именно язык, сука! Как русский или английский, только для разговора с компьютером. А на нём уже можно болтать, используя разные «акценты» — это и есть фреймворки.

Первый акцент, овердохуищный по серьёзности — Spring Boot. Это как наш Лев Толстой, блядь, только для энтерпрайза. Все банки, госуслуги и прочая хуйня на нём сидят. На Котлине с ним писать — одно удовольствие, потому что код в два раза короче и не выстрелит тебе в ногу на ровном месте из-за какого-нибудь NullPointerException, который на Java был бы гарантирован.

@RestController
class UserController(val userService: UserService) {
    @GetMapping("/users/{id}")
    fun getUser(@PathVariable id: Long): ResponseEntity<User> =
        userService.findById(id)?.let { ResponseEntity.ok(it) } 
            ?: ResponseEntity.notFound().build()
}

Видишь? Всё чётко, без воды. Нашёл юзера — отдал. Не нашёл — послал нахуй с 404. Красота, ёпта!

Дальше, Ktor. Это уже не толстовский размах, а что-то более лёгкое и быстрое, от самих создателей Котлина. Представь, что Spring Boot — это поход в оперный театр в смокинге, а Ktor — это нажраться пива с друзьями у костра и петь песни под гитару. Быстро, асинхронно, без лишнего официоза.

fun main() {
    embeddedServer(Netty, port = 8080) {
        routing {
            get("/") { call.respondText("Hello Ktor!") }
            route("/api") {
                get("/users") { /* ... */ }
            }
        }
    }.start(wait = true)
}

Запустил — и сервер готов, блядь! Никаких этих томкатов, в рот меня чих-пых!

Ну и для работы с базой — Exposed. Это не монстр типа Hibernate, который тебе полпроекта сгенерирует, а ты потом месяц будешь разбираться, что он там наоткладывал. Exposed — это как взять и написать SQL, но красивыми котлиновыми словами.

object Users : Table() {
    val id = long("id").autoIncrement()
    val name = varchar("name", 50)
    override val primaryKey = PrimaryKey(id)
}
// Запрос
val users = Users.selectAll().map { it[Users.name] }

Прям видно, что за таблица и что от неё нужно. Никакой магии, чистая логика.

А в чём, собственно, сила-то, брат? А сила, сука, в фичах!

  • Null-безопасность. Компилятор тебе не даст запихнуть null туда, где его быть не должно. Прощай, NullPointerException, ты пидарас шерстяной!
  • Корутины. Это для асинхронности. Вместо этого ада с колбэками, который мозг выносит, пишешь почти линейный код, а он сам всё красиво делает в фоне.
  • Data-классы. Хочешь создать класс, который только данные хранит? Одна строка, и готово! Геттеры, сеттеры, equals, hashCode — всё нате, получайте, не обляпайтесь.
  • Extension-функции. Это вообще магия. Можешь взять чужой класс, хоть String, и прилепить к нему свою функцию, как будто она там всегда была. «Ёбаный насос!» — скажешь ты, когда попробуешь.

Вот и весь сказ. Котлин — это не фреймворк, это язык, на котором можно удобно и с меньшей болью в жопе использовать любые фреймворки. Пиздец, как удобно!