Groovy


Java ist eine beliebte und einfache Programmiersprache, die stets an strenge Regeln festhält. Regeln wie „alles muss in Klassen gekapselt sein“, „Objekte immer und überall“, usw. können einem bei einem kleinen Programm ziemlich auf die Nerven gehen. Abhilfe soll hier eine noch recht neue Programmiersprache mit dem Namen Groovy schaffen.
Die Vorteile von Groovy werden einem als Java-Programmierer schnell ersichtlich und das ist auch gut so, den Groovy ist eine Skriptsprache, die nur von Java-Programmierern als Ergänzung eingesetzt werden sollte. Groovy wird sich als eigenständige Sprache nie durchsetzen, weil die Nachteile und Konkurrenten viel zu stark sind, aber sie ist eine hervorragende Ergänzung zu Java.

Die Hauptvorteile von Groovy sind folgende:

  • Untypisierte Variablen
  • Keine strengen Regeln
  • Einfacherer Umgang mit Dateien
  • Einfacherer Umgang mit XML
  • Einfacherer Umgang mit Datenbanken
  • Closures
  • Einfachere Schleifen

Groovy wird mittlerweile von den besten IDEs (Netbeans, Eclipse, IntelliJ IDEA) unterstützt. Ich benutze eine speziell angepasste Eclipse Version mit dem Namen: SpringSource Tool Suite.

Um Groovy an einem kleinen Beispiel zu demonstrieren habe ich mich für die Lösung des Problems 8 von Project Euler entschieden. Wie immer gibt es natürlich mehrere Lösungsmöglichkeiten, aber ich wählte diese Variante, weil sie viel von Groovy zeigt. Die „1000-digit number“ habe ich einfach kopiert und in die Textdatei problem8.txt gespeichert.

def zahl = ""
def problem8 = new File('problem8.txt')
problem8.eachLine{zahl+= it}

def ergebnis = 0
zahl.eachWithIndex {num,i -> 
	def value = toInt(zahl,i)*toInt(zahl,i+1)*toInt(zahl,i+2)*toInt(zahl,i+3)*toInt(zahl,i+4)
	ergebnis = (ergebnis<value) ? value : ergebnis
}
println "Das Ergebnis ist: ${ergebnis}"

def toInt(def s, def i) { 
	if (i < s.size()) {
		s.getAt(i).toInteger()
	} else {
	0
	}
}

Wie man sieht braucht man sich nicht um die Attributtypen zu kümmern. Die Textdatei ist mit 2 Zeilen Code eingelesen und auch eine lästige For-Schleife entfällt. Methoden kann man einfach und problemlos überall deklarieren und „return“ entfällt bei einfachen Methoden auch. Eine Klasse habe ich nirgends erstellen müssen und die imports fehlen auch.
Das ganze nun mit herkömmlichen Java Code.

import java.io.BufferedReader;
import java.io.FileReader;

public class Main {
    public static void main(String[] args) {
        String zahl = "";
        try {
            BufferedReader in = new BufferedReader(new FileReader("problem8.txt"));
            String zeile = null;
            while ((zeile = in.readLine()) != null) {
                zahl += zeile;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        int ergebnis = 0;
        for (int i = 0; i < zahl.length(); i++) {
            int value = toInt(zahl, i) * toInt(zahl, i + 1) * toInt(zahl, i + 2) * toInt(zahl, i + 3) * toInt(zahl, i + 4);
            if (ergebnis < value) {
                ergebnis = value;
            }
        }
        System.out.println("Das Ergebnis ist: " + ergebnis);
    }

    private static int toInt(String s, int i) {
        if (i < s.length()) {
            return Integer.parseInt("" + s.charAt(i)); //Trick 17
        } else {
            return 0;
        }
    }
}

Das gute an Groovy ist auch, dass man ganz normal mit Java programmieren kann und nur die Features von Groovy nutzen kann, die man für sinnvoll hält. Groovy ist voll kompatibel zu normalem Java Code, wer also gerne die ; hinter jeder Zeile schreibt kann das gerne tun.

Als Java Programmierer kann man also durchaus mal einen Blick auf Groovy werfen, aber für alle anderen ist es eher nicht so empfehlenswert. Wer kein Java kann sollte sich mal Ruby oder Python anschauen oder lieber zuerst Java lernen.

Groovy Doku

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *