Programspråket Groovy kan (lite löst) uttryckas som Java++, dvs en naturlig utvidgning av Java syntaxen för att kortare och bättre lösa ett programmeringstekniskt problem.
Groovy är mitt favoritspråk, eftersom jag kan skriva Java program, som är korta och begripliga utan att förvilla mig i en massa syntaktisk jox. Så låt mig få visa ett konkret exempel på hur det går att korta ned ett Java program till ett mycket kortare Groovy program.
En kopp Java att starta med
Följande Java program hämtar en XML fil (från Brottplatskartan) med de senaste rapporterade brotten/olyckorna och listar trafikolyckorna i kronologisk ordning.
Programkoden i Java är på 150 rader och GitHub gist:en nedan visar både kod och utdata:
Så här kompilerar och exekverar du Java programmet:
Yes> javac -d target/classes src/java/CrimesList.java
Yes> java -cp target/classes CrimesList
Lite mysigare med Groovy
I första steget byter jag namn på filen, så att filändelsen är *.groovy, samt kapar bort en del överflödigt Java jox.
Inga semi-kolon
Vi behöver inte semikolon, så bort med dem i slutet av varje programrad.
GroovyBeans
Det finns en inre JavaBean klass, som vi direkt kan göra om till en GroovyBean i stället. Vi behöver inte getters och setters, eftersom Groovy tillhandahåller dem för oss (kompilerade), om vi deklarerar data-innehållet som properties. Standard metoder som toString(), equals(), hashCode() låter vi kompilatorn generera via annoteringar. Vi utnyttjar också att Java-klassen Date har nya metoder, såsom parse() och passar på att använda spaceship-operatorn (<=>) för att köra compareTo() metoden. Detta gjorde att en JavaBean på nästan 90 rader kan kapas ned till 20 rader. Inte illa!
Lite mer finlir
I huvud-metoden main() gör jag bara några mindre justeringar, vad beträffar utskrifter och en liten closure-loop istf for-each dito.
Ett första resultat
Så här ser Groovy klassen ut (med utdata) och den består av endast 80 rader.
Så här kompilerar och exekverar du Groovy programmet:
Yes> groovy src/groovy/CrimesList_shorter.groovy
Ännu mysigare Groovy
Men, det finns mer ‘Java-jox’ att kapa bort.
Groovy-Script
I Java måste ju all kod vara innesluten i en klass. I Groovy kan vi använda skript i stället. Så, bort med den omgivande applikations-klassen. Jag flyttar också omkring lite kod, så att koden i main() hamnar längsdt ned och Crime-bönan hamnar överst.
Bort med onödiga konstruktorer
Vad ska man med en konstruktor till egentligen? Groovy ger alla klasser utan konstruktor en speciell konstruktor, som tar namn-givna parametrar. Mycket tydligare, än parameter-positionen.
new Crime(title: e.title.text(), date: Date.parse('yyyy-MM-dd HH:mm:ss', e.date.text()), place: e.place.text(), description: e.text.text())
Mer Groovy
I det andra steget tar jag bort alla return-uttryck och använder mig av Groovy closures överallt där det tidigare fanns loopar.
Groovy XML-Parser
Slutligen, strutar jag i att använda Java’s XML-DOM parser och kör med Groovy’s egen som har en del finesser. Först, hämtar jag data och bygger upp ett XML träd.
new XmlParser().parse(url)
Från detta träd av XML noder, filtrerar jag ut alla ‘event’ noder, som en lista.
new XmlParser().parse(url).event
Denna node-lista bygger jag sedan om, så att varje node blir ett Crime objekt i stället.
new XmlParser().parse(url).event.collect {e -> new Crime(...)}
Slut-resultatet
Så, jag började med en Java klass på 150 rader och slutar här nedan med ett Groovy-script på blott 30 rader. Visst är det mysigt?
Så här kompilerar och exekverar du Groovy programmet:
Yes> groovy src/groovy/CrimesList_shortest.groovy
PS
Tråkigt nog, hann det inträffa några fler trafik-olyckor mellan att jag körde Java programmet och Groovy programmen.