[JAVA] Einführung in Ratpack (Extra Edition) - Ratpack in Kotlin geschrieben

Ratpack ist für Java und Groovy geschrieben, funktioniert aber natürlich auch mit JVMs und anderen Sprachen wie Kotlin und Scala. Hier sind einige Tipps, wie es wäre, ein Ratpack in Kotlin zu schreiben. Wenn Sie bessere Ideen haben, teilen Sie diese bitte in den Kommentaren mit.

DSL-ähnliche Beschreibung

Ratpack nutzt Groovys DSL und verfügt daher über Methoden, die Lambdas vielerorts als Argumente heranziehen. Beispielsweise kann der Teil, der den Handler auf dem Server festlegt, wie folgt beschrieben werden.

RatpackServer.start(spec -> {
    spec.handlers(chain -> {
        chain.get("index.html", ctx -> {
            ctx.render(ctx.file("index.html"));
        });
    });
});

Wenn Kotlin am Ende eines Methodenarguments ein Lambda erhält, kann es dieses Lambda außerhalb der Klammern schreiben. Sie können it auch als Platzhalter für Lambda-Argumente verwenden.

RatpackServer.start {
    it.handlers {
        it.get("index.html") {
            it.render(it.file("index.html"))
        }
    }
}

Obwohl es Groovy unterlegen ist, können Sie Code mit einem DSL-ähnlichen Erscheinungsbild schreiben.

Bedienerfunktion

Ratpack verwendet in vielen Teilen eine funktionale Schnittstelle namens "Action". Dies ist das Java 8 "Consumer" -Äquivalent und wird häufig verwendet, um etwas zu konfigurieren. Beispielsweise verwendet die Methode "handlers ()", mit der der Handler auf dem Server festgelegt wird, "Action " als Argument. Wir werden die Zuordnung zwischen URL und Handler in dieser Kette festlegen, aber wenn die Anzahl der Handler in gewissem Maße zunimmt, werden wir diese "Aktion" aufteilen wollen. Die geteilte Aktion kann mit der Methode append () zu einer kombiniert werden. Das mehrmalige Wiederholen von "append ()" macht es jedoch schwierig zu verstehen. Ich möchte wenn möglich die einleitende Notation verwenden. Verwenden Sie Kotlins Operator Overloading, um Operatoren das Kombinieren zu ermöglichen.

operator fun <T> Action<T>.plus(other: Action<in T>): Action<T> = this.append(other)

fun createHandlers() = AccountAction() + HistroyAction() + // ...

Es ist unnötig zu erwähnen, dass eine Überbeanspruchung der Bedienerüberlastung strengstens untersagt ist.

Pair und Destructuring Declaration

Methoden wie "flatRight" in "Promise" sind relativ gebräuchliche und bequeme Methoden zum Gruppieren mehrerer "Promise". Der Rückgabetyp ist der Typ "Paar", bei dem es sich um einen Taple in Ratpack handelt. Tapples sind nützlich, aber in nicht unterstützten Programmiersprachen (dh Java) müssen Sie Methoden wie "left", "right" verwenden, um den Wert zu erhalten, der manchmal ein Anti-Pattern ist.

Kotlin unterstützt den Tapple selbst nicht, sondern verwendet stattdessen eine Funktion namens Destructuring Declaration, um ein Pseudo-Tupple zu erzielen. Dies ist eine Funktion, die durch Teilen jeder "componentN ()" verwendet werden kann, wenn jede Klasse eine "componentN ()" (N ist eine Zahl) Methode hat. Natürlich hat Ratpacks "Paar" keine "component1 ()" -Methode, aber durch die Implementierung als Erweiterungsmethode ist es möglich, eine Pseudo-Partitionszuweisung durchzuführen.

operator fun <T> Pair<T, *>.component1(): T = this.left
operator fun <T> Pair<*, T>.component2(): T = this.right

Solch ein alter Code, der "Paar" aufteilt

authenticator.checkLoggedIn(ctx).flatRight {
    ctx.parse(ReportParameter::class.java)
}.nextOp { pair ->
    val user = pair.left
    val parameter = pair.right
    // (...)
}

Sie können so schreiben.

authenticator.checkLoggedIn(ctx).flatRight {
    ctx.parse(ReportParameter::class.java)
}.nextOp { (user, parameter) ->
    // (...)
}

Der bedauerliche Punkt ist, dass die IDE nicht ergänzt wird und Sie die "import" -Anweisung der Erweiterungsmethode selbst schreiben müssen.

Recommended Posts

Einführung in Ratpack (Extra Edition) - Ratpack in Kotlin geschrieben
Einführung in Ratpack (Extra Edition) - Mit Sentry
Einführung in Ratpack (8) -Session
Einführung in Ratpack (6) --Promise
Einführung in Ratpack (9) - Thymeleaf
Einführung in Ratpack (2) -Architektur
Einführung in Ratpack (5) --Json & Registry
Einführung in Ratpack (7) - Guice & Spring
Einführung in Ratpack (1) - Was ist Ratpack?
Einführung in Algorithmen mit Java-kumulativer Summe
Einführung in Kotlin für iOS-Entwickler lin ー Kotlin-Erstellung
Einführung in Ratpack (3) - Hallo Welt, detaillierte Erklärung
Einführung in Kotlin für iOS-Entwickler ④-Typ
Einführung in Kotlin für iOS-Entwickler ⑤-Practical XML
Einführung in Kotlin für iOS-Entwickler ③-About gradle
Ich möchte irgendwann sogar in Kotlin sein
Einführung in Kotlin für iOS-Entwickler ①-Umgebungskonstruktion
Einführung in Kotlin für iOS-Entwickler ②-Projekterstellung
Wie schreibe ich Java String # getBytes in Kotlin?
Einführung in Ruby 2
HMAC in Kotlin
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
Einführung in Java
Einführung in Doma
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Einführung in Algorithmen mit Java-Dictionary Reihenfolge / Kombination verschiedener Lebensmittel (Teil1)
Verstehen Sie die Eigenschaften von Scala in 5 Minuten (Einführung in Scala)