[x^2 for x in lst]

Programming Groovy 2

Author: Venkat Subramaniam

Review created: 2014-11-27

Programming Groovy 2 är en bok avsedd att hjälpa en van Java-kodare lära sig Groovy. Det är inte en bok som går igenom programmering från grunden, utan detta är något man förväntas kunna. Det görs ofta jämförelser mellan ett Java-program och motsvarande program skrivet i Groovy. Därav rekommendationen att man bör kunna Java innan man ger sig i kast med att läsa boken.

I bokens första kapitel gås det igenom hur man installerar Groovy och vilka olika sätt det finns att exekvera Groovy-program, vilket ju är en bra början. När det är gjort beskrivs ett litet exempelprogram skrivet i Java. Eftersom (i princip...) alla Java-program är Groovy-program, kan detta program sedan förändras bit för bit tills det blivit helt Grrovy-fierat och ser ut som idiomatiskt korrekt Groovy. Detta är ett bra sätt att inleda boken tycker jag. På så sätt kan personer ur den tillänkta målgruppen bilda sig en uppfattning om hur Groovy-program ser ut och vad som skiljer dessa från motsvarande Java-program. Samtidigt kan man avgöra om Groovy är något man tror att man kommer att gilla, eller om det bara är bortkastad tid att fortsätta läsa boken. Det senare tror jag kan inträffa för personer som inte kan tänka att t.ex. skippa paranteser vid anrop av metoder, att [] skapar en ArrayList eller något annat som är ganska annorlunda i Groovy jämfört med i Java. Kan man inte köpa sådana saker är det ingen idé att ödsla tid på att forstätta läsa boken, utan det är bättre att ställa upp den i bokhyllan och använda sin tid till något bättre. Som att koda Python ;)

I efterföljande kapitel behandlas typning och det förklaras vad som menas med att Groovy är ett programmeringsspråk med optional typing. Detta var ett ganska intressant kapitel tycker jag. Det var kul att fundera på de olika typerna av typning det finns samt fördelar och nackdelar med var och en av dem.

Nästa kapitel handlar om en gammal favorit: closures. Det var klart underhållande att läsa om hur sådana implementeras i Groovy. Ett av sätten att skicka med ett closure till en metod gillar jag inte, som jag skrivet om i ett tidigare blogginlädgg (som finns här). Closures verkar användas väldigt frekvent i många Groovy-program så det är nog en god idé att lära sig hur sådana funkar i Groovy om man tänkt sig att använda språket i någon större utsträckning.

Efter ett kapitel om GDK:n (Groovy Development Kit), så kommer boken in på ett område där Groovy verkligen visar sin stryrka: hantering av XML. Det visar sig nämligen att Groovy är mycket kompetent när det gäller sådana saker. Kapitlet går igenom hur XML-dokument kan parsas, skapas och manipuleras på ett antal olika sätt.

Även i fråga om att hantera operationer mot databaser visar sig Groovy vara mycket kompetent. Detta ämne avhandlas i ett eget kapitel där man får lära sig hur mycket smidigare det är att använda Groovy för att koppla upp sig mot en databas än att använda Java/JDBC. Mycket läsvärt.

Mycket läsvärt är även kapitlet om hur man kan få Groovy och Java att samexistera, dvs hur man kan anropa Javakod från Groovy och vice versa. En av de stora fördelarna med Groovy är just att det är lätt att från Groovykod anropa en Java-klass. Man kan alltså använda ett smidigt och uttrycksfullt språk (dvs Groovy) och ändå ha tillgång till den uppsjö av bibliotek, open source såväl som kommersiella, som finns tillgängliga från Java. Detta tycker jag är mycket attraktivt.

De delar av boken som beskrivits ovan tar upp ca 180 av bokens 308 sidor. Resterande del handlar om hur metaprogrammering, dvs att skriva program som manipulerar sig själva eller andra program, kan uttryckas med hjälp av Groovy. Jag har inte pysslat så mycket med metaprogrammering tidigare, så jag tyckte att det var mycket intressant att läsa om det mer generellt men även hur det kan implementeras i Groovy. Det visade sig att det finns många olika sätt att implementera metaprogrammering i Groovy. Klart fler sätt än jag kunde tänkt mig innan jag började kolla på språket. Boken går i detalj igenom de olika sätten och repeterar dessutom varje sätt lite titt som tätt, vilket gör att man efter att ha läst ut boken har en någorlunda klar bild över hur de olika sätten fungerar.

Boken avslutas med ett kapitel om hur man kan använda metaprogrammering för att skapa domänspecifika språk (DSL:er) i Groovy. Klart intressant, även om DSL:er kanske inte är mitt absoluta favoritobjekt.

Sammanfattningsvis kan man säga att det är en bra och relativt grundlig introduktion till programmering i Groovy. Vissa delar av språket (metaprogrammering) behandlas väldigt grundligt.

Boken har en humoristisk ton och är mycket lättläst. Trots detta innehåller den mycket stoff på ganska få sidor. Dock innehåller den inga övningar, så vill man skriva exempelprogram för att lära sig språket så år man hitta på sådana själv eller så får man skriva av eller anpassa exemplen som finns i boken. Dessa (exemplen) tycker jag håller genomgående hög kvalitet.

Boken rekommederas till personer som kan Java och är sugna på att lära sig Groovy. Är man intresserad av metaprogrammering i allmänhet och metaprogrammering i synnerhet är det en måste-ha-bok.

Betyg: 4 av 5.