1. Foren
  2. Kommentare
  3. Software-Entwicklung
  4. Alle Kommentare zum Artikel
  5. › Kotlin: Das bessere Java

Groovy: Das bessere Kotlin :-)

  1. Thema

Neues Thema Ansicht wechseln


  1. Groovy: Das bessere Kotlin :-)

    Autor: dark_matter 15.11.20 - 19:22

    Kotlin wird momentan massiv gepushed, deshalb hier eine kurze Darstellung der verwandten Sprache Groovy, der momentanigen #2 unter den JVM Sprachen. Vorneweg: Ich als Groovy Entwickler würde Kotlin gerne mögen, Jetbrains ist eine gute Firma und IntelliJ (haben wir kommerziell im Einsatz) ist eine fantastische IDE (mit nach wie vor dem besten Grooyv Support) - aber es sind genau die Abweichungen die ich leider nicht gelungen finde. Sollte ich eines Tages gezwungen sein, in Kotlin zu entwickeln, wäre das für mich leider ein Rückschritt (Gründe siehe unten) :-/

    # Kontext: Groovy ist im TIOBE Index gerade von 14 auf 11 vorgerückt (die 10 Sprachen vor Groovy sind C, Python, Java, C++, C#, VB, JS, PHP, R, SQL - also die richtigen "Heavyweights der Programmiersprachenwelt"), mit einem 1,51% Rating (danach kommt Scala mit 0,53% auf 29 und Kotlin mit 0,38% auf 36).

    # Groovy ist beliebig mischbar als dynamische wie auch statisch kompilierte Sprache verwendbar (wobei auch im statischen Fall Multimethoden unterstützt werden) (@CompileDynamic/@CompileStatic annotation)

    # Groovy hat alle modernen Annehmlichkeiten, wie Closures (neben Java Lambdas; capturen automatisch die Variablen/Fields im Kontext), Autoproperties, optionale Semicolons am Zeilenende, otionales return Statementm, Multilinestrings, powerful Stringinterpolation "x=$x, x plus y = ${x+y}, x>0?: ${x>0 ? "ja" : "nein"}", Operator Regexsupport (mit spezieller Stringsyntax ( /[^'"]+/ )), etc

    # Es unterstützt Operator Overloading (aber imho sinnvollerweise nicht das Hinzufügen eigener Operatoren, das leider zu sehr unlesbarem Code führen kann)

    # Es fügt eigene Operatoren wie Elvis ( def x = null; return x ?: defaultVal), oder null-safe-Chaining ( a?.b?.c?.d // null sobald ein Chain Member null ist ) hinzu

    # Groovy hat Literal Konstrukte für Listen und Maps ([x,y,z] bzw [a:x, b:y, c:z]), Kotlin leider nicht

    # Groovys Java Sourcecodekompatibilität ist wesentlich höher als die von Kotlin (Das liegt primär an Kotlins Entscheidung, die JavaScript Position von Typen nach dem Namen zu verwenden - macht bei einer hochdynamischen Sprache wie JS vielleicht Sinn, bei einer statischen imho nicht), Java Code ist in 99,999% der Fälle auch identisch lauffähiger Groovy Code.
    Die Aufrechterhaltung dieser Kompatibilität wird auch weiterhin aktiv angestrebt.

    # Groovy ist genauso Java Library (i.e. JAR) kompatibel, verwendet die Standard-Java-Collectiontypen und unterstützt Cross Compilation wie Kotlin

    # Kotlin setzt auf Keywords für Spracherweiterungen, Groovy auf Annotations, was wegen der möglichen Annotationsparameter und des Aufbrechens der Annotationen in feingranulare Unter-Annotationen wesentlich flexibler ist (Bsp: @Canoncical auf Klasse gibt Standardimplementierungen für Konstruktoren, toString, etc; man kann aber auch e.g. @ToString verwenden, das nur toString auto-implementiert)

    # Dadurch, daß man eine Sprache nicht mit Keywords überladen will, bietet Groovy durch das Setzen auf Annotations wesentlich mehr praktische Codegenerierungsautomatismen (AST-Transformationen) als Kotlin; weitere Beispiele sind @InheritConstructors, das während der Kompilierung automatisch alle Konstruktoren der Basisklasse zu der annotierten Klasse hinzufügt (und ohne das ich nicht mehr entwickeln möchte), @Synchronized (wesentlich besser als synchronized Keyword), @Lazy (lazy field initialization, keine (static)-ctor Initialisierung mehr), oder @Immutable (immutable Klasse).

    # Auch dynamisches Groovy ist in den meisten Fällen so schnell wie Java (Note: Groovy wird in allen Fällen zu JVM Bytecode kompiliert)

    # Kotlin hat sich von Groovy u.a. die sehr praktische Syntaxvariante, daß das letzte Closure Argument einer Methode außerhalb der Parameterklammern geschrieben werden kann abgeschaut; e.g.:
    def buttonWithHandler = g.createButton("my groovy button") { p -> /* handle click event params here */ }

    # Groovy kann sowohl als vollwertige Programmiersprache, neben Java, als Skriptsprache, oder zur DSL Erstellung verwendet werden

    # uswusf - muß jetz mal AC Valhalla spielen ;-)

  1. Thema

Neues Thema Ansicht wechseln


Um zu kommentieren, loggen Sie sich bitte ein oder registrieren Sie sich. Sie müssen ausserdem in Ihrem Account-Profil unter Forum einen Nutzernamen vergeben haben. Zum Login

Stellenmarkt
  1. Versicherungskammer Bayern Versicherungsanstalt des öffentlichen Rechts, München
  2. Universität zu Köln, Köln
  3. Esslinger Wohnungsbau GmbH, Esslingen bei Stuttgart
  4. Hornbach-Baumarkt-AG, Bornheim bei Landau / Pfalz

Golem pur
  • Golem.de ohne Werbung nutzen

Anzeige
Hardware-Angebote
  1. (u. a. Ryzen 7 5800X 469€)


Haben wir etwas übersehen?

E-Mail an news@golem.de


  1. BCIX: Vodafone kommt nicht ohne regionales Peering aus
    BCIX
    Vodafone kommt nicht ohne regionales Peering aus

    Vodafone ist mit 100 GBit/s zurück am Peering-Knoten BCIX und feiert dies als Neuerung. Doch erst im August 2020 hatte man das Peering außer Betrieb gesetzt.

  2. Tuxedo Infinitybook S 15: Günstiger und kompakter Linux-Laptop
    Tuxedo Infinitybook S 15
    Günstiger und kompakter Linux-Laptop

    Mit dem Infinitybook S 15 legt Tuxedo ein schlankes und schnelles Linux-Notebook mit vergleichsweise niedrigem Startpreis auf.

  3. Multiplayer: Microsoft erhöht Preis für Xbox Live Gold
    Multiplayer
    Microsoft erhöht Preis für Xbox Live Gold

    Das für Multiplayer nötige Xbox Live Gold wird teurer. Vermutlich will Microsoft mit der Preiserhöhung ein bestimmtes Ziel erreichen.


  1. 19:03

  2. 18:03

  3. 17:41

  4. 17:16

  5. 17:00

  6. 16:42

  7. 16:21

  8. 16:00