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
2 kommentarer
Det finns också sätt att få samma/liknande förbättringar i Java. Se project lombok: http://peterisberg.com/blog/2012/12/06/project-lombok/ (ej spam).
SvaraJa, project Lombok är helt klart inspirerat av Groovy. Mycket trevligt annotation-lib.
SvaraBTW, jag var också på jDays, men inte på detta seminarium. Jag höll f.ö. en kick-start Android kurs den tredje kursdagen.
Apropå annoteringar; jobbar man med Android utveckling, så är Android Annotations (http://androidannotations.org/) helt klart en stor hjälp.
Skicka en kommentar
Trevligt att du vill dela med dig av dina åsikter! Tänk på att hålla på "Netiketten" och använda vårdat språk.