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 v příkladech: úvod do jazyka

V prvním díle našeho miniseriálku o Groovy se podíváme na základní datové struktury Groovy, na systém typování Groovy, na cykly, boolovské hodnoty a operátory, na komentáře, vyhodnocování proměnných v řetězcích a také na zápis víceřádkových řetězců. A co že to Groovy vlastně je? Jedná se o mladý skriptovací jazyk běžící pod JVM.

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

Typování v Groovy

Tipněte si, jak je typované Groovy :) Od skriptovacího jazyka se obecně očekává dynamické typování, které má i Groovy. Nelze však říci, že Groovy je dynamicky typovaný jazyk, protože Groovy umožňuje i statické typování. To mi přijde jako rozumný kompromis – deklarovat každou proměnnou je protivné, ale někdy se to prostě hodí. Více napoví následující příklad:

// dynamicky
year = 2007
year = "2007"  // OK

// dynamicky s def
def year = 2007
def year = "2007"  // výjimka org.codehaus.groovy.control.MultipleCompilationErrorsException

// staticky
int year = 2007
year = "2007"
year = 2008    // OK
year = "2007"  // výjimka org.codehaus.groovy.runtime.typehandling.GroovyCastException

Co se týče silného vs. slabého typování, Groovy je slabě typovaný jazyk. Někomu to může vyhovovat, ale dle mého názoru to bohužel omezuje vhodnost Groovy pro použití na větší projekty.

// integer + integer
print "5 + 5 = "
println 5 + 5

// string + string
print '"5" + "5" = '
println "5" + "5"

// integer + string
print '5 + "5" = '
println 5 + "5"

// string + integer
print '"5" + 5 = '
println "5" + 5

=> 5 + 5 = 10
=> "5" + "5" = 55
=> 5 + "5" = 55
=> "5" + 5 = 55

Datové typy v Groovy

Groovy je silně objektový jazyk. To, co v klasických programovacích jazycích stylu jazyka C rozumíme jako datové typy jsou v Groovy v zásadě instance objektů:

println "string".class
println 5.class
println 5.5.class
println 5000000000.class
println false.class
println true.class
println null.class
println [1, 2, "foo", new Date()].class

=> class java.lang.String
=> class java.lang.Integer
=> class java.math.BigDecimal
=> class java.lang.Long
=> class java.lang.Boolean
=> class java.lang.Boolean
=> java.lang.NullPointerException
=> class java.util.ArrayList

Zmíněnou ukázku není předpokládám třeba příliš vysvětlovat, metoda class vrací prostě třídu objektu. Přeskočíme čísla, jejichž použití je nad slunce jasné, a řekneme si pár vět k řetězcům.

Řetězce

V Groovy je možné psát víceřádkové řetězce, je však třeba je uvozovat třemi uvozovkami či apostrofy po obou stranách:

"jednořádkový řetězec"

"""
Víceřádkový
řetězec
"""

=> "jednořádkový řetězec"
=> "\nVíceřádkový\nřetězec\n"

Užitečnou možností je vyhodnocení proměnné uvnitř řetězce. To se dělá přiřazením znaku dolaru před jméno proměnné, funguje to však pouze v řetězcích, které jsou uvozeny uvozovkami a nikoliv apostrofy:

object = "pec"
println "$object nám spadla."  // řetězec uvozený uvozovkami
println '$object nám spadla.'  // řetězec uvozený apostrofy

=> pec nám spadla.
=> $object nám spadla.

Pokud se chystáme na nějaké divočejší kutění s proměnnou v řetězci, může se velmi hodit proměnnou a kód s ní spjatý uzavřít do složených závorek, aby Groovy poznalo, co je kód a co už je řetězec:

object = "pec"

println "${object.toUpperCase()} nám spadla."
println '${object.toUpperCase()} nám spadla.'

=> PEC nám spadla.
=> ${object.toUpperCase()} nám spadla.

Komentáře

Stejně jako v Javě Groovy používá dvě lomítka pro řádkový komentář a konstrukci /* */ pro komentář blokový. Klasický unixový komentář hashem nezná, s výjimkou #!/usr/bin/env groovy, které lze použít i v Groovy.

Standardní vstup a výstup

Pro výpis řetězce se stejně jako v mnoha dalších jazycích používá metoda print, pro výpis řetězce ukončený znakem konce řádku metoda println.

Booleovské hodnoty a operátory

V Groovy jsou k dispozici logické hodnoty true, false a null, které se používá pro prázdnou hodnotu. Z booleovských operátorů Groovy logické or ( ||), logické and ( &&) a samozřejmě negaci ( !). To těžko někoho z programátorů překvapí, spíše ale poznamenám, že zápisy výraz or výraz a výraz and výraz v Groovy použít nejdou.

Cykly v Groovy

Cykly jsou již mnohem zajímavější téma. Kromě klasických for, while a podobně má Groovy i cykly z Ruby, jako například kolekce.each { blok }, integer.times { blok } a další, které mi osobně přijdou syntakticky mnohem hezčí a čistší:

// syntakticky hezčí náhražka for cyklu
[1, 2, 3, 4, 5].each { print "$it-" }

// prochází
10.times { println "Iteration $it." }

=> 1-2-3-4-5-
=> Iteration 0.
=> Iteration 1.
=> Iteration 2.
=> Iteration 3.
=> Iteration 4.
=> Iteration 5.
=> Iteration 6.
=> Iteration 7.
=> Iteration 8.
=> Iteration 9.

Do proměnné it se automaticky přiřazují jednotlivé položky procházené kolekce. Pokud si místo it přejeme použít proměnnou námi voleného názvu, použijeme konstrukci { nase_promenna -> zbytek bloku }, například takto:

(1..10).each { number -> println number }

To je totéž, co bychom v Ruby bychom zapsali toto:

(1..10).each { |number| puts number }

A v Pythonu pro změnu:

for number in xrange(1, 10):
  print number

Příště

Tak, a to je pro dnešek vše. V příštím díle stále zůstaneme u vyložených základů Groovy – podíváme na objektový model Groovy, na tvorbu tříd a objektů, možností objektového programování a podobně. V dalších dílech pak plánuji probrat zajímavé projekty v Groovy, jako jsou Grails a Gant a v neposlední řadě také možnosti interakce s Javou.

Odkazy

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í: TCP/IP na Linuxu I.

V tomto kurzu se seznámíte se síťováním v Linuxu na všech vrstvách. Ujasníte si možnosti použití Linuxu v roli klienta, serveru i routeru.

  • Počítačové sítě
  • Architektura TCP/IP
  • Ethernet
  • Protokol PPP
  • Protokoly IPv4 a IPv6
  • IP na ethernetu
  • IP routing
  • Chybové a řídící zprávy
  • Transportní protokoly
  • Překlady jmen a adres
  • Aplikace
  • Překlady síťových adres a proxying
  • Testování sítě
  • Aktuální situace na poli TCP/IP

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

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

Přehled názorů

Groovy X BeanShell
anonymní uživatel 7. 12. 2007 08:29
Nový
zlepsovak
ub 7. 12. 2007 09:57
Nový
proboha proc?
Milan Řezníček 7. 12. 2007 11:03
Nový
└ 
Re: proboha proc?
alblaho 7. 12. 2007 11:59
Nový
 
└ 
Re: proboha proc?
Pavel Tisnovsky 7. 12. 2007 12:05
Nový
Na větší projekty? Klidně!
alblaho 7. 12. 2007 11:51
Nový
└ 
Re: Na větší projekty? Klidně!
respect 7. 12. 2007 19:18
Nový
 
└ 
Re: Na větší projekty? Klidně!
alblaho 7. 12. 2007 23:06
Nový
 
 
└ 
Re: Na větší projekty? Klidně!
respect 7. 12. 2007 23:26
Nový
 
 
 
└ 
Re: Na větší projekty? Klidně!
alblaho 7. 12. 2007 23:52
Nový
 
 
 
 
└ 
Re: Na větší projekty? Klidně!
respect 8. 12. 2007 00:38
Nový
 
 
 
 
 
└ 
Re: Na větší projekty? Klidně!
alblaho 8. 12. 2007 01:41
Nový
 
 
 
 
 
 
└ 
Re: Na větší projekty? Klidně!
respect 9. 12. 2007 15:19
Nový
 
 
 
 
 
 
 
└ 
Re: Na větší projekty? Klidně!
Rejpal 9. 12. 2007 19:05
Nový
 
 
 
 
 
 
 
 
└ 
Re: Na větší projekty? Klidně!
respect 9. 12. 2007 20:34
Nový
No, objektovy ...
anonymní uživatel 10. 12. 2007 08:14
Nový
└ 
Re: No, objektovy ...
Ratafak 11. 12. 2007 10:16
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