V sobotu 2. listopadu proběhla mohutná oslava naší plnoletosti !!
Multimediaexpo.cz je již 18 let na českém internetu !!

Groovy

Z Multimediaexpo.cz

Verze z 14. 4. 2014, 11:26; Sysop (diskuse | příspěvky)
(rozdíl) ← Starší verze | zobrazit aktuální verzi (rozdíl) | Novější verze → (rozdíl)

Groovy je objektově orientovaný programovací jazyk pro platformu Java. Jde o alternativu k programovacímu jazyku Java. Můžeme se na něj dívat jako na skriptovací jazyk pro javovskou platformu. Inspiraci čerpal z jazyků Python, Ruby, Perl a Smalltalk. Využívá výhody objektového programování, ale zároveň poskytuje zjednodušenou „skriptovací“ syntaxi, která umí zabalit a rozbalit často opakované části kódu. Jedním z jeho cílů je redukovat „povinný“ kód a zjednodušit tak tvorbu webových, databázových či desktopových aplikací. Kompilace je prováděna přímo do „bytecode“, takže jej můžeme použít všude tam, kde funguje Java.

Obsah

Nastavení prostředí

Pro vývoj v jazyce Groovy je potřeba stáhnout binární distribuci např. z domovské stránky. A mít nainstalováno vývojové prostředí Java. Pak už jen stačí nastavit některé proměnné prostředí:

  • přidat GROOVY_HOME proměnnou na adresář, ve kterém je uložena distribuce
  • do PATH proměnné přidat cestu do adresáře GROOVY_HOME/bin
  • a nastavit JAVA_HOME proměnnou na adresář, ve kterém je vaše JDK.

Následně je možné spustit groovy shell příkazem „groovysh“ nebo GUI konzolu příkazem „groovyConsole“.

Některé vlastnosti jazyka Groovy

Jednoduchým příkladem může být vypsání věty „Vítej světe!“ na konzolu. V Javě je potřeba kromě samotného příkazu definovat třídu a hlavní metodu:

 class VítejSvěte {
   public static void Main(String args[]) {
      System.out.println ("Vítej světe!");
   }
 }

Ten samý cíl je v jazyce Groovy umožněn například následujícím jednoduchým způsobem:

 println "Vítej světe!"

Takže Groovy doplní všechen ostatní kód (definici třídy a hlavní metody, detaily syntaxe jako jsou závorky) potřebný pro překlad v Javě. Jednotlivé příkazy není zapotřebí zakončovat středníkem.

Dalším zjednodušením je oblast datových typů. Datový typ se implicitně nadefinuje dle vložené hodnoty. A co víc, v případě použití pole, seznamu atd. je možné libovolně vkládat různé datové typy jako je to v následujícím příkladě:

 seznamČísel = [1776, -1, 33.3333, "pět", 928734928763]

Nebo můžeme vytvořit jednoduchou mapu následovně:

 výška = ["Martin":190, "Helena":155, "Věra":"Neuvedla"]

Groovy častokrát umožňuje více variant správné syntaxe, jako v následujícím příkladě:

 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 posledním řádku je proměnná volána zevnitř složených závorek díky znakům ${}, které upozorňují, že uvnitř se nachází Groovy výraz. Dále můžeme vložit jednoduchý cyklus na procházení výše uvedené mapy včetně podmínky pro vypsání obsahu:

 výška.each{
    if(it.value == "Neuvedla"){
        println it.key + " neuvedl/a svou výšku."
    }else {
        if(it.value<170){
            println it.key + " měří méně než 170 cm."
        } else {
            println it.key + " měří nejméně 170 cm."
        }
    }
 }

Klíčové slovo „it“ představuje automatickou proměnnou, do které se ukládá aktuální hodnota nebo objekt. V tomto případě je to aktuální záznam v mapě. V příkladu je vidět i použití booleanovských operátorů, které jsou podobné jako v Javě a zahrnují následující možnosti:

 ==
 !=
 >
 >=
 <
 <=

Na rozdíl od Javy však v Groovy operátor = = znamená logickou rovnost pro všechny typy atributů. V Javě se např. pro porovnání obsahu dvou atributů obsahujících řetězec musí použít metoda equals().

Closures

Dalším zjednodušujícím prvkem Groovy je tzv. “closure”. V následujícím příkladu je vidět jak můžeme celou třídu nahradit jednoduchým closure:

Třída

 public class DruháMocnina {
   public static int umocni(int číslo){
        return číslo * číslo;
   }
 }
 
''Closure''
 def c = { číslo -> číslo * číslo }

V prvním případě musíme pro vypsání mocniny čísla získat instanci třídy DruháMocnina a poté volat danou metodu. U closure je metoda uložena v atributu c a pro vypsání mocniny např. čísla 99 nám stačí následující příkaz:

println c(99)

Atribut, ve kterém je closure uložena pak můžeme předávat napříč programu, jako kterýkoliv jiný atribut. Closure se na první pohled podobá klasickému bloku. Blok je však prováděn hned jak na něj překladač natrefí. Closure je potřeba explicitně zavolat.

Předcházející closure můžeme definovat ještě jednodušeji s využitím klíčového slova „it“

def c = { it * it }

Proměnná „it“ v sobě automaticky ukládá parametr, který je při volání closure zadán.

Práce se soubory

Relativně jednoduchá je i práce se soubory. Následujícím scriptem vypíšeme na konzolu obsah textového souboru „test.txt“, přičemž každý řádek bude začínat řetězcem „Řádek souboru:“

 soubor = new File("C:\\test.txt")
 tiskniŘádekSouboru = { println "Řádek souboru: " + it }
 myFile.eachLine( printFileLine )

V definici cesty k souboru je stejně jako v Javě použito dvou lomítek, jelikož se jedná o escape sekvenci.

GUI

V Groovy je možné využít všechny třídy z Javovské knihovny AWT či Swing. Avšak Groovy poskytuje i svůj vlastní „SwingBuilder“, který umí vytvářet plnohodnotný GUI deklarativním způsobem. Využívá přitom tzv. Builders, které se postarají o vytváření komplexních objektů, jako například vytváření instancí potomků či volání Swingových metod. Nasledující příklad vytvoří malé aplikační okno s tlačítkem, které po každém stisknutí vypíše součet všech stisknutí od začátku aplikace.

 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 = "Kliknuto ${počet} krát."; println "kliknuto"},
         constraints:BL.SOUTH)
  }
 }

Grails framework

Jedním z frameworků postavených na Groovy jazyce je Grails framework. Ten umožňuje rychlejší vytváření náročných webových aplikací. V současnosti je tento framework přímo podporován například i ve vývojovém prostředí NetBeans (od verze 6.8), které se o většinu základní konfigurace postará, a tak si můžete snadno vyzkoušet ukázkové příklady, které v sobě zahrnuje, nebo které jsou k dispozici na domovské stránce Grails. Samotný vývoj pomocí tohoto frameworku je postaven na principu „Convention over Configuration“. To znamená, že vývojář je co nejvíce odlehčen od zdlouhavého rozhodování a konfigurování, přičemž se však musí uspokojit s přednastavenou implementací.

Grails se vyznačuje tzv. Model-view-controller (MVC) přístupem. Výsledkem je přehledně strukturovaná aplikace, která si i v případě velké robustnosti, zachovává relativně snadnou obsluhu a modifikovatelnost.

IntelliJ IDEA

S jazykem Groovy a Grails frameworkem je ve značné míře spojováno i vývojové prostředí „IntelliJ Idea (Intelligent Java IDE)“, které je zaměřené především na produktivitu vývojářů. Umožňuje zlepšení kódu díky asistenci a analýze kódu, více než 50 refactoringům a spoustě dalších funkcí. Podporuje také masivní kombinaci implementovaných vývojových nástrojů a pomáhá zvětšit jejich funkčnost i pomocí mnoha zásuvných modulů třetích stran. Plná klávesnicová podpora (PDF) umístí každou funkci nebo akci přímo pod prsty uživatele.

IntelliJ IDEA se přirozeně integruje s nejpopulárnějším VCS včetně Perforce, StarTeam, Subversion, CVS, Visual SourceSafe a také s novým týmovým řešením pro kontinuální aplikační vývoj -- TeamCity.

Externí odkazy