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.
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.
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
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 DeclarationMethoden 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