{"id":556,"date":"2021-07-04T18:57:38","date_gmt":"2021-07-04T16:57:38","guid":{"rendered":"https:\/\/www.iot-embedded.de\/iot-2021\/?p=556"},"modified":"2021-07-04T19:01:26","modified_gmt":"2021-07-04T17:01:26","slug":"der-weg-von-java-zu-kotlin","status":"publish","type":"post","link":"https:\/\/www.iot-embedded.de\/iot-2021\/air-quality\/der-weg-von-java-zu-kotlin\/","title":{"rendered":"Der Weg von Java zu Kotlin"},"content":{"rendered":"\n<p>Ein wichtiger Teil unseres Projekts ist die AirQuality-App, die wir unseren Kunden anbieten wollen. Da wir im Team bereits Erfahrungen bei der Entwicklung mobiler Applikationen mitbrachten, st\u00fcrzten wir uns darauf.<\/p>\n\n\n\n<p>Doch es gab mittlerweile neue Entwicklungen\u2026<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" loading=\"lazy\" width=\"1024\" height=\"680\" src=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/07\/ux-788002_1280-1024x680.jpg\" alt=\"\" class=\"wp-image-560\" srcset=\"https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/07\/ux-788002_1280-1024x680.jpg 1024w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/07\/ux-788002_1280-300x199.jpg 300w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/07\/ux-788002_1280-768x510.jpg 768w, https:\/\/www.iot-embedded.de\/iot-2021\/wp-content\/uploads\/sites\/5\/2021\/07\/ux-788002_1280.jpg 1280w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Wir hatten durch die Vorlesung &#8222;Mobile Applikationen&#8220; Erfahrungen mit Java in Android. Allerdings war nun die Programmiersprache Kotlin, die ebenfalls wie Java nach einer Insel benannt wurde, seit Mai 2019 die von Google bevorzugte Sprache f\u00fcr die Android-App-Entwicklung. &#8222;Kotlin-first&#8220; nannte Android das Projekt zur Umstellung von Java auf Kotlin (<a href=\"https:\/\/developer.android.com\/kotlin\/first\">Android&#8217;s Kotlin-first approach<\/a>). Also hie\u00df es f\u00fcr uns, sich mit Kotlin vertraut zu machen.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Was ist eigentlich Kotlin?<\/strong><\/p>\n\n\n\n<p>Kotlin ist eine recht junge Programmiersprache, die vom russischen Unternehmen JetBrains entwickelt wurde. Sie ist eine typisierte High-Level-Programmiersprache und \u00e4hnelt Java, C++ und C. Wie auch bei diesen Programmiersprachen wird der Hauptcode einer in Kotlin programmierten Anwendung in die main Routine geschrieben.<\/p>\n\n\n\n<p>Kotlin wird in Projekten eingesetzt, die fr\u00fcher mit Java realisiert wurden, wie zum Beispiel bei der Programmierung mobiler Anwendungen auf der Plattform Android. In diesem Zuge sind auch wir auf sie gesto\u00dfen. Gut ist, dass Kotlin mit allen heute bekannten Java-Libraries und Frameworks funktioniert und zum Gl\u00fcck mit Java kompatibel ist. Das bedeutet zum Beispiel, dass ein Code, der mit Kotlin erstellt wird, auch aus Java-Klassen heraus angesprochen werden kann. Andersherum k\u00f6nnen Java-Klassen auch in Kotlin genutzt werden. Vorhandene Java-Projekte k\u00f6nnen zudem problemlos &#8211; ohne funktionale Verluste &#8211; in Kotlin umgeschrieben oder meistens sogar automatisch konvertiert werden.<\/p>\n\n\n\n<p>Auch spannend ist das ViewModel. Ein ViewModel enth\u00e4lt die Pr\u00e4sentationslogik und ist die Schnittstelle zwischen Model, die das Datenmodell repr\u00e4sentiert, und View, welches das Layout ohne Logik beinhaltet. Das Wichtigste dabei ist, dass das ViewModel keine Informationen \u00fcber die konkrete Implementierung enth\u00e4lt. Der Vorteil davon ist, dass das View bidirektional kommuniziert. Entsprechend reagiert die View auf \u00c4nderungen an Variablen, die aus dem ViewModel kommen, w\u00e4hrend das ViewModel im Gegenzug auch auf \u00c4nderungen aus der View reagiert.<\/p>\n\n\n\n<p>Dem gegen\u00fcber steht das klassische MVC-Modell in Android mit Activities und Fragments als Controller. Es hat das Problem, dass diese unter anderem beim Rotieren des Bildschirms neu erzeugt werden. Dabei gehen alle im Controller gespeicherten Daten verloren, die nicht manuell einzeln persistiert sind. Wird eine Netzwerkanfrage get\u00e4tigt, w\u00e4hrend Fragment oder Activity neu erzeugt werden, l\u00e4uft deren Ergebnis ins Leere. Ein ViewModel ist dagegen vom Lebenszyklus von Activites und Fragments entkoppelt. Wenn diese neu erzeugt werden, verbindet sich die gleiche ViewModel-Instanz mit der neuen Activity beziehungsweise dem neuen Fragment, wobei alle Daten und Callbacks erhalten bleiben. Ein weiterer Vorteil ist die klare Trennung von Verarbeitungs- und Pr\u00e4sentationslogik, was zur einer verbesserten Testbarkeit und zu einem &#8222;saubereren&#8220; Code f\u00fchrt.<\/p>\n\n\n\n<p class=\"has-medium-font-size\"><strong>Kotlin vs. Java<\/strong><\/p>\n\n\n\n<p>Vorteile von Kotlin:<\/p>\n\n\n\n<ul><li><em>Kotlin ben\u00f6tigt weniger Code-Zeilen<\/em>: Es hat eine einfache Syntax. Je nach Fall kann die Codemenge beim konvertieren von Java zu Kotlin um 40% reduziert werden, wobei die Funktionalit\u00e4t gleich ist.<\/li><\/ul>\n\n\n\n<ul><li><em>NullException-Pr\u00fcfung ist \u00fcberfl\u00fcssig<\/em>: Kotlin l\u00e4sst im Gegensatz zu Java nicht zu, dass eine NullPointerException beim Kompilieren und Ausf\u00fchren von Code ausgel\u00f6st wird.<\/li><\/ul>\n\n\n\n<p>Nachteile von Kotlin:<\/p>\n\n\n\n<ul><li><em>Java hat mehr Experten<\/em>: Kotlin ist recht neu (existiert seit 2011), deshalb gibt es noch nicht so viele Entwickler und Experten. Die erste Java-Version kam im Gegenzug bereits 1992 auf dem Markt und hat sich eine gro\u00dfe Community aufgebaut.<\/li><\/ul>\n\n\n\n<ul><li><em>K\u00fcrzer bedeutet nicht gleich \u00dcbersichtlicher<\/em>: Java ist ausf\u00fchrlicher und baut sich Schritt f\u00fcr Schritt auf, ohne etwas wegzulassen oder zu verk\u00fcrzen, dadurch wird die Nachvollziehbarkeit verbessert.<\/li><\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Ein wichtiger Teil unseres Projekts ist die AirQuality-App, die wir unseren Kunden anbieten wollen. Da wir im Team bereits Erfahrungen bei der Entwicklung mobiler Applikationen mitbrachten, st\u00fcrzten wir uns darauf. Doch es gab mittlerweile neue Entwicklungen\u2026 Wir hatten durch die<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[7],"tags":[37,39,38],"_links":{"self":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/556"}],"collection":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/comments?post=556"}],"version-history":[{"count":7,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/556\/revisions"}],"predecessor-version":[{"id":566,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/posts\/556\/revisions\/566"}],"wp:attachment":[{"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/media?parent=556"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/categories?post=556"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.iot-embedded.de\/iot-2021\/wp-json\/wp\/v2\/tags?post=556"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}