Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Groovy: Java má vzdáleného bratrance

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á.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

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?

       

Jakub Šťastný

Jakub Šťastný

Jakub Šťastný byl v letech 2007 až 2008 redaktorem serveru Root.cz. Mezi jeho zájmy patří Linux, programování a typografický systém TeX.

Školení: IP v 6 na Linuxu

Tento krátký kurz je určený speciálně pro zkušené správce sítí IPv4, kteří se chtějí seznámit s nastupujícím internetovým protokolem IPv6.

Platforma: Linux

  • Adresace
  • Link-local adresy
  • Dynamické přidělování adres
  • a další

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 3,13

Přehled názorů

groovy
bubak 15. 10. 2007 01:35
Nový
├ 
Re: groovy
Šťoural 15. 10. 2007 03:38
Nový
├ 
Re: groovy
mys elf 15. 10. 2007 08:48
Nový
├ 
Re: groovy
Jakub Šťastný 15. 10. 2007 09:15
Nový
└ 
Re: groovy
Milan 15. 10. 2007 09:58
Nový
smalltalk...
Jarda 15. 10. 2007 08:40
Nový
└ 
Re: smalltalk...
Pichi 15. 10. 2007 08:45
Nový
 
└ 
Re: smalltalk...
Petr Krčmář 15. 10. 2007 09:47
Nový
Drobná oprava
truhla 15. 10. 2007 08:47
Nový
├ 
Re: Drobná oprava
truhla 15. 10. 2007 08:48
Nový
│
├ 
Re: Drobná oprava
Jakub Šťastný 15. 10. 2007 09:09
Nový
│
│
└ 
Re: Drobná oprava
prezdivka 15. 10. 2007 16:53
Nový
│
├ 
Re: Drobná oprava
mys elf 15. 10. 2007 09:17
Nový
│
└ 
Re: Drobná oprava
hevimedl 15. 10. 2007 10:05
Nový
└ 
Re: Drobná oprava drobe opravy
prezdivka 15. 10. 2007 16:51
Nový
 
├ 
Re: Drobná oprava drobe opravy
truhla 15. 10. 2007 19:45
Nový
 
└ 
Re: Drobná oprava drobe opravy
Rejpal 15. 10. 2007 23:59
Nový
Funkcionální Smalltalk?
mys elf 15. 10. 2007 08:52
Nový
Grails
pkm 15. 10. 2007 08:58
Nový
└ 
Re: Grails
Jakub Šťastný 15. 10. 2007 09:11
Nový
Trosku nepresnosti
Milan 15. 10. 2007 10:01
Nový
└ 
Re: Trosku nepresnosti
Jakub Šťastný 15. 10. 2007 11:02
Nový
 
└ 
Re: Trosku nepresnosti
anonymní uživatel 16. 10. 2007 08:23
Nový
Každý názor musí mít titulek.
anonymní uživatel 15. 10. 2007 10:53
Nový
├ 
Re: Každý názor musí mít titulek.
Jakub Šťastný 15. 10. 2007 11:04
Nový
├ 
Re: Každý názor musí mít titulek.
dunsun 15. 10. 2007 11:45
Nový
├ 
Re: Každý názor musí mít titulek.
anonymní uživatel 15. 10. 2007 12:33
Nový
└ 
Perl "read only"
anonymní uživatel 15. 10. 2007 14:59
Nový
 
├ 
Re: Perl "read only"
% 15. 10. 2007 15:42
Nový
 
│
└ 
Re: Perl "read only"
anonymní uživatel 15. 10. 2007 17:42
Nový
 
│
 
└ 
Re: Perl "read only"
% 16. 10. 2007 12:51
Nový
 
│
 
 
├ 
Re: Perl "read only"
Michal Vyskocil 16. 10. 2007 14:32
Nový
 
│
 
 
├ 
Re: Perl "read only"
anonymní uživatel 16. 10. 2007 15:03
Nový
 
│
 
 
└ 
Re: Perl "read only"
Rejpal 16. 10. 2007 22:48
Nový
 
└ 
Re: Perl "read only"
anonymní uživatel 15. 10. 2007 15:56
Nový
 
 
├ 
Re: Perl "read only"
anonymní uživatel 15. 10. 2007 16:47
Nový
 
 
├ 
Re: Perl "read only"
anonymní uživatel 15. 10. 2007 20:03
Nový
 
 
├ 
Re: Perl "read only"
zyz 15. 10. 2007 21:25
Nový
 
 
│
└ 
Re: Perl "read only"
Miloš 16. 10. 2007 02:02
Nový
 
 
│
 
└ 
Re: Perl "read only"
mys elf 16. 10. 2007 09:13
Nový
 
 
│
 
 
├ 
Re: Perl "read only"
zyz 16. 10. 2007 10:30
Nový
 
 
│
 
 
│
├ 
Re: Perl "read only"
mys elf 16. 10. 2007 12:25
Nový
 
 
│
 
 
│
│
├ 
Re: Perl "read only"
zyz 16. 10. 2007 12:39
Nový
 
 
│
 
 
│
│
│
├ 
Re: Perl "read only"
mys elf 16. 10. 2007 12:52
Nový
 
 
│
 
 
│
│
│
│
└ 
Re: Perl "read only"
zyz 16. 10. 2007 13:22
Nový
 
 
│
 
 
│
│
│
│
 
└ 
No problem
mys elf 16. 10. 2007 17:56
Nový
 
 
│
 
 
│
│
│
│
 
 
├ 
Re: No problem
mys elf 16. 10. 2007 17:57
Nový
 
 
│
 
 
│
│
│
│
 
 
│
└ 
Re: No problem
zyz 16. 10. 2007 18:35
Nový
 
 
│
 
 
│
│
│
│
 
 
│
 
└ 
Re: No problem
mys elf 17. 10. 2007 00:22
Nový
 
 
│
 
 
│
│
│
│
 
 
├ 
Re: No problem
zyz 16. 10. 2007 19:31
Nový
 
 
│
 
 
│
│
│
│
 
 
│
├ 
Re: No problem
zyz 16. 10. 2007 20:25
Nový
 
 
│
 
 
│
│
│
│
 
 
│
│
└ 
Re: No problem
anonymní uživatel 17. 10. 2007 11:04
Nový
 
 
│
 
 
│
│
│
│
 
 
│
│
 
└ 
Re: No problem
zyz 17. 10. 2007 13:39
Nový
 
 
│
 
 
│
│
│
│
 
 
│
└ 
Re: No problem
samo 17. 10. 2007 17:34
Nový
 
 
│
 
 
│
│
│
│
 
 
│
 
└ 
Re: No problem
mys elf 17. 10. 2007 18:43
Nový
 
 
│
 
 
│
│
│
│
 
 
└ 
Re: No problem
zyz 16. 10. 2007 19:38
Nový
 
 
│
 
 
│
│
│
│
 
 
 
└ 
Re: No problem
mys elf 17. 10. 2007 18:40
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
└ 
Re: No problem
zyz 17. 10. 2007 19:28
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
└ 
Re: No problem
mys elf 17. 10. 2007 19:42
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
 
└ 
Re: No problem
zyz 17. 10. 2007 20:02
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
 
 
├ 
Re: No problem
Rejpal 17. 10. 2007 20:10
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
 
 
│
├ 
Re: No problem
zyz 17. 10. 2007 20:25
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
 
 
│
└ 
Re: No problem
mys elf 17. 10. 2007 22:12
Nový
 
 
│
 
 
│
│
│
│
 
 
 
 
 
 
 
└ 
Re: No problem
mys elf 17. 10. 2007 22:13
Nový
 
 
│
 
 
│
│
│
├ 
Re: Perl "read only"
mys elf 16. 10. 2007 12:57
Nový
 
 
│
 
 
│
│
│
│
└ 
Re: Perl "read only"
zyz 16. 10. 2007 13:34
Nový
 
 
│
 
 
│
│
│
├ 
Re: Perl "read only"
anonymní uživatel 16. 10. 2007 13:08
Nový
 
 
│
 
 
│
│
│
│
├ 
Re: Perl "read only"
ťava 16. 10. 2007 13:16
Nový
 
 
│
 
 
│
│
│
│
├ 
Re: Perl "read only"
zyz 16. 10. 2007 14:13
Nový
 
 
│
 
 
│
│
│
│
│
└ 
Re: Perl "read only"
mys elf 16. 10. 2007 18:05
Nový
 
 
│
 
 
│
│
│
│
│
 
└ 
Re: Perl "read only"
zyz 16. 10. 2007 18:31
Nový
 
 
│
 
 
│
│
│
│
├ 
Re: Perl "read only"
Uzivatel 16. 10. 2007 16:24
Nový
 
 
│
 
 
│
│
│
│
└ 
Re: Perl "read only"
Miloš 16. 10. 2007 17:45
Nový
 
 
│
 
 
│
│
│
├ 
Re: Perl "read only"
Jakub Hegenbart 16. 10. 2007 23:02
Nový
 
 
│
 
 
│
│
│
│
├ 
Re: Perl "read only"
zyz 17. 10. 2007 00:42
Nový
 
 
│
 
 
│
│
│
│
│
└ 
Re: Perl "read only"
Rejpal 17. 10. 2007 00:52
Nový
 
 
│
 
 
│
│
│
│
│
 
└ 
Re: Perl "read only"
zyz 17. 10. 2007 01:21
Nový
 
 
│
 
 
│
│
│
│
│
 
 
└ 
Re: Perl "read only"
wayan 17. 10. 2007 23:36
Nový
 
 
│
 
 
│
│
│
│
│
 
 
 
└ 
Re: Perl "read only"
zyz 18. 10. 2007 12:48
Nový
 
 
│
 
 
│
│
│
│
└ 
Re: Perl "read only"
zyz 17. 10. 2007 00:59
Nový
 
 
│
 
 
│
│
│
│
 
└ 
Re: Perl "read only"
Jakub Hegenbart 17. 10. 2007 01:16
Nový
 
 
│
 
 
│
│
│
│
 
 
└ 
Re: Perl "read only"
Jirka Vysata 21. 1. 2008 10:02
Nový
 
 
│
 
 
│
│
│
└ 
Re: Perl "read only"
wayan 17. 10. 2007 23:55
Nový
 
 
│
 
 
│
│
│
 
└ 
Re: Perl "read only"
zyz 18. 10. 2007 12:51
Nový
 
 
│
 
 
│
│
└ 
Re: Perl "read only"
Rejpal 16. 10. 2007 22:54
Nový
 
 
│
 
 
│
└ 
Re: Perl "read only"
salam 16. 10. 2007 23:15
Nový
 
 
│
 
 
│
 
├ 
Re: Perl "read only"
salam 16. 10. 2007 23:25
Nový
 
 
│
 
 
│
 
│
└ 
Re: Perl "read only"
Pavel Tišnovský 18. 10. 2007 11:31
Nový
 
 
│
 
 
│
 
└ 
Re: Perl "read only"
Rejpal 16. 10. 2007 23:28
Nový
 
 
│
 
 
│
 
 
├ 
Re: Perl "read only"
mys elf 17. 10. 2007 18:49
Nový
 
 
│
 
 
│
 
 
│
└ 
Re: Perl "read only"
salam 18. 10. 2007 14:24
Nový
 
 
│
 
 
│
 
 
│
 
├ 
Re: Perl "read only"
mys elf 18. 10. 2007 16:43
Nový
 
 
│
 
 
│
 
 
│
 
└ 
Re: Perl "read only"
Rejpal 18. 10. 2007 17:05
Nový
 
 
│
 
 
│
 
 
│
 
 
└ 
Re: Perl "read only"
salam 18. 10. 2007 21:52
Nový
 
 
│
 
 
│
 
 
└ 
Re: Perl "read only"
Pavel Tišnovský 18. 10. 2007 11:38
Nový
 
 
│
 
 
│
 
 
 
└ 
Re: Perl "read only"
Rejpal 18. 10. 2007 13:31
Nový
 
 
│
 
 
│
 
 
 
 
└ 
Re: Perl "read only"
Pavel Tišnovský 18. 10. 2007 16:51
Nový
 
 
│
 
 
│
 
 
 
 
 
└ 
Re: Perl "read only"
Rejpal 18. 10. 2007 17:06
Nový
 
 
│
 
 
│
 
 
 
 
 
 
└ 
Re: Perl "read only"
Pavel Tišnovský 19. 10. 2007 10:02
Nový
 
 
│
 
 
│
 
 
 
 
 
 
 
└ 
Re: Perl "read only"
mys elf 19. 10. 2007 22:52
Nový
 
 
│
 
 
└ 
Re: Perl "read only"
Miloš 16. 10. 2007 18:50
Nový
 
 
│
 
 
 
├ 
Re: Perl "read only"
mys elf 17. 10. 2007 10:08
Nový
 
 
│
 
 
 
│
└ 
Re: Perl "read only"
mys elf 17. 10. 2007 18:53
Nový
 
 
│
 
 
 
└ 
Re: Perl "read only"
mys elf 17. 10. 2007 18:56
Nový
 
 
│
 
 
 
 
└ 
Re: Perl "read only"
zyz 17. 10. 2007 19:16
Nový
 
 
│
 
 
 
 
 
└ 
Re: Perl "read only"
wayan 17. 10. 2007 23:50
Nový
 
 
│
 
 
 
 
 
 
├ 
Re: Perl "read only"
mys elf 17. 10. 2007 23:57
Nový
 
 
│
 
 
 
 
 
 
│
├ 
Re: Perl "read only"
xyzzy 18. 10. 2007 08:30
Nový
 
 
│
 
 
 
 
 
 
│
└ 
Re: Perl "read only"
zyz 18. 10. 2007 13:59
Nový
 
 
│
 
 
 
 
 
 
│
 
└ 
Re: Perl "read only"
mys elf 18. 10. 2007 16:41
Nový
 
 
│
 
 
 
 
 
 
└ 
Re: Perl "read only"
Rejpal 18. 10. 2007 09:33
Nový
 
 
└ 
Re: Perl "read only"
mikrom 15. 10. 2007 23:50
Nový
Hlavni prinos Groovy
movk 24. 10. 2007 18:09
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem