Hlavní navigace

Groovy: Java má vzdáleného bratrance

Jakub Šťastný

Když se řekne „skriptovací jazyk“, většina lidí si téměř povinně vybaví jazyky jako jsou Perl, PHP, Python nebo Ruby. Skriptovacích jazyků je však celá řada a jedním z nich je právě i Groovy. Byť je Groovy kvantitativně jen jedním z mnoha jazyků, kvalitativně mezi nimi rozhodně vyniká.

Seznámení

Jython, JRuby, BeanShell, Jacl… co vám to říká? Pokud zareagujete, že jsou to skriptovací jazyky běžící pod JVM, máte naprostou pravdu. Groovy je také jeden z nich. Vznikl teprve v roce 2003 a je tedy dost mladý na to, aby se mohl inspirovat z jazyků jako Ruby, Python a Perl, čerpá však také z funkcionálních jazyků, jako jsou například Haskell, Lisp nebo Scheme.

Groovy je silně objektově orientovaný jazyk disponující dynamickým typováním a kompatibilitou s Javou na úrovní bytecode. Do něj je samozřejmě kompilovatelný, zároveň však umožňuje použití jako běžný skriptovací jazyk. Interně podporuje spoustu vestavěných tříd včetně polí, regulárních výrazů, hashů, ale také XML nebo HTML.

V současné době je Groovy ve standardizačním procesu Java Community Process, v němž vystupuje jako JSR 241.

Instalujeme

Zpravidla návod na instalaci vynechávám, protože použití balíčkovacích systémů na sto způsobů dvacetkrát jinak (a osmdesátkrát okopírované z předchozích dílů) asi číst nikoho nebaví, dnes však udělám výjimku. Udělám ji jednak proto, že ne všechny balíčkovací systémy si s Groovy tykají, ale také proto, že Groovy očekává nastavení některých proměnných prostředí. Tedy pojďme na to.

Groovy bydlí na Groovy.codehau­s.org, odkud se také dá stáhnout jako binární balíček. Narozdíl od Jythonu autoři Groovy zaplaťPánBůh neměli nutkavou potřebu udělat si svůj, ještě obskurnější instalátor, než se to povedlo ostatním před nimi a rozumně jednoduše dali k dispozici binárky, za což jim patří můj dík. Stáhnutý archiv rozbalíme do /opt/ a přidáme jej do $PATH:

export PATH="$PATH:/opt/groovy-1.0/bin"

Zároveň bychom měli nastavit proměnnou GROOVY_HOME a – pokud ji ještě nastavenou nemáme – JAVA_HOME. GROOVY_HOME má ukazovat do složky s právě nainstalovaným Groovy (tedy pravděpodobně /opt/groovy-1.0/) a JAVA_HOME do složky s nainstalovaným JDK.

Co v instalaci nalezneme?

Autoři byli štědří a kromě vlastního interpretu nás obdarovali spoustou užitečných utilitek. V první řadě bych se zastavil u Groovy shellu, do kterého se dostanete příkazem groovysh. Je to sice jednoduchá, ale zato velmi účelná utilitka vyhodnocující výrazy jazyka Groovy stejně jako IRB v Ruby a interaktivní konsole Pythonu v Pythonu. GroovySH je bohužel zatím poněkud primitivnější, knihovnu doplňování příkazů pomocí knihovny readline nepodporuje a kód se musí spouštět příkazem go. Nu což, jedná se o mladý projekt, odpusťme mu to.

GroovyShell

Pokud na nějaké obskurní bastlení v příkazové řádce moc nejste, můžete použít GroovyConsole, která obsahuje funkcionalitu GroovySH, ale v grafickém kabátku a v provedení, které má blíže spíše editoru než konsoli. Umožňuje nahlížet do proměnných pomocí „Inspect Variables“ a vůbec se jedná o dosti milou a užitečnou pomůcku.

GroovyConsole

Mnohdy se hodí zkompilovat zdrojový kód v Groovy do javovského bytecode, k čemuž slouží příkaz groovyc. Když už jsme u té konverze, Groovy přináší také utilitku java2groovy sloužící k převodu zdrojového kódu Javy do zdrojového kódu Groovy.

Nabíráme otáčky

Tak, to bychom měli základní seznámení. Fajn, hezký, ale to mám v (sem doplňte svůj oblíbený jazyk) taky. Co už ale zdaleka tak samozřejmé není jsou například closures, česky se tomu zpravidla říká uzávěry. Báječná věc, nemyslíte? Osobně mám dojem, že například pro psaní opravdu hezkých interních DSL jsou skoro nutností, ale přesto je zdaleka ne každý jazyk má. Groovy ano.

Píšeme v Groovy

Ale dost už planých řečí – pojďme si Groovy vyzkoušet na vlastní kůži!

#!/usr/bin/env groovy

/* basic output */
time = new java.util.Date();
println "It's ${time.hours}:${time.minutes}."

/* arrays */
jlanguages = ["Groovy", "JRuby", "Jython"]
items_start_with_J = jlanguages.findAll { it.contains("J") }
items_start_with_J.each { println "* $it" }

def list = ["Rod", "Carlos", "Chris"]
list.findAll { it.size() <= 4 }.each { println "The name shorter than three characters: $it" }

/* OOP */
class Greet {
  def name
  Greet(who) {
    name = who[0].toUpperCase() + who[1..-1]
  }
  def salute() {
    println "Hello $name!"
  }
}

g = new Greet('Dolly')
g.salute()

/* XML 4ever */
println "\n===== It's time for some XML stuff now! ===="

import groovy.xml.MarkupBuilder
def myXMLDoc = new MarkupBuilder()
myXMLDoc.workbook {
   worksheet(caption:"Employees") {
      row(fname:"John", lname:"McDoe")
      row(fname:"Nancy", lname:"Davolio")
   }
   worksheet(caption:"Products") {
      row(name:"Veeblefeetzer", id:"sku34510")
      row(name:"Prune Unit Zappa", id:"sku3a550")
   }
}

println myXMLDoc

Máte? Výborně. Nyní obsah uložte do souboru s příponou groovy a udělte mu právo na spuštění. Nyní máte úplně normální skript, který prostě spustíte. Nemáte-li Groovy při ruce, napovím výstup:

  It's 10:13.
  * JRuby
  * Jython
  The name shorter than three characters: Rod
  Hello Dolly!

  ===== It's time for some XML stuff now! ====
  <workbook>
    <worksheet caption='Employees'>
      <row lname='McDoe' fname='John' />
      <row lname='Davolio' fname='Nancy' />
    </worksheet>
    <worksheet caption='Products'>
      <row name='Veeblefeetzer' id='sku34510' />
      <row name='Prune Unit Zappa' id='sku3a550' />
    </worksheet>
  </workbook>groovy.xml.MarkupBuilder@de7dad

Hezké, nemyslíte? Osobně je mi sice milejší do–end syntaxe než závorkování, ale jinak nemám Groovy co vytknout, naopak oceňuji intuitivnost Groovy. Ačkoliv se nemohu označit za odborníka na programování v Javě a Groovy má hodně javovskou syntaxi a vůbec chování, kódu v Groovy nejen poměrně rozumím, ale dokonce jsem schopen i některé jednoduché příklady napsat sám. To považuji za jednu z nejdůležitějších vlastností jazyka.

Projekty psané v Groovy

Zaujala mě odkazy na různé projekty v Groovy, které naleznete na Groovy homepage. Gant je rozhraní Antu nikoliv přes XML, nýbrž přes DSL v Groovy. Velmi nápadně se podobá systému Rake známého z Ruby. Ještě víc mě zaujaly Grails, což je webový framework silně inspirovaný populárním Ruby on Rails.

Závěr

Abych řekl pravdu, Groovy mě opravdu velmi zaujalo. Má dosti příjemnou syntaxi, velké možnosti a díky jeho vazbě na javovskou platformu má také úžasné možnosti využití jejich výhod, již existujícího kódu a podobně. Věřím, že od všeobecného přijetí Groovy dělí pouze několik let na větší rozšíření komunity a povědomosti o něm.

Groovy odkazy

Anketa

Měli byste zájem o miniseriálek o základech Groovy?

Našli jste v článku chybu?

8. 4. 2015 17:47

sfliuhsd (neregistrovaný)

Sorry, to jakej si programátor se nezjišťuje podle toho, zdali přečteš tu syntaktickou sračku perl ... piš si v něm. Klidně. Ale skutečného programátora to z tebe nedělá.

21. 1. 2008 10:02

Jirka Vysata (neregistrovaný)
Kyosuke, Tialko, Kubo, prosime, ozvi se. Jsme uplne vydeseny, co je s tebou. Pripominam muj mail: j.vysata@centrum.cz

Radi bychom se dozvedeli, ze jeste zijes.

Jirka Vysata (Arrendo)



120na80.cz: Boreliózu nelze žádným testem prokázat

Boreliózu nelze žádným testem prokázat

120na80.cz: Rovnátka, která nejsou vidět

Rovnátka, která nejsou vidět

Lupa.cz: Levný tarif pro Brno nebude, je to kartel

Levný tarif pro Brno nebude, je to kartel

DigiZone.cz: R2B2 a Hybrid uzavřely partnerství

R2B2 a Hybrid uzavřely partnerství

Vitalia.cz: 7 originálních adventních kalendářů pro mlsné

7 originálních adventních kalendářů pro mlsné

Podnikatel.cz: Vládu obejde, kvůli EET rovnou do sněmovny

Vládu obejde, kvůli EET rovnou do sněmovny

Podnikatel.cz: Udávání a účtenková loterie, hloupá komedie

Udávání a účtenková loterie, hloupá komedie

Měšec.cz: Za palivo zaplatíte mobilem (TEST)

Za palivo zaplatíte mobilem (TEST)

Lupa.cz: Co se dá měřit přes Internet věcí

Co se dá měřit přes Internet věcí

Vitalia.cz: Jak vybrat ořechy do cukroví a kde mají levné

Jak vybrat ořechy do cukroví a kde mají levné

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

Vitalia.cz: Test na HIV je zdarma i za pět set

Test na HIV je zdarma i za pět set

Podnikatel.cz: E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

E-Ježíšek si zařádí: nákupy od 2 do 5 tisíc

120na80.cz: Pánové, pečujte o svoje přirození a prostatu

Pánové, pečujte o svoje přirození a prostatu

Vitalia.cz: Nejlepší obranou při nachlazení je útok

Nejlepší obranou při nachlazení je útok

DigiZone.cz: Sat novinky: slovenská TV8 HD i ruský NTV Mir

Sat novinky: slovenská TV8 HD i ruský NTV Mir

DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

Lupa.cz: Kdo pochopí vtip, může jít do ČT vyvíjet weby

Kdo pochopí vtip, může jít do ČT vyvíjet weby

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Podnikatel.cz: Chtějte údaje k dani z nemovitostí do mailu

Chtějte údaje k dani z nemovitostí do mailu