Kroz ovaj post pokušat ću vam približiti programski jezik Groovy. Pa, što je Groovy? Prema definiciji s http://groovy.codehaus.org: Groovy je agilni dinamični jezik za Java platformu u mnogo toga inspiriran jezicima poput Pythona, Ruby i Smalltalka. Napredne opcije tih jezika približene su Java programerima kroz sintaksu jako sličnoj Java sintaksi. Na taj način Java programeri mogu koristiti neke programske konstrukte o kojima se tek priča da će se dodati u Javu, npr. closures. Zašto čekati i ne iskoristiti te napredne funkcionalnosti već danas koristeći Groovy? Nekima, bi zapreka mogla biti činjenica da je Groovy dynamicly typed jezik. Većina grešaka će biti otkrivena tek u runtime-u. Drugi će biti oduševljeni jer se više ne moraju brinuti o tipiziranju varijabli.
Groovy se često naziva i skriptnim jezikom, ali daleko od toga da je dobar samo za pisanje skripti. Ali ako je pisanje skripti vaš ulazak u Groovy svijet, samo naprijed! Za početak neke osnovne informacije o Groovy-u:
skripte/klase se obično nalaze u .groovy datotekama
skripte se mogu interpretirati ili se mogu kompajlirati u Java .class biblioteke
Groovy u većinu poslovnih aplikaciju ne unosi značajnu degradaciju u performansama
iz Groovy-a možemo zvati Java kod (i obrnuto)
većina Java ključnih riječi ima isto značenje i u Groovy-u
redoslijed package, import, class deklaracija je isti kao i u Java-i
Groovy već unaprijed importira pakete groovy.lang.*, groovy.util.*, java.lang.*, java.util.*, java.net.* i java.io.*
u Groovy-u sve je objekt (nema primitivnih tipova)
Groovy ima ugrađenu podršku za kolekcije (def praznaLista = [])
Groovy olakšava rad sa stringovima, datumima, I/U
dolazi s podrškom za rad s JDBC-om, XML-om
Lista dobrih strana bi mogla biti višestruko duža. Za detaljnije upoznavanje preporučam Groovy homepage: http://groovy.codehaus.org. Mogućnosti Groovy-a pokazat ću kratkom skriptom koja će nam dati aktualnu (ili arhivsku) tečajnu listu. Kao izvor koristit ćemo XML datoteku dostupnu na stranicama Erste banke.
def lista = new XmlSlurper().parse(procitajTecajnuIz)
lista.valuta.each(this.&printTecaj)
printSrednjiZaValutu(lista, 'EUR')
Skripta će ispisati:
001 AUD = 4,273200 kn
001 CAD = 4,870200 kn
001 CZK = 0,279000 kn
001 DKK = 1,003300 kn
100 HUF = 2,724900 kn
100 JPY = 5,576900 kn
001 NOK = 0,839700 kn
001 SEK = 0,691300 kn
001 CHF = 4,926700 kn
001 GBP = 8,660800 kn
001 USD = 5,343700 kn
001 BAM = 3,819300 kn
001 EUR = 7,345000 kn
001 PLN = 1,667400 kn
Srednji tečaj za EUR na datum 10.06.2009. iznosi 7,345000 kn.
Nije loše za 15 linija koda. Morate priznati da bi se isto teško moglo postići koristeći Javu. Svi znamo da je svaka linija koda potencijalni izvor bug-a. U konačnici radije bi održavali 15 linija skripte nego 100-tinjak linija Java koda, zar ne?
Kratki opis koda:
def printTecaj(tecaj) {
println "$tecaj.jed $tecaj.opis = $tecaj.t3 kn"
}
Ovdje vidimo primjer tipične definicije metode u Groovy-u. Kao povratni tip stoji ključna riječ „def“ što bi značilo „dynamicly typed“ tj. metoda vraća bilo koji tip. Parametar metode nije potrebno tipizirati pa koristimo samo ime, „tecaj“. U tijelu metode nalazi se samo jedna linija koja će ispisati na konzolu tečaj koristeći tzv. parametrizirani „GString“.
println "Srednji tečaj za $valuta na datum $lista.datum iznosi $zaValutu.t3 kn"
}
U definiciji ove metode je nova klozura (closure) koja se koristi u pretrazi liste tečaja po određenoj valuti. Klozure možemo prepoznati po vitičastim zagradama, a razlikuju se od definicija metoda po tome što nemaju imena i definicije parametara.
Za metodu linkZaTecajnu je posebno to što vidimo da možemo koristiti još jednu funkcionalnost koju Java nema, defaultne vrijednosti parametara metode (def datum = new Date()). Također vidimo da smo stavili def ispred datum, ali nismo trebali, Groovy je jako fleksibilan. Ključnu riječ return nije potrebno pisati. Povratna vrijednost će biti rezultat zadnje izvršene linije u metodi. U ovom slučaju povratna vrijednost je tipa GString.
def lista = new XmlSlurper().parse(procitajTecajnuIz)
lista.valuta.each(this.&printTecaj)
printSrednjiZaValutu(lista, 'EUR')
Pošto smo definirali nekoliko pomoćnih metoda sada nam je lako ispisati tečajnu listu i ispisati srednji tečaj za euro. Tečajnu listu istim kodom možemo pročitati sa interneta ili (već spremljenu) s diska. Parsiranje XML-a radimo jednom linijom koda koristeći XmlSlurper. To je jedna od Groovy klasa koja olakšava rad s XML-om. Pošto smo pročitali XML, sa xml strukturom radimo kao Java/Groovy objektnom strukturom. Iako su ove linije koda jasne mogli bismo se zapitati što znači this.&printTecaj. Konstruktom instanca.& koristimo već definiranu metodu kao klozuru i predajemo je kao parametar metodi each. Veoma zgodno.
Nadam se da Vam se kroz ovih par linija koda Groovy dopao. Malo linija čini čuda, no potrebno je vremena kako bi se steklo iskustvo. Uza sve, Groovy bi nam mogao pomoći da postanemo još bolji programeri u Javi primjenjujući koncepte iz Groovy-a. Također, ne smijemo zanemariti dobrobit potencijalnog oduševljenja mogućnostima Groovya, što će zasigurno dići radni moral i neke podsjetiti na ushićenje kada su prvi put u Pascalu/Basicu uspjeli iscrtati grafiku na ekran :-). Na kraju pozivam Vas da skinete najnoviju verziju s http://groovy.codehaus.org i napišete pokoju zgodnu skriptu ili programčić.