{"id":563,"date":"2020-04-15T08:47:00","date_gmt":"2020-04-15T08:47:00","guid":{"rendered":"https:\/\/2020.innosystec.de\/?p=563"},"modified":"2020-12-17T08:48:41","modified_gmt":"2020-12-17T08:48:41","slug":"genug-von-java-mehr-fun-mit-kotlin","status":"publish","type":"post","link":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/","title":{"rendered":"Genug von Java? Mehr fun mit Kotlin."},"content":{"rendered":"\n<p><strong>Von Java zu Kotlin<\/strong><\/p>\n\n\n\n<p>Java war \u00fcber lange Zeit die wichtigste Programmiersprache, die bei INNO eingesetzt wurde. Bedingt durch die Entwicklung dieser Sprache in der j\u00fcngeren Vergangenheit, war es f\u00fcr uns jedoch an der Zeit, nach Alternativen Ausschau zu halten. In Kotlin sind wir f\u00fcndig geworden.<\/p>\n\n\n\n<p>Als JVM Sprache ist Kotlin voll kompatibel mit dem Java-\u00d6kosystem. Damit ist nat\u00fcrlich die erste wichtige H\u00fcrde genommen: Neuentwicklungen in Kotlin lassen sich reibungslos in die bestehende Java-Codebasis integrieren, deren aufw\u00e4ndige Reimplementierung in der neuen Sprache ist nicht n\u00f6tig.<\/p>\n\n\n\n<p><strong>Vorteile von Kotlin<\/strong><\/p>\n\n\n\n<p>Aus Entwicklersicht bietet Kotlin deutliche Vorteile gegen\u00fcber Java. So f\u00e4llt geschriebener Quellcode in Kotlin deutlich k\u00fcrzer und pr\u00e4gnanter aus als in Java, ist dabei aber nicht weniger lesbar. Einiges kann dabei f\u00fcr jemanden mit Java-Hintergrund gew\u00f6hnungsbed\u00fcrftig sein. So wird zum Beispiel per Konvention dazu angehalten, auf Semikolons zu verzichten. Auch werden Variablen per <em><code>val<\/code> <\/em>(final) beziehungsweise <em><code>var<\/code> <\/em>(nicht final) deklariert, Funktionen werden mit <em><code>fun<\/code> <\/em>eingeleitet, <em><code>if\/else<\/code><\/em>-Konstrukte k\u00f6nnen als Ausdr\u00fccke verwendet werden und einiges mehr.<\/p>\n\n\n\n<p>Neben derartigen eher oberfl\u00e4chlichen Sprachmerkmalen, hat Kotlin auch Substantielleres zu bieten. So gibt es sogenannte <em>Data Classes<\/em>, die dem Autor beim Erzeugen von Datenhaltungsklassen das Ausschreiben von <em>Gettern<\/em>, <em>Settern<\/em>, <em><code>hashCode()<\/code><\/em>, <em><code>equals()<\/code><\/em> und <em><code>toString()<\/code><\/em> ersparen. Vielfach bestehen damit derartige Klassen nur aus einer Codezeile, wie beispielsweise:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>data class FooBar(var foo: String, var bar: Int)<\/code><\/pre>\n\n\n\n<p>Eine weitere wichtige Eigenschaft der Sprache, die oft hervorgehoben wird, ist deren Umgang mit dem Wert <code><em>null<\/em><\/code>, beziehungsweise konkret dessen Abbildung im spracheigenen Typsystem. Angenommen es werden zwei Variablen <em><code>s0<\/code> <\/em>und <em><code>s1<\/code><\/em> wie folgt deklariert:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>var s0: String? = \"this is nullable\" var s1: String = \"this is not\"<\/code><\/pre>\n\n\n\n<p>Der Unterschied ist offensichtlich: <em><code>s0<\/code><\/em> kann den Wert <em><code>null<\/code> <\/em>haben, <em><code>s1<\/code> <\/em>jedoch nicht. In beiden F\u00e4llen ist es dem Compiler m\u00f6glich, entsprechende Schutzma\u00dfnahmen durchzusetzen, so dass <em><code>NullPointerExceptions<\/code> <\/em>in aller Regel schon zur Kompilierzeit vermieden werden und nicht zur Laufzeit unangenehm auffallen. Die Zuweisung <em><code>s1 = null<\/code><\/em> w\u00fcrde zum Beispiel, zu einem Kompilierfehler f\u00fchren, da sie gem\u00e4\u00df der Typdeklaration unzul\u00e4ssig ist. \u00c4hnliches gilt f\u00fcr den Ausdruck <em><code>println(s0.length)<\/code><\/em>. Hier gibt es einige M\u00f6glichkeiten mit dem Fall umzugehen, dass <em><code>s0<\/code> <\/em>tats\u00e4chlich <em><code>null<\/code> <\/em>ist. Verwendet werden kann, wie unten dargestellt, der <code>Safe-Call-Operator ?<\/code>, der <em><code>Elvis-Operator ?:<\/code><\/em>, ein <em><code>if\/else<\/code><\/em>-Konstrukt oder sogar der <em><code>Not-Null-Assertion-Operation !!<\/code><\/em>.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>println(s0?.length) \/\/ print the length or \"null\" println((s0 ?: \"\").length) \/\/ \nuse empty string in case s0 is null println(if (s0 == null ) -1 else s0.length) \nprintln(s0!!.length) \/\/ asserts that s0 is in fact not null<\/code><\/pre>\n\n\n\n<p>Letzterer Operator ist mit Vorsicht zu genie\u00dfen, da er wiederum die M\u00f6glichkeit f\u00fcr&nbsp;<em><code>NullPointerExceptions<\/code> <\/em>er\u00f6ffnet, wenn <em><code>s0<\/code> <\/em>in diesem Beispiel trotz der Zusicherung des Autors, tats\u00e4chlich <em><code>null<\/code> <\/em>sein sollte.<\/p>\n\n\n\n<p>Ein letztes Merkmal von dem Kotlin stark profitiert und das hier noch hervorgehoben werden soll, ist der Umgang der Sprache mit Funktionen. Grunds\u00e4tzlich sind diese &#8222;erster Klasse&#8220;, sie k\u00f6nnen also wie Werte jedes anderen Typs benutzt werden und k\u00f6nnen damit zum Beispiel auch auf Paketebene (unabh\u00e4ngig von Klassen) abgelegt sowie anderen Funktionen als Parameter \u00fcbergeben werden <em>(Higher Order Functions)<\/em>. Daneben existieren weitere Mechanismen, wie die sogenannten <em>Extension Functions<\/em>, die den Programmieralltag erleichtern. \u00dcber sie ist es m\u00f6glich eine Klasse, um statisch aufgel\u00f6ste Funktionen zu erweitern, ohne die Klasse selbst zu modifizieren. Auf diesem Weg k\u00f6nnen etwa die klassischen &#8222;Utility&#8220;-Funktionen elegant umgesetzt werden:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>fun String.shorten(): String = if (this.length &gt; 3) this.substring(0..2) + \n\"...\" else this println(\"foobar\".shorten()) \/\/ \"foo...\"<\/code><\/pre>\n\n\n\n<p>Aus diesen und weiteren Gr\u00fcnden hat sich Kotlin bei INNO als die bessere L\u00f6sung etabliert, serverseitig zu entwickeln. Nun ist Kotlin aber plattform\u00fcbergreifend ausgelegt und kann dementsprechend unter anderem auch f\u00fcr Android- und Web-Projekte herangezogen werden. Dar\u00fcber hinaus wird von JetBrains, den Designer der Sprache, die M\u00f6glichkeit ausgebaut, sogenanntes Multiplatform Programming zu betreiben. Hierbei kann Code zwischen unterschiedlichen Plattformen geteilt werden. Wegen alledem hoffen wir, Kotlin in Zukunft noch umfassender einsetzen zu k\u00f6nnen.<\/p>\n\n\n\n<p>Bis dahin sei jedem Interessiertem nahegelegt, die Sprache zum Beispiel \u00fcber <a href=\"https:\/\/play.kotlinlang.org\/koans\/overview\" target=\"_blank\" rel=\"noreferrer noopener\">Kotlin Koans<\/a> auszuprobieren. Wir versprechen eine sehr flache Lernkurve.<\/p>\n\n\n\n<p>Have fun. Enjoy coding.<br>Your INNO coding team.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Von Java zu Kotlin Java war \u00fcber lange Zeit die wichtigste Programmiersprache, die bei INNO eingesetzt wurde. Bedingt durch die Entwicklung dieser Sprache in der j\u00fcngeren Vergangenheit, war es f\u00fcr [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-563","post","type-post","status-publish","format-standard","hentry","category-unkategorisiert"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH\" \/>\n<meta property=\"og:description\" content=\"Von Java zu Kotlin Java war \u00fcber lange Zeit die wichtigste Programmiersprache, die bei INNO eingesetzt wurde. Bedingt durch die Entwicklung dieser Sprache in der j\u00fcngeren Vergangenheit, war es f\u00fcr [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/\" \/>\n<meta property=\"og:site_name\" content=\"INNOSYSTEC GmbH\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/INNOSYSTECGmbH\/\" \/>\n<meta property=\"article:published_time\" content=\"2020-04-15T08:47:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-12-17T08:48:41+00:00\" \/>\n<meta name=\"author\" content=\"w3\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"w3\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3\u00a0Minuten\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/\",\"url\":\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/\",\"name\":\"Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH\",\"isPartOf\":{\"@id\":\"https:\/\/www.innosystec.de\/#website\"},\"datePublished\":\"2020-04-15T08:47:00+00:00\",\"dateModified\":\"2020-12-17T08:48:41+00:00\",\"author\":{\"@id\":\"https:\/\/www.innosystec.de\/#\/schema\/person\/ec4a25292c357bcb3202696c6976cae1\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.innosystec.de\/de\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Genug von Java? Mehr fun mit Kotlin.\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.innosystec.de\/#website\",\"url\":\"https:\/\/www.innosystec.de\/\",\"name\":\"INNOSYSTEC GmbH\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.innosystec.de\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"de\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.innosystec.de\/#\/schema\/person\/ec4a25292c357bcb3202696c6976cae1\",\"name\":\"w3\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"de\",\"@id\":\"https:\/\/www.innosystec.de\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4700db5dfb8049e827291b223a31aaa5977edf9aa60f4527c6aae87814d721b4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4700db5dfb8049e827291b223a31aaa5977edf9aa60f4527c6aae87814d721b4?s=96&d=mm&r=g\",\"caption\":\"w3\"},\"sameAs\":[\"http:\/\/localhost:8888\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/","og_locale":"de_DE","og_type":"article","og_title":"Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH","og_description":"Von Java zu Kotlin Java war \u00fcber lange Zeit die wichtigste Programmiersprache, die bei INNO eingesetzt wurde. Bedingt durch die Entwicklung dieser Sprache in der j\u00fcngeren Vergangenheit, war es f\u00fcr [&hellip;]","og_url":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/","og_site_name":"INNOSYSTEC GmbH","article_publisher":"https:\/\/www.facebook.com\/INNOSYSTECGmbH\/","article_published_time":"2020-04-15T08:47:00+00:00","article_modified_time":"2020-12-17T08:48:41+00:00","author":"w3","twitter_card":"summary_large_image","twitter_misc":{"Written by":"w3","Est. reading time":"3\u00a0Minuten"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/","url":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/","name":"Genug von Java? Mehr fun mit Kotlin. &#8211; INNOSYSTEC GmbH","isPartOf":{"@id":"https:\/\/www.innosystec.de\/#website"},"datePublished":"2020-04-15T08:47:00+00:00","dateModified":"2020-12-17T08:48:41+00:00","author":{"@id":"https:\/\/www.innosystec.de\/#\/schema\/person\/ec4a25292c357bcb3202696c6976cae1"},"breadcrumb":{"@id":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/#breadcrumb"},"inLanguage":"de","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.innosystec.de\/de\/blog\/genug-von-java-mehr-fun-mit-kotlin\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.innosystec.de\/de\/"},{"@type":"ListItem","position":2,"name":"Genug von Java? Mehr fun mit Kotlin."}]},{"@type":"WebSite","@id":"https:\/\/www.innosystec.de\/#website","url":"https:\/\/www.innosystec.de\/","name":"INNOSYSTEC GmbH","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.innosystec.de\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"de"},{"@type":"Person","@id":"https:\/\/www.innosystec.de\/#\/schema\/person\/ec4a25292c357bcb3202696c6976cae1","name":"w3","image":{"@type":"ImageObject","inLanguage":"de","@id":"https:\/\/www.innosystec.de\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4700db5dfb8049e827291b223a31aaa5977edf9aa60f4527c6aae87814d721b4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4700db5dfb8049e827291b223a31aaa5977edf9aa60f4527c6aae87814d721b4?s=96&d=mm&r=g","caption":"w3"},"sameAs":["http:\/\/localhost:8888"]}]}},"_links":{"self":[{"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/posts\/563","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/comments?post=563"}],"version-history":[{"count":1,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/posts\/563\/revisions"}],"predecessor-version":[{"id":564,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/posts\/563\/revisions\/564"}],"wp:attachment":[{"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/media?parent=563"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/categories?post=563"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.innosystec.de\/de\/wp-json\/wp\/v2\/tags?post=563"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}