Groovy
| Groovy | |
| | |
| Druh | objektovo orientovaný, funkcionálny, skriptovací[1] |
|---|---|
| Dátum vzniku | 2003[2] |
| Typová kontrola | dynamická, statická, silná[1] |
| Tvorca | James Strachan[2] |
| Používané prípony | .groovy, .gvy, .gy, .gsh[3] |
Groovy ([gruːvi]), oficiálne Apache Groovy,[1] je objektovo orientovaný programovací jazyk pre platformu Java.[4] Ide o alternatívu k programovaciemu jazyku Java.[2] Možno naň pozerať ako na skriptovací jazyk pre javovskú platformu.[5] Inšpiráciu čerpal z jazykov Python, Ruby, Perl a Smalltalk.[4] Využíva výhody objektového programovania, ale zároveň poskytuje zjednodušenú "skriptovaciu" syntax, ktorá vie "zabaliť a rozbaliť" často opakované časti kódu. Jedným z jeho cieľov je redukovať "povinný" kód a zjednodušiť tak tvorbu webových, databázových či desktopových aplikácií. Kompilácia je vykonávaná priamo do bajtkódu, takže ho môžeme použiť všade tam, kde funguje Java.[6] Od verzie 2.0 z roku 2012 podporuje okrem dynamického aj statické typovanie: statickú typovú kontrolu a statickú kompiláciu, ktorá prináša výkon porovnateľný s Javou.[5] Od roku 2015 je projektom nadácie Apache Software Foundation.[4]
História
[upraviť | upraviť zdroj]James Strachan predstavil Groovy na svojom blogu 29. augusta 2003 ako dynamický jazyk navrhnutý priamo pre platformu Java, ktorý mal spojiť prednosti jazykov Python a Ruby s možnosťou opätovne používať, rozširovať a testovať existujúci kód v Jave.[2] V marci 2004 bol jazyk predložený na štandardizáciu v rámci procesu Java Community Process ako JSR 241.[6] Verzia 1.0 vyšla 3. januára 2007 a verzia 1.5 7. decembra 2007.[7] V apríli 2007 získal Groovy prvú cenu v súťaži inovácií na nemeckej konferencii JAX.[8]
V novembri 2008 kúpila spoločnosť SpringSource firmu G2One, ktorú v roku 2007 založili hlavní vývojári Groovy a Grails Guillaume Laforge, Graeme Rocher a Alex Tkachman.[9] V auguste 2009 kúpila spoločnosť SpringSource firma VMware.[10] V apríli 2012 vedúci špecifikácie označil JSR 241 za nečinnú (dormant).[6] Verzia 2.0, vydaná 28. júna 2012, priniesla statickú typovú kontrolu, statickú kompiláciu, podporu inštrukcie invokedynamic z JDK 7 a rozdelenie jazyka na menšie moduly.[7][5]
Spoločnosti SpringSource, VMware a následne Pivotal sponzorovali projekty Groovy a Grails až do 31. marca 2015.[11] V marci 2015 bol Groovy prijatý do inkubátora nadácie Apache Software Foundation[12] a 18. novembra 2015 sa stal jej projektom najvyššej úrovne (top-level project).[4] Verzia 3.0 vyšla 7. februára 2020, verzia 4.0 25. januára 2022, verzia 5.0 21. augusta 2025 a verzia 6.0 22. septembra 2026.[7] K 21. októbru 2026 je najnovšou stabilnou verziou 5.1.3.[7][13]
Nastavenie prostredia
[upraviť | upraviť zdroj]Pre vývoj v jazyku Groovy je treba stiahnuť binárnu distribúciu napr. z domovskej stránky.[14] A mať nainštalované vývojové prostredie Java. Potom už len stačí nastaviť niektoré premenné prostredia:
- Pridať GROOVY_HOME premennú na adresár, v ktorom je uložená distribúcia
- Do PATH premennej pridať cestu do adresára GROOVY_HOME / bin
- A nastaviť JAVA_HOME premennú na adresár, v ktorom je JDK.[14]
Následne je možné spustiť groovy shell príkazom groovysh alebo GUI konzolu príkazom groovyConsole.[14]
Niektoré vlastnosti jazyka Groovy
[upraviť | upraviť zdroj]Jednoduchým príkladom môže byť vypísanie vety "Ahoj, svet!" na konzolu. V Jave je treba okrem samotného príkazu definovať triedu a hlavnú metódu:
class AhojSvet {
public static void main(String args[]) {
System.out.println ("Ahoj, svet!");
}
}
Rovnaký výsledok je v jazyku Groovy možné dosiahnuť napríklad nasledujúcim jednoduchým spôsobom:
println "Ahoj, svet!"
Takže Groovy doplní všetok ostatný kód (definíciu triedy a hlavné metódy, detaily syntaxe ako sú zátvorky) potrebný pre preklad v Jave. Jednotlivé príkazy nie je potrebné zakončovať bodkočiarkou.[15]
Ďalším zjednodušením je oblasť dátových typov. Dátový typ sa implicitne nadefinuje podľa vloženej hodnoty. A čo viac, v prípade použitia poľa, zoznamu atď. je možné ľubovoľne vkladať rôzne dátové typy ako je to v nasledujúcom príklade:
zoznamČísel = [1776, -1, 33.3333, "päť", 928734928763]
Alebo môžeme vytvoriť jednoduchú mapu nasledovne:
výška = ["Martin":190, "Helena":155, "Viera":"Neuviedla"]
Groovy častokrát umožňuje viac variant správnej syntaxe, ako v nasledujúcom príklade:
println "Martinova výška je: " + výška.Martin
println "Martinova výška je: " + výška["Martin"]
println "Martinova výška je: ${výška.Martin}"
V poslednom riadku je premenná volaná zvnútra zložených zátvoriek kombinácie znakov ${}, ktoré upozorňujú, že vo vnútri sa nachádza Groovy výraz.[16]
Ďalej môžeme vložiť jednoduchý cyklus na prechádzanie vyššie uvedenej mapy vrátane podmienky pre vypísanie obsahu:
výška.each {
if (it.value == "Neuviedla") {
println it.key + " neuviedol/a svoju výšku."
} else {
if (it.value < 170) {
println it.key + " meria menej než 170 cm."
} else {
println it.key + " meria najmenej 170 cm."
}
}
}
Kľúčové slovo it predstavuje automatickú premennú, do ktorej sa ukladá aktuálna hodnota alebo objekt. V tomto prípade je to aktuálny záznam v mape.
V príklade je vidieť aj použitie booleanovských operátorov, ktoré sú podobné ako v Jave a zahŕňajú nasledujúce možnosti:
==
!=
>
>=
<
<=
Na rozdiel od Javy však v Groovy operátor == znamená logickú rovnosť pre všetky typy atribútov. V Jave sa napr. pre porovnanie obsahu dvoch atribútov obsahujúcich reťazec musí použiť metóda equals ().[17]
Closures
[upraviť | upraviť zdroj]Ďalším zjednodušujúcim prvkom Groovy je tzv. uzáver (angl. closure). V nasledujúcom príklade je vidieť, ako môžeme celú triedu nahradiť jednoduchým closure:
Trieda
public class DruháMocnina {
public static int umocni(int číslo) {
return číslo * číslo;
}
}
Closure
def c = { číslo -> číslo * číslo }
V prvom prípade musíme pre vypísanie mocniny čísla zavolať statickú metódu triedy DruháMocnina. U closure je metóda uložená v atribúte c a pre vypísanie mocniny napr. čísla 99 nám stačí nasledujúci príkaz:
println c(99)
Atribút, v ktorom je closure uložená, potom môžeme odovzdávať naprieč programom, ako ktorýkoľvek iný atribút. Closure sa na prvý pohľad podobá klasickému bloku. Blok je však vykonávaný hneď, ako na neho prekladač natrafí. Closure je potrebné explicitne zavolať.
Predchádzajúce closure môžeme definovať ešte jednoduchšie s využitím kľúčového slova it.
def c = { it * it }
Premenná "it" v sebe automaticky ukladá parameter, ktorý je pri volaní closure zadaný.[18]
Práca so súbormi
[upraviť | upraviť zdroj]Relatívne jednoduchá je aj práca so súbormi. Nasledujúcim scriptom vypíšeme na konzolu obsah textového súboru test.txt, pričom každý riadok bude začínať reťazcom Riadok súboru:
súbor = new File("C:\\test.txt")
tlačRiadokSúboru = { println "Riadok súboru: " + it }
súbor.eachLine(tlačRiadokSúboru)
V definícii cesty k súboru sú rovnako ako v Jave použité dve lomky, keďže ide o escape sekvenciu.
GUI
[upraviť | upraviť zdroj]V Groovy je možné využiť všetky triedy z Javovskej knižnice AWT či Swing. Avšak Groovy poskytuje aj svoj vlastný "SwingBuilder", ktorý vie vytvárať plnohodnotné GUI deklaratívnym spôsobom.[19] Využíva pritom tzv. Builders, ktoré sa postarajú o vytváranie komplexných objektov, ako napríklad vytváranie inštancií potomkov či volanie swingových metód.[19] Nasledujúci príklad vytvorí malé aplikačné okno s tlačidlom, ktoré po každom stlačení vypíše súčet všetkých stlačení od začiatku aplikácie.
import groovy.swing.SwingBuilder
import java.awt.BorderLayout as BL
počet = 0
new SwingBuilder().edt {
frame(title:'Okno', size:[300,300], show: true) {
borderLayout()
textlabel = label(text:"Click the button!", constraints: BL.NORTH)
button(text:'Click Me',
actionPerformed: { počet++; textlabel.text = "Kliknuté ${počet} krát."; println "kliknuté" },
constraints:BL.SOUTH)
}
}
Ďalšie vlastnosti
[upraviť | upraviť zdroj]Groovy podporuje približne 99 % syntaxe Javy, takže kód v Jave možno do programov v Groovy často priamo prevziať.[15] Polia triedy bez modifikátora viditeľnosti sa automaticky stávajú vlastnosťami (properties), pre ktoré Groovy sám vytvorí metódy na čítanie a zápis (getter a setter).[20] Operátor bezpečnej navigácie ?. zabraňuje výnimke NullPointerException: ak je objekt naľavo od operátora null, výsledkom výrazu je null namiesto chyby.[21]
Traits sú konštrukcie jazyka, ktoré umožňujú skladanie správania, implementáciu rozhraní za behu programu a prekrývanie správania; možno ich chápať ako rozhrania, ktoré obsahujú predvolené implementácie metód aj stav.[20] Transformácie abstraktného syntaktického stromu (AST) umožňujú vývojárom zasiahnuť do procesu kompilácie a upraviť strom ešte pred jeho preložením do bajtkódu; Groovy tak poskytuje metaprogramovanie v čase kompilácie bez spomalenia behu programu.[22]
Grails framework
[upraviť | upraviť zdroj]Jedným z frameworkov postavených na Groovy jazyku je Grails framework. Ten umožňuje rýchlejšie vytváranie náročných webových aplikácií. V súčasnosti je tento framework priamo podporovaný napríklad aj vo vývojovom prostredí NetBeans (od verzie 6.8), ktoré sa o väčšinu základnej konfigurácie postará, a tak si môžeme ľahko vyskúšať ukážkové príklady, ktoré v sebe zahŕňa, alebo ktoré sú k dispozícii na domovskej stránke Grails. Samotný vývoj pomocou tohto frameworku je postavený na princípe "Convention over Configuration".[23] To znamená, že vývojár je čo najviac odľahčený od zdĺhavého rozhodovania a konfigurovania, pričom sa však musí uspokojiť s prednastavenou implementáciou.
Grails sa vyznačuje tzv. architektonickým prístupom model-view-controller (MVC). Výsledkom je prehľadne štruktúrovaná aplikácia, ktorá si, aj v prípade veľkej robustnosti, zachováva relatívne jednoduchú obsluhu a modifikovateľnosť.
Použitie
[upraviť | upraviť zdroj]Groovy používajú okrem iného tieto projekty a firmy:
- nástroj na automatizáciu zostavovania Gradle, ktorého zostavovacie skripty možno písať v Groovy;[24]
- server na priebežnú integráciu Jenkins, v ktorom sa skriptované kanály (Scripted Pipeline) píšu v obmedzenej forme syntaxe Groovy;[25]
- open-source systém Apache OFBiz, ktorý má na tvorbu obchodnej logiky doménovo špecifický jazyk postavený na Groovy;[26]
- LinkedIn, ktorý v roku 2007 začal vo frameworku Grails vyvíjať jednu zo svojich webových aplikácií.[27]
Referencie
[upraviť | upraviť zdroj]- 1 2 3 The Apache Groovy programming language [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 4 STRACHAN, James. Groovy - the birth of a new dynamic language for the Java platform [online]. James Strachan's Radio Weblog, 2003-08-29, [cit. 2026-10-04]. Dostupné online. Archivované 2003-09-01 z originálu. (po anglicky)
- ↑ KLEIN IKKINK, Hubert A.. Groovy Goodness: Default Groovy Script File Extensions [online]. Messages from mrhaki, 2011-10-19, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 4 Groovy Project Incubation Status [online]. Apache Incubator, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 Release notes for Groovy 2.0 [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 JSR 241: The Groovy Programming Language [online]. Java Community Process, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 3 4 Changelogs for Groovy [online]. Apache Groovy, [cit. 2026-10-21]. Dostupné online. (po anglicky)
- ↑ LAFORGE, Guillaume. Groovy wins first prize at JAX 2007 innovation award [online]. Codehaus, 2007-04-26, [cit. 2026-10-04]. Dostupné online. Archivované 2015-05-13 z originálu. (po anglicky)
- ↑ SpringSource Acquires Groovy and Grails company (G2One) [online]. IndicThreads, 2008-11-11, [cit. 2026-10-04]. Dostupné online. Archivované 2009-03-30 z originálu. (po anglicky)
- ↑ VMWare Acquires SpringSource [online]. TechCrunch, 2009-08-10, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ MAXEY, Mike. Groovy 2.4 And Grails 3.0 To Be Last Major Releases Under Pivotal Sponsorship [online]. Pivotal, 2015-01-19, [cit. 2026-10-04]. Dostupné online. Archivované 2016-03-01 z originálu. (po anglicky)
- ↑ Groovy Submitted to Become a Project at The Apache Software Foundation [online]. The Apache Software Foundation, 2015-03-11, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Download [online]. Apache Groovy, [cit. 2026-10-21]. Dostupné online. (po anglicky)
- 1 2 3 Install Groovy [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 Style guide [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Syntax [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Differences with Java [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Closures [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 Domain-Specific Languages [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- 1 2 Object orientation [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Operators [online]. Apache Groovy, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Compile-time Metaprogramming - AST Transformations [online]. Codehaus, [cit. 2026-10-04]. Dostupné online. Archivované 2012-10-14 z originálu. (po anglicky)
- ↑ The Grails Framework [online]. The Apache Software Foundation, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ A Groovy Build Script Primer [online]. Gradle, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Getting started with Pipeline [online]. Jenkins, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ Groovy DSL for OFBiz business logic [online]. Apache OFBiz Project Open Wiki, [cit. 2026-10-04]. Dostupné online. (po anglicky)
- ↑ GUAN, Brian. Grails at LinkedIn [online]. LinkedIn, 2008-06-11, [cit. 2026-10-04]. Dostupné online. Archivované 2008-12-21 z originálu. (po anglicky)
Iné projekty
[upraviť | upraviť zdroj]
Commons ponúka multimediálne súbory na tému Groovy
Externé odkazy
[upraviť | upraviť zdroj]- Seriál o jazyku Groovy na root.cz
- (po anglicky) Oficiálna stránka jazyka Groovy
- portál o jazyku Groovy Archivované 2013-02-18 na Wayback Machine
- (po anglicky) domovská stránka frameworku Grails
Zdroj
[upraviť | upraviť zdroj]Tento článok je čiastočný alebo úplný preklad článkov Groovy na českej Wikipédii a Apache Groovy na anglickej Wikipédii.