Apache Groovy - Apache Groovy
![]() Groovy Logo | |
Paradigma | Objektově orientovaný, rozkazovací způsob, skriptování |
---|---|
Navrhl | James Strachan |
Vývojář | Guillaume Laforge (předseda PMC) Jochen Theodorou (technický vedoucí) Paul King Cedric Champeau |
Poprvé se objevil | 2003 |
Stabilní uvolnění | 3.0.6 (26. září 2020[1]) [±] |
Náhled verze | 4.0.0-alfa-1 / 26. září 2020[1] |
Psací disciplína | Dynamický, statický, silný, kachna |
Plošina | Java SE |
Licence | Licence Apache 2.0 |
Přípony názvu souboru | .groovy, .gvy, .gy, .gsh [2] |
webová stránka | groovy-lang![]() |
Hlavní, důležitý implementace | |
Gradle, Grály | |
Ovlivněno | |
Jáva, Krajta, Rubín, Pokec | |
Ovlivněno | |
Kotlin |
Apache Groovy je Jáva -syntax kompatibilní objektově orientovaný programovací jazyk pro Java platforma. Je to jak statický, tak dynamický jazyk s funkcemi podobnými těm z Krajta, Rubín, a Pokec. Může být použit jako a programovací jazyk a a skriptovací jazyk pro platformu Java, je kompilován do Virtuální stroj Java (JVM) bytecode a bezproblémově spolupracuje s ostatními kódy Java a knihovny. Groovy používá a syntaxe složených závorek podobné Java. Groovy podporuje uzávěry, víceřádkové řetězce a výrazy vložené do řetězců. Hodně z Groovyho síly spočívá v jeho AST transformace spuštěné prostřednictvím anotací.
Groovy 1.0 byl vydán 2. ledna 2007 a Groovy 2.0 v červenci 2012. Od verze 2 může být Groovy sestaveno staticky, nabízející odvození typu a výkon blízký výkonu Java.[3][4] Groovy 2.4 bylo poslední hlavní vydání pod Klíčový software sponzorství, které skončilo v březnu 2015.[5] Groovy od té doby změnila svou řídící strukturu na Výbor pro řízení projektů v roce 2006 softwarová nadace Apache.[6]
Dějiny
James Strachan poprvé hovořil o vývoji Groovy na svém blogu v srpnu 2003.[7] V březnu 2004 byl Groovy předložen JCP jako JSR 241[8] a přijato hlasováním. V letech 2004 až 2006 bylo vydáno několik verzí Proces komunity Java Začalo standardizační úsilí (JCP), změnilo se číslování verzí a verze s názvem „1.0“ byla vydána 2. ledna 2007. Po různých verzích betas a release s čísly 1.1, 7. prosince 2007, byl vydán Groovy 1.1 Final a okamžitě přečíslován jako Groovy 1.5, aby odrážel mnoho provedených změn.
V roce 2007 získal Groovy první cenu na cenu za inovaci JAX 2007.[9] V roce 2008, Grály Groovy webový rámec, získal druhou cenu na JAX 2008 za inovaci.[10]
V listopadu 2008 SpringSource získala společnost Groovy and Grails (G2One).[11] V srpnu 2009 VMware získal SpringSource.[12]
V dubnu 2012, po osmi letech nečinnosti, změnil Spec Lead status JSR 241 na spící.[8]
Strachan opustil projekt tiše rok před vydáním Groovy 1.0 v roce 2007.[Citace je zapotřebí ] V říjnu 2016 Strachan uvedl: „Stále miluji groovy (Jenkinsovy kanály jsou tak groovy!), Java, go, strojopis a kotlin“.[13]
2. července 2012 byl vydán Groovy 2.0, který mimo jiné přidal statické kompilace a statická kontrola typu.
Když Klíčový software společný podnik byl vyčleněn společností EMC Corporation (EMC) a VMware v dubnu 2013 tvořily Groovy a Grails součást svého produktového portfolia. Společnost Pivotal přestala sponzorovat Groovy a Grails od dubna 2015.[5]Ve stejném měsíci Groovy změnil svou strukturu řízení z úložiště Codehaus na Výbor pro správu projektů (PMC) v Softwarová nadace Apache prostřednictvím svého inkubátoru.[6]Groovy vystudoval inkubátor Apache a v listopadu 2015 se stal projektem nejvyšší úrovně.[14]
Funkce
Většina platných souborů Java jsou také platné soubory Groovy. Ačkoli jsou si oba jazyky podobné, kód Groovy může být kompaktnější, protože nepotřebuje všechny prvky, které Java potřebuje.[15] To umožňuje programátorům v Javě naučit se Groovy postupně tím, že začnou známou syntaxí Java, než získají další Groovy programovací idiomy.[16]
Funkce Groovy, které nejsou k dispozici v Javě, zahrnují statické i dynamický psaní (s klíčovým slovem def
), přetížení operátora, nativní syntaxe pro seznamy a asociativní pole (mapy), nativní podpora pro regulární výrazy, polymorfní iterace, interpolace řetězců, přidány pomocné metody a operátor bezpečné navigace ?.
automaticky zkontrolovat nulové ukazatele (například, proměnná? .method ()
nebo proměnná?. pole
).[17]
Vzhledem k tomu, že verze 2 Groovy podporuje také modularitu (možnost odeslat pouze potřebné sklenice podle potřeb projektu, čímž se zmenší velikost knihovny Groovy), kontrola typu, statické kompilace, vylepšení syntaxe Project Coin, multicatch bloky a neustálé zvyšování výkonu pomocí invokedynamic
instrukce zavedena v Java 7.[18]
Groovy poskytuje nativní podporu pro různé značkovací jazyky jako XML a HTML, provedeno prostřednictvím inline Model objektu dokumentu (DOM) syntaxe. Tato funkce umožňuje definovat a manipulovat s mnoha typy heterogenních datových aktiv s jednotnou a stručnou syntaxí a metodikou programování.[Citace je zapotřebí ]
Na rozdíl od Javy lze soubor zdrojového kódu Groovy spustit jako (nekompilovaný) skript, pokud obsahuje kód mimo definici jakékoli třídy, pokud se jedná o třídu s hlavní metoda, nebo pokud se jedná o a Spustitelný nebo GroovyTestCase. Skript Groovy je před provedením plně analyzován, zkompilován a vygenerován (podobně jako Python a Ruby). K tomu dochází pod kapotou a kompilovaná verze se neuloží jako artefakt procesu.[19]
GroovyBeans, vlastnosti
GroovyBeans jsou Groovy verze JavaBeans. Groovy implicitně generuje getry a settery. V následujícím kódu setColor (barva řetězce)
a getColor ()
jsou implicitně generovány. Poslední dva řádky, které se zdají přímo přistupovat k barvě, skutečně volají implicitně generované metody.[20]
třída AGroovyBean { Tětiva barva}def myGroovyBean = Nový AGroovyBean()myGroovyBean.setColor('baby blue')tvrdit myGroovyBean.getColor() == 'baby blue'myGroovyBean.barva = 'cín'tvrdit myGroovyBean.barva == 'cín'
Groovy nabízí jednoduchou a konzistentní syntaxi pro manipulaci seznamy a mapy, připomínající Java pole syntax.[21]
def seznam filmů = [‚Dersu Uzala ', 'Běžel', ‚Sedm samurajů '] // Vypadá jako pole, ale je to seznamtvrdit seznam filmů[2] == ‚Sedm samurajů 'seznam filmů[3] = 'Casablanca' // Přidá prvek do seznamutvrdit seznam filmů.velikost() == 4def měsícMapa = [ 'Leden' : 31, 'Únor' : 28, 'Březen' : 31 ] // Deklaruje maputvrdit měsícMapa['Březen'] == 31 // Přistupuje k záznamuměsícMapa['Duben'] = 30 // Přidá položku na maputvrdit měsícMapa.velikost() == 4
Rozšíření prototypu
Groovy nabízí podporu pro rozšíření prototypu přes ExpandoMetaClass
, Extension Modules (only in Groovy 2), Objective-C-like Kategorie a DelegatingMetaClass
.[22]
ExpandoMetaClass
nabízí jazyk specifický pro doménu (DSL) pro snadné vyjádření změn ve třídě, podobně jako Ruby koncept otevřené třídy:
Číslo.metaClass { čtv = { Matematika.čtv(delegát) }}tvrdit 9.čtv() == 3tvrdit 4.čtv() == 2
Změny Groovy v kódu prostřednictvím prototypování nejsou v Javě viditelné, protože každé vyvolání atributu / metody v Groovy prochází registrem metaclass. Ke změněnému kódu lze přistupovat pouze z prostředí Java přechodem do registru metaclass.
Groovy také umožňuje přepsání metod jako getProperty ()
, propertyMissing ()
mimo jiné umožňuje vývojáři ve zjednodušeném režimu zachytit volání objektu a určit pro ně akci orientovaný na aspekt způsob. Následující kód povoluje třídu řetězec java.lang
reagovat na hex
vlastnictví:
výčet Barva { ČERNÁ('#000000'), BÍLÝ('#FFFFFF'), ČERVENÉ(„# FF0000“), MODRÝ(„# 0000FF“) Tětiva hex Barva(Tětiva hex) { tento.hex = hex }}Tětiva.metaClass.getProperty = { Tětiva vlastnictví -> def stringColor = delegát -li (vlastnictví == 'hex') { Barva.hodnoty().nalézt { to.název().equalsIgnoreCase stringColor }?.hex }}tvrdit "BÍLÝ".hex == „#FFFFFF“tvrdit "MODRÝ".hex == „# 0000FF“tvrdit "ČERNÁ".hex == "#000000"tvrdit "ZELENÁ".hex == nula
Rámec Grails využívá metaprogramování ve velké míře k povolení GORM dynamické vyhledávače, jako User.findByName ('Josh')
a další.[23]
Tečka a závorky
Groovy syntaxe umožňuje v některých situacích vynechat závorky a tečky. Následující groovy kód
vzít(káva).s(cukr, mléko).a(alkohol)
lze psát jako
vzít káva s cukr, mléko a alkohol
umožnění rozvoje jazyky specifické pro doménu (DSL), které vypadají jako obyčejná angličtina.
Funkcionální programování
Ačkoli je Groovy většinou objektově orientovaný jazyk, nabízí také Funkcionální programování funkce.
Uzávěry
Podle dokumentace Groovy: „Uzávěry v Groovy fungují podobně jako„ ukazatel metody “, což umožňuje zápis a spuštění kódu v pozdějším okamžiku“.[24] Uzávěry Groovy podporují volné proměnné, tj. Proměnné, které jí nebyly explicitně předány jako parametr, ale existují v kontextu deklarace, částečná aplikace (že to říká 'kari '[25]), delegování, implicitní, typové a netypové parametry.
Při práci na kolekcích určeného typu lze odvodit uzávěrku předanou operaci na kolekci:
seznam = [1, 2, 3, 4, 5, 6, 7, 8, 9]/* * Nenulová čísla jsou vynucena na hodnotu true, takže když je% 2 == 0 (sudé), je to nepravda. * Typ implicitního parametru „it“ lze IDE odvodit jako Integer. * Mohlo by to být také napsáno jako: * list.findAll {Celé číslo i -> i% 2} * list.findAll {i -> i% 2} */def šance = seznam.najít vše { to % 2 }tvrdit šance == [1, 3, 5, 7, 9]
Skupinu výrazů lze zapsat do uzavíracího bloku bez odkazu na implementaci a odpovídající objekt lze přiřadit později pomocí delegování:
// Tento blok kódu obsahuje výrazy bez odkazu na implementacidef operace = { prohlásit 5 součet 4 rozdělit 3 tisk}
/* * Tato třída bude zpracovávat operace, které lze použít v závěru výše. Další třída * může být deklarováno, že má stejné metody, ale například pomocí operací webové služby * ve výpočtech. */třída Výraz { BigDecimal hodnota /* * Ačkoli je celé číslo předáváno jako parametr, je vynuceno do BigDecimal, jak bylo * definovaný. Pokud by třída měla metodu 'declare (Integer value)', použije se místo toho. */ def prohlásit(BigDecimal hodnota) { tento.hodnota = hodnota } def součet(BigDecimal valueToAdd) { tento.hodnota += valueToAdd } def rozdělit(BigDecimal dělitel) { tento.hodnota /= dělitel } def vlastnost chybí(Tětiva vlastnictví) { -li (vlastnictví == "tisk") tisk hodnota }}
// Zde je definováno, kdo bude reagovat na výrazy v bloku kódu výše.operace.delegát = Nový Výraz()operace()
Kari
Obvykle se volá částečná aplikace,[25] tato funkce Groovy umožňuje nastavit parametry uzávěrů na výchozí parametr v kterémkoli z jejich argumentů a vytvořit nový uzávěr s vázanou hodnotou. Dodání jednoho argumentu do kari()
metoda opraví argument jedna. Zadáním N argumentů opravíte argumenty 1 .. N.
def joinTwoWordsWithSymbol = { symbol, První, druhý -> První + symbol + druhý }tvrdit joinTwoWordsWithSymbol('#', 'Ahoj', 'Svět') == 'Ahoj světe'def concatWords = joinTwoWordsWithSymbol.kari(' ')tvrdit concatWords('Ahoj', 'Svět') == 'Ahoj světe'def Ahoj = concatWords.kari('Ahoj')// def prependHello = joinTwoWordsWithSymbol.curry ('', 'Hello')tvrdit Ahoj('Svět') == 'Ahoj světe'
Curry lze také použít v opačném směru (oprava argumentů N až N - 1) pomocí rcurry ()
.
def Napájení = { BigDecimal hodnota, BigDecimal Napájení -> hodnota**Napájení}def náměstí = Napájení.rcurry(2)def krychle = Napájení.rcurry(3)tvrdit Napájení(2, 2) == 4tvrdit náměstí(4) == 16tvrdit krychle(3) == 27
Groovy také podporuje líné hodnocení,[26][27] zmenšit / složit,[28] nekonečné struktury a neměnnost,[29] mezi ostatními.[30]
Zpracování JSON a XML
V poznámce o objektu JavaScript (JSON ) a zpracování XML, Groovy využívá Tvůrce vzor, což snižuje produkci datové struktury. Například následující XML:
<languages> rok ="1995"> <name>Jáva</name> <paradigm>objektově orientovaný</paradigm> <typing>statický</typing> </language> rok ="1995"> <name>Rubín</name> <paradigm>funkční, objektově orientované</paradigm> <typing>kachní psaní, dynamické</typing> </language> rok ="2003"> <name>Báječný</name> <paradigm>funkční, objektově orientované</paradigm> <typing>kachní psaní, dynamické, statické</typing> </language></languages>
lze generovat pomocí následujícího kódu Groovy:
def spisovatel = Nový StringWriter()def stavitel = Nový báječný.xml.MarkupBuilder(spisovatel)stavitel.jazyky { Jazyk(rok: 1995) { název "Jáva" paradigma "objektově orientovaný" psaní na stroji "statický" } Jazyk (rok: 1995) { název "Rubín" paradigma "funkční, objektově orientované" psaní na stroji "kachní psaní, dynamické" } Jazyk (rok: 2003) { název "Báječný" paradigma "funkční, objektově orientované" psaní na stroji "kachní psaní, dynamické, statické" }}
a také mohou být zpracovány streamovacím způsobem StreamingMarkupBuilder
. Chcete-li změnit implementaci na JSON, MarkupBuilder
lze vyměnit za JsonBuilder
.[31]
Chcete-li jej analyzovat a vyhledat funkční jazyk, Groovy's najít vše
metoda může sloužit:
def jazyky = Nový XmlSlurper().parseText spisovatel.toString()// Zde je použita syntaxe regulárního výrazu Groovy pro porovnávač (= ~), který bude vynucen na a // booleovská hodnota: buď true, pokud hodnota obsahuje náš řetězec, nebo false jinak.def funkční = jazyky.Jazyk.najít vše { to.paradigma =~ "funkční" }tvrdit funkční.sbírat { to.název } == ["Báječný", "Rubín"]
Řetězcová interpolace
V Groovy lze řetězce interpolovat proměnnými a výrazy pomocí GStrings:[32]
BigDecimal účet = 10.0def text = „Účet aktuálně zobrazuje zůstatek účtu $“tvrdit text == „Účet zobrazuje aktuálně zůstatek 10,0“
Řetězce GS obsahující proměnné a výrazy musí být deklarovány pomocí uvozovek.
Složitý výraz musí být uzavřen do složených závorek. To zabrání tomu, aby jeho části byly interpretovány jako patřící k okolnímu řetězci namísto k výrazu:
BigDecimal mínus = 4.0text = „Účet zobrazuje aktuálně zůstatek $ {účet - minus}“tvrdit text == „Účet zobrazuje aktuálně zůstatek 6,0“// Bez závorek k izolaci výrazu by to mělo za následek:text = „Účet zobrazuje aktuálně zůstatek účtu $ - minus“tvrdit text == „Účet zobrazuje aktuálně zůstatek 10,0 - minus“
Vyhodnocení výrazu lze odložit použitím syntaxe šipky:
BigDecimal daň = 0.15text = „Účet zobrazuje aktuálně zůstatek $ {-> účet - účet * daň}“daň = 0.10// Hodnota daně byla změněna PO deklaraci GString. Výraz // proměnné jsou vázány pouze v případě, že výraz musí být skutečně vyhodnocen:tvrdit text == „Účet zobrazuje aktuálně zůstatek 9 000“
Transformace abstraktního stromu syntaxe
Podle vlastní dokumentace Groovy: „Když kompilátor Groovy kompiluje skripty a třídy Groovy, v určitém okamžiku procesu bude zdrojový kód v paměti zastoupen ve formě stromu konkrétní syntaxe a poté transformován do abstraktního stromu syntaxe. .Účelem AST Transformations je umožnit vývojářům zapojit se do procesu kompilace, aby mohli upravit AST před tím, než se změní na bytecode, který bude spuštěn JVM. AST Transformations poskytuje Groovy vylepšené možnosti metaprogramování v době kompilace umožňující výkonnou flexibilitu na jazykové úrovni, bez penalizace výkonu za běhu. “[33]
Příklady AST v Groovy jsou:
- Transformace kategorií a mixů
- Neměnné makro AST
- Nová transformace
- Singletonova transformace
mezi ostatními.
Vlastnosti
Podle dokumentace Groovy, "Vlastnosti jsou strukturální konstrukce jazyka, která umožňuje: složení chování, implementaci rozhraní za běhu, přepsání chování a kompatibilitu s kontrolou / kompilací statického typu. "
Vlastnosti lze považovat za rozhraní nesoucí jak výchozí implementace, tak stav. Vlastnost je definována pomocí klíčového slova zvláštnost:
vlastnost FlyingAbility { / * deklarace znaku * / Tětiva létat() { "Letím!" } / * deklarace metody uvnitř znaku * /}
Poté jej lze použít jako normální rozhraní pomocí klíčového slova nářadí
:
třída Pták nářadí FlyingAbility {} / * Přidává vlastnost FlyingAbility ke schopnostem třídy Bird * /def pták = Nový Pták() / * vytvořit instanci nového ptáka * /tvrdit pták.létat() == "Letím!" / * třída Bird automaticky získá chování vlastnosti FlyingAbility * /
Vlastnosti umožňují širokou škálu schopností, od jednoduchého složení až po testování.
Přijetí
Pozoruhodné příklady Groovy adopce zahrnují:
- Adaptavist ScriptRunner, vloží Groovy implementaci pro automatizaci a rozšíření Atlassian nástroje, které používá více než 20000 organizací po celém světě.[34][35]
- Apache OFBiz, open-source plánování podnikových zdrojů (ERP) systém, používá Groovy.[36][37]
- Eukalyptus, cloudový systém pro správu, používá značné množství Groovy.
- Gradle je populární nástroj pro automatizaci sestavení, který používá Groovy.
- LinkedIn používá Groovy a Grails pro některé ze svých subsystémů.[38]
- LogicMonitor, cloudová monitorovací platforma, používá Groovy ve zdrojích dat založených na skriptech.[39]
- Jenkins, platforma pro kontinuální integrace. S verzí 2 obsahuje Jenkins a Potrubí plugin, který umožňuje psát pokyny k sestavení v Groovy.[40]
- Liferay používá ve svém pracovním postupu kaleo groovy
- Sky.com používá Groovy a Grails k poskytování obrovského online mediálního obsahu.[41]
- SmartThings, otevřená platforma pro chytré domy a spotřebitel Internet věcí, používá zabezpečenou podmnožinu Groovy[42]
- SoapUI poskytuje Groovy jako jazyk pro vývoj testů webových služeb.[43]
- Survata, spuštění průzkumu trhu, používá Groovy a Grails.[Citace je zapotřebí ]
- Evropský patentový úřad (EPO) vyvinul a programování toku dat jazyk Groovy „využít podobnosti v procesech komunikace s patentovým úřadem každé jednotlivé země a transformovat je do jediného univerzálního procesu.“[Citace je zapotřebí ]
- Ačkoli Groovy lze integrovat do libovolného prostředí JVM, rámec JBoss Seam poskytuje Groovy, kromě Javy, jako vývojový jazyk, ihned po vybalení z krabice.[44]
- vCalc.com používá Groovy pro veškerou uživatelem definovanou matematiku ve svém matematickém enginu pro získávání davů.[45]
- Wired.com používá Groovy a Grails pro samostatnou sekci Recenze produktu na webu.[46]
- XWiki SAS používá Groovy jako skriptovací jazyk ve svém spolupracujícím open-source produktu.[47]
Podpora IDE
Mnoho integrovaná vývojová prostředí (IDE) a textové editory podpora Groovy:
- Android Studio, IDE použité k výrobě Android aplikace
- Atom editor
- Zatmění, přes Groovy-Eclipse
- Emacs, používající groovy-režim projektu groovy-emacs-mode.
- IntelliJ IDEA, Komunitní vydání, Grails / Griffon pouze v edici Ultimate
- JDeveloper, pro použití s Oracle ADF
- jEdit, pokročilý textový editor pro Java platforma
- Kate, pokročilý textový editor pro KDE podporuje Groovy a více než 200 dalších formátů souborů
- NetBeans, od verze 6.5
- Poznámkový blok ++, pokročilý textový editor pro Microsoft Windows
- Vznešený text, textový editor pro různé platformy
- TextMate
- Kód sady Visual Studio
- UltraEdit, editor programů pro všeobecné účely
Dialekty
Existuje jedna alternativní implementace Groovy:
- Grooscript převádí Groovy kód na JavaScript kód.[48] Ačkoli má Grooscript ve srovnání s Apache Groovy některá omezení, může používat třídy domény jak na serveru, tak v klientovi.[49] Podpora pluginů pro Grály verze 3.0 je k dispozici, stejně jako online převody kódu.[50]
Viz také
- Porovnání programovacích jazyků
- Griffon (kostra) - rámec pro stolní počítače
- Projekt Zero
- Spock (testovací rámec)
Reference
Citace
- ^ A b "Vydání - apache / groovy". Citováno 2020-11-05 - přes GitHub.
- ^ https://mrhaki.blogspot.com/2011/10/groovy-goodness-default-groovy-script.html
- ^ „Výkon Groovy 2.0 ve srovnání s Javou“. 25. srpna 2012.
- ^ „Java vs Groovy2.0 vs Scala Simple Performance Test“. 10. července 2012. Archivovány od originál dne 10. prosince 2012. Citováno 7. října 2012.
- ^ A b „Groovy 2.4 a Grails 3.0 budou poslední hlavní vydání pod klíčovým sponzorstvím“. 19. ledna 2015.
- ^ A b „Groovy se připojuje k inkubátoru Apache“. 11. března 2015.
- ^ James Strachan (29. srpna 2003). „Groovy - zrod nového dynamického jazyka pro platformu Java“. Archivovány od originál dne 1. září 2003.
- ^ A b „Java Community Process JSR 241“.
- ^ „Groovy vyhrává první cenu na cenu za inovaci JAX 2007“. 26. 04. 2007. Archivovány od originál dne 2015-05-13. Citováno 2012-10-07.
- ^ „Říká se, že při šálku kávy se toho může hodně stát“. Archivovány od originál dne 19. 4. 2011. Citováno 2012-10-07.
- ^ „SpringSource získává společnost Groovy and Grails (G2One)“. 11. listopadu 2008.
- ^ „VMWare získává SpringSource“. 10. srpna 2009.
- ^ „Tweet od Jamese Strachana“. 24. listopadu 2016. Citováno 2016-11-24.
- ^ „Oznámení na konferenci pro vývojáře“.
- ^ König 2007, str. 32
- ^ „Pokyny pro styl a jazyk Groovy pro vývojáře prostředí Java“. Groovy.codehaus.org. Archivovány od originál dne 17.01.2015. Citováno 2015-01-22.
- ^ "Groovy - rozdíly od Javy". Groovy.codehaus.org. Archivovány od originál dne 2009-03-17. Citováno 2013-08-12.
- ^ „Co je nového v Groovy 2.0?“. 28. června 2012.
- ^ König 2007, s. 37-8
- ^ König 2007, s. 38-9
- ^ König 2007, s. 41-3
- ^ „JN3525-MetaClasses“. Archivovány od originál dne 01.10.2012. Citováno 2012-10-07.
- ^ „Metaprogramovací techniky v Groovy a Grails“. 11. června 2009.
- ^ „Groovy - uzávěry“. Archivovány od originál dne 2012-05-22.
- ^ A b "Říká groovy částečnou aplikaci 'currying' ", 10. srpna 2013
- ^ „Groovy - Lazy Transformation“. Archivovány od originál dne 8. 10. 2012. Citováno 2012-10-07.
- ^ „Boční poznámky: Líné seznamy v Groovy“. 3. února 2011.
- ^ "Groovy's Fold". 20. června 2011. Archivovány od originál dne 13. února 2015. Citováno 12. února 2015.
- ^ "Funkční programování s Groovy". 5. listopadu 2011.
- ^ "Programování funkcí v Groovy". Archivovány od originál dne 8. 10. 2012. Citováno 2012-10-07.
- ^ „JsonBuilder“. Archivovány od originál dne 2012-10-02. Citováno 2012-10-07.
- ^ „Groovy struny - různé způsoby jejich vytváření“. 26. prosince 2009.
- ^ „Metaprogramování v době kompilace - transformace AST“. Archivovány od originál dne 2012-10-14. Citováno 2012-10-07.
- ^ „Dokumentace ScriptRunner“.
- ^ „Tisková zpráva ScriptRunner se statistikami přijetí“.
- ^ „Groovy DSL pro obchodní logiku OFBiz“. Projekt Apache OFBiz Open Wiki.
- ^ „Příklady jednoduchých metod využívajících Groovy“. Projekt Apache OFBiz Open Wiki.
- ^ „Grails at LinkedIn“. Citováno 2015-06-02.
- ^ „Embedded Groovy Scripting“. www.logicmonitor.com. Citováno 2020-11-20.
- ^ „Jenkins Pipeline“.
- ^ Rocher, Graeme (2. října 2008). „Blog společnosti Graeme Rocher: Sky.com znovu uvádí psaný v Grails“. Blog společnosti Graeme Rocher. Citováno 2015-06-02.
- ^ Analýza zabezpečení rozvíjejících se inteligentních domácích aplikací
- ^ "Skriptování a knihovna skriptů | Skriptování a vlastnosti". www.soapui.org. Citováno 2015-06-02.
- ^ "Kapitola 11. Groovy integrace". docs.jboss.org. Citováno 2015-06-02.
- ^ „vCalc, vůbec první sociální platforma pro svět matematiky“. Citováno 2016-05-05.
- ^ „Wired.Com“ (PDF). www.springsource.org. Citováno 2015-06-02.
- ^ „XWiki SAS“ (PDF). www.springsource.org. Citováno 2015-06-02.
- ^ "Dokumentace Grooscript". 12. září 2016. Archivovány od originál dne 28. června 2017. Citováno 4. července 2017.
- ^ „Presentation at SpringOne / 2GX on Grooscript“. 13. prosince 2015.
- ^ „Online převody Grooscript“. 15. května 2017. Archivovány od originál dne 9. července 2017. Citováno 4. července 2017.
Zdroje
- König, Dierk; Paul King; Guillaume Laforge; Hamlet D'Arcy; Cédric Champeau; Erik Pragt; Jon Skeet (2015). Groovy v akci, druhé vydání. Manning. ISBN 978-1-935182-44-3.
- Barclay, Kenneth; John Savage (2007). Groovy Programming: An Introduction for Java Developers. ISBN 978-0-12-372507-3. Archivovány od originál dne 12.01.2010. Citováno 2007-07-19.
- Davis, Scott (2008). Groovy recepty: Mazání kol Javy. ISBN 978-0-9787392-9-4.
- Subramaniam, Venkat (2008). Programování Groovy: Dynamic Productivity for the Java Developer. ISBN 978-1-934356-09-8.