Groovy

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Groovy
Logo
Paradigma: objektově orientovaný, imperativní, skriptovací, funkcionální
Vznikl v: 2003
Autor: James Strachan, Guillaume LaForge
Vývojář: Guillaume LaForge
Typová kontrola: dynamická, statická, silná, „duck-typing“
Ovlivněn jazyky: Java, Python, Ruby, Perl, Smalltalk, Objective-C
OS: multiplatformní
Licence: Apache License v2.0
Web: groovy.codehaus.org

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.

Nastavení prostředí[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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!");
    }
}

Stejného výsledku je v jazyce Groovy možno dosáhnout 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[editovat | editovat zdroj]

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[editovat | editovat zdroj]

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(tiskniŘádekSouboru)

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

GUI[editovat | editovat zdroj]

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. Následují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[editovat | editovat zdroj]

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.

Reference[editovat | editovat zdroj]

Externí odkazy[editovat | editovat zdroj]