Kotlin logo

Kotlin

A concise multiplatform language developed by JetBrains

Einführung in Kotlin für Java-Entwickler*innen

Read this post in other languages:

Gastbeitrag von Urs Peter, Senior Software Engineer und JetBrains-zertifizierter Kotlin Trainer. Für Leser*innen, beim Ausbau ihrer Kotlin-Kenntnisse strukturierter vorgehen möchten, leitet Urs auch das Kotlin Upskill Program an der Xebia Academy.

Dies ist der erste Beitrag der Reihe Der ultimative Leitfaden für den erfolgreichen Einstieg in Kotlin in einer Java-dominierten Umgebung, die der Frage nachgeht, wie sich Kotlin in Teams in der realen Welt verbreitet, beginnend mit der Neugier einer einzelnen Person bis hin zum unternehmensweiten Wechsel.


Man kann nicht einfach einen Schalter umlegen und zu Kotlin wechseln.

Risiken minimieren, Messungen durchführen, Erfolge feiern –

erst dann heißt es: volle Kraft voraus.

Die Einführung von Kotlin in einer etablierten Java-Umgebung ist nicht nur eine technische Entscheidung – es ist ein Prozess, der sorgfältige Planung, strategisches Denken und vor allem die Unterstützung Ihrer Kolleg*innen erfordert.

Nachdem ich mehr als 1.000 Entwickler*innen geschult und zahlreiche Organisationen bei der erfolgreichen Umstellung auf Kotlin begleitet habe, weiß ich, was funktioniert und was nicht. Dieser Leitfaden führt Sie durch bewährte Methoden zur Einführung von Kotlin, die ich im Lauf der Zeit gesammelt habe, von der ersten Experimentierwiese bis hin zur umfassenden Transformation eines Unternehmens.

Dies ist die Reise, auf die Sie unsere Reihe mitnehmen wird:

Am Anfang steht der Funke, der von Ihnen entfacht wird

Am Anfang steht der Funke, der von Ihnen entfacht wird

Warum sollte man den Aufwand betreiben, zu Kotlin zu wechseln? Warum nicht einfach bei Java bleiben und weitermachen? 

Die Antwort hängt von zahlreichen Faktoren ab. Zwar zeigen die Daten in mehreren Bereichen klare Vorteile für Kotlin, aber die Entscheidung ist nicht rein technischer Natur. Subjektivität („Ich mag meine Sprache, weil sie mir einfach gefällt“) und Skepsis gegenüber Neuem, was meist eine sinnvolle Einstellung ist, spielen eine bedeutende Rolle.

Die Entwicklung der Programmiersprachen zeigt jedoch, dass sich unsere Präferenzen und Anforderungen im Lauf der Zeit verändern. Wesentlich ist, dass jede neue Sprachgeneration neue Paradigmen einführt, die Entwickler*innen und Unternehmen entscheidende Vorteile verschaffen: (Null-)Sicherheit, kompakte und leichtgewichtige Syntax, Funktionen als vollwertiger Teil der Sprache, umfangreiche Standardbibliothek, asynchrone Nebenläufigkeit, Multiplattform-Unterstützung, Eignung für KI-Generierung usw.

Ohne diese natürliche Entwicklung würden wir heute noch alles in COBOL oder in irgendeiner anderen archaischen Sprache programmieren und wären außerstande, den Anforderungen der heutigen Zeit gerecht zu werden. Die Weiterentwicklung ist daher nicht optional, sondern gehört untrennbar zur Geschichte unserer Branche dazu.

Damit sich diese Entwicklung jedoch innerhalb eines Unternehmens durchsetzen kann, ist mehr als nur technischer Nutzen vonnöten. Es sind Wegbereiter erforderlich – Personen, die bereit sind, diese neuen Paradigmen zu entdecken, zu fördern und ihren Wert in der Praxis aufzuzeigen. Meiner Erfahrung nach sind es in der Regel drei Arten von Entwickler*innen, die als Katalysatoren zur Einführung von Kotlin beitragen:

  1. Pragmatische, produktivitätsorientierte Java-Entwickler*innen: Erfahrene Entwickler*innen, für die Java ein Werkzeug ist und keine Religion. Sie sind stets auf der Suche nach besseren Möglichkeiten, um die jeweilige Aufgabe schneller zu erledigen.
  2. Qualitätsbewusste Fans moderner Sprachen: Entwickler*innen, die Wert auf lesbaren, kompakten und wartungsfreundlichen Code legen. Dies sind oft dieselben Personen, die in der Vergangenheit zu Scala tendierten.
  3. Junior-Entwickler*innen: Nachwuchskräfte, die eine einfache, aber explosive Frage stellen: „Warum sollte ich Java verwenden, wenn ich auch Kotlin nutzen kann?“ Ohne die langjährige Routine mit Java ist die Entscheidung pro Kotlin für sie oft eine einfache Sache.

Welcher Gruppe gehören Sie an?

Diese frühen Anwender*innen entfachen den Funken für die erste Phase. Aber wo sollten Sie beginnen? Lesen Sie weiter … ;-)

Die Experimentierphase: Bescheiden anfangen – mit Tests

Sie haben also von Kotlin gehört und möchten es ausprobieren, ohne sich sofort festzulegen.

Das erste, was Sie benötigen, ist ein Entwicklungstool, in dem Sie Ihre ersten Kotlin-Samen säen können. Hier sind einige Optionen:

  • https://play.kotlinlang.org/ ist ein hervorragender Online-Playground, in dem Sie Kotlin-Code nicht nur für die JVM, sondern auch für verschiedene andere Plattformen (JS, WASM usw.) schreiben und ausführen können.Kotlin-Sandkasten
  • Kotlin Notebook ist eine leistungsstarke Funktion für IntelliJ IDEA, mit der Sie unkompliziert Abhängigkeiten importieren, Code ausführen und sogar mit Daten arbeiten oder Graphen zeichnen können. Hier ist ein Beispiel, das zeigt, wie einfach Sie mit dem RestClient von Spring einen REST-Aufruf tätigen können:Kotlin Notebook
  • IntelliJ IDEA bietet erstklassige Unterstützung für Kotlin. Dies ist wenig überraschend, da JetBrains der Entwickler von Kotlin ist und ein großer Teil von IntelliJ IDEA in dieser Sprache geschrieben ist. Die Verwendung von Kotlin in IntelliJ IDEA – sogar in einem bestehenden Java-Projekt – ist daher sehr einfach:
    • Für Maven konfigurieren Sie einfach kotlin-maven-plugin und die Kotlin-Standardbibliothek kotlin-stdlib.
    • Für Gradle konfigurieren Sie das Kotlin-Plugin.

Und schon kann es losgehen!

  • Das ist noch nicht alles! JetBrains hat vor Kurzem den Kotlin Language Server veröffentlicht, der eine vollwertige Kotlin-Entwicklungserfahrung in anderen IDEs als IntelliJ IDEA ermöglicht – beispielsweise VS Code. Probieren Sie es aus: https://github.com/Kotlin/kotlin-lsp

Jetzt können Sie in Ihrer bevorzugten Entwicklungsumgebung mit Kotlin programmieren. Wie können Sie nun die Sprache in einem realen Kontext mit minimalem Störpotenzial und maximalem Erkenntnisgewinn ausprobieren? In der Testsuite eines bestehenden Java-Projekts!

Dieser sichere und realistische Ansatz zum Experimentieren mit Kotlin bietet mehrere Vorteile:

  • Wenig Risiko: Tests beeinträchtigen Ihren Produktionscode nicht.
  • Lernchance: Sie können die Merkmale der Sprache in einem vertrauten Kontext erkunden.
  • Schrittweise Einführung: Teammitglieder können sich ohne Druck mit der Kotlin-Syntax vertraut machen.

Tipps

  1. Probieren Sie Kotest + MockK aus: So können Sie die Ausdruckskraft der Test-DSLs von Kotlin (DSL = Domain-Specific Language, also domänenspezifische Sprache) unmittelbar erleben, beispielsweise die umfassenden Assertions (shouldHaveSize(...), Infix-Syntax (value shouldBe 1) usw.
  2. Verwenden Sie die kompakten und leistungsstarken Kotlin-Collections anstelle der Java-Streams.
  3. Experimentieren Sie mit den verschiedenen Sprachmerkmalen wie nullfähige Typen, Destrukturierung, Unveränderlichkeit (val, data class), Ausdruckskonstrukte (when, try-catch, if-else) und so weiter.

Das Ergebnis:

Java

@Test
void shouldGetAverageRating() {
   when(productRepository.findAll()).thenReturn(products);

   Map ratings = productService.averageRatings();

   assertAll(
           () -> assertThat(ratings).hasSize(4),
           () -> assertEquals(ratings, products
                   .stream()
                   .collect(Collectors.groupingBy(
                           Product::getName,
                           Collectors.flatMapping(
                                   p -> p.getRatings()
                                    .stream()
                                    .mapToDouble(Integer::doubleValue)
                                    .boxed(),   
                              Collectors.averagingDouble(Double::doubleValue)
                           )))
           )
   );
   verify(productRepository).findAll();

}

Kotlin

@Test
fun `should get average rating`() { //descriptive tests using ``
   every { productRepository.findAll() } returns products

   val ratings = productService.averageRatings()

   assertSoftly(ratings) { 		//powerful testing DSLs (Kotest)
       shouldHaveSize(4)
       this shouldBe productRepository.findAll()
           .groupBy { it.name }   			//concise collections
           .mapValues { (_, products) -> 		//destructuring
                  products.flatMap { it.ratings }.average() }
   }
    verify { productRepository.findAll() }
}

Im nächsten Teil der Reihe

Der Wechsel zu Kotlin beginnt in der Regel damit, dass eine einzelne Person ein bisschen damit experimentiert und einige Tests sich als nützlich erweisen. Diese ersten Momente der Entdeckung führen naturgemäß zu etwas Größerem: der Evaluierung von Kotlin in einem realen Projekt.

Der nächste Beitrag dieser Reihe geht auf diese Phase ein und zeigt, wie Kotlin in Produktionsumgebungen getestet werden kann.

Urs Peter

Urs ist erfahrener Softwareentwickler, Lösungsarchitekt, Vortragsredner und Dozent mit über 20 Jahren Erfahrung in der Entwicklung robuster, skalierbarer und unternehmenskritischer Systeme, hauptsächlich in Kotlin und Scala.

Neben seiner Tätigkeit als Berater ist er leidenschaftlicher Dozent und Autor einer großen Vielfalt von Kursen, die von Spracheinführungen für Kotlin und Scala bis hin zu Architekturschulungen für Microservices und ereignisgesteuerte Architekturen reichen.

Als kontaktfreudiger Mensch ist er gerne auf Treffen und Konferenzen, um sein Wissen zu teilen, andere zu inspirieren und selbst inspiriert zu werden. Urs ist JetBrains-zertifizierter Kotlin Trainer.

Autorin des ursprünglichen Blogposts

Alyona Chernyaeva

Alyona Chernyaeva

image description