Groovy def Kľúčové slovo

1. Prehľad

V tomto rýchlom výučbe sa pozrieme na koncept def kľúčové slovo v Groovy. Poskytuje voliteľnú funkciu písania pre tento dynamický jazyk JVM.

2. Význam def Kľúčové slovo

The def kľúčové slovo sa používa na definovanie netypovej premennej alebo funkcie v Groovy, pretože ide o voliteľne napísaný jazyk.

Keď si nie sme istí typom premennej alebo poľa, môžeme to využiť def nechať Groovy rozhodovať o typoch za behu na základe priradených hodnôt:

def firstName = "Samwell" def listOfCountries = ['USA', 'UK', 'FRANCÚZSKO', 'INDIA'] 

Tu, krstné meno bude a Stringa listOfCountries bude ArrayList.

Môžeme tiež použiť def kľúčové slovo na definovanie návratového typu metódy:

def vynásobiť (x, y) {návrat x * y}

Tu, znásobiť môže vrátiť akýkoľvek typ objektu, v závislosti od parametrov, ktoré mu odovzdáme.

3. def Premenné

Poďme pochopiť ako def pracuje pre premenné.

Keď použijeme def deklarovať premennú, Groovy deklaruje ako NullObject a priradiť a nulový hodnota k tomu:

def list assert list.getClass () == org.codehaus.groovy.runtime.NullObject assert list.is (null) 

V okamihu, keď priradíme hodnotu k zoznam, Groovy definuje svoj typ na základe priradenej hodnoty:

list = [1,2,4] uplatniť zoznam inštancie ArrayList 

Povedzme, že chceme mať náš typ premennej dynamický a meniť sa s priradením:

int rate = 20 rate = [12] // GroovyCastException rate = "nill" // GroovyCastException

Nemôžeme priradiť Zoznam alebo String do an int zadaná premenná, ako toto spôsobí výnimku za behu.

Na prekonanie tohto problému a vyvolanie dynamickej podstaty Groovyho teda použijeme def kľúčové slovo:

def rate assert rate == null assert rate.getClass () == org.codehaus.groovy.runtime.NullObject rate = 12 asert rate instanceof Integer rate = "Not Available" asert rate instanceof String rate = [1, 4] assert rate instanceof List

4. def Metódy

The def kľúčové slovo sa ďalej používa na definovanie typu dynamického návratu metódy. Je to užitočné, keď pre metódu môžeme mať rôzne typy návratových hodnôt:

def divide (int x, int y) {if (y == 0) {return "Nemalo by sa deliť na 0"} else {return x / y}} assert divide (12, 3) instanceof BigDecimal assert divide (1, 0 ) instanceof String

Môžeme tiež použiť def definovať metódu bez explicitných návratov:

def greetMsg () {println "Ahoj! Som groovy"}

5. def vs. typ

Poďme diskutovať o niektorých najlepších postupoch týkajúcich sa používania produktu def.

Aj keď môžeme použiť oboje def a zadajte spolu pri deklarovaní premennej:

def int count assert count instanceof Integer

The def kľúčové slovo tam bude nadbytočné, takže by sme mali použiť buď def alebo typ.

Ďalej by sme mali vyhnúť sa použitiu def pre netypové parametre metódou.

Preto namiesto:

neplatné násobenie (def x, def y)

Mali by sme uprednostňovať:

neplatné násobenie (x, y)

Ďalej by sme mali vyhnúť sa použitiu def pri definovaní konštruktorov.

6. Groovy def vs. Java Objekt

Ako sme videli väčšinu funkcií def kľúčové slovo a jeho použitie na príkladoch, mohlo by nás zaujímať, či je to podobné ako deklarovať niečo pomocou Objekt triedy v Jave. Áno, def možno považovať za podobné Objekt:

def fullName = "Norman Lewis"

Podobne môžeme použiť Objekt v Jave:

Objekt fullName = "Norman Lewis";

7. def vs. @TypeChecked

Možno by nás zaujímalo, že mnohí z nás by boli zo sveta jazykov prísne písaných na stroji ako vynútiť kontrolu typu kompilácie v Groovy. To môžeme ľahko dosiahnuť pomocou @TypeChecked anotácia.

Napríklad môžeme použiť @TypeChecked nad triedou, aby sa povolila kontrola typu pre všetky jej metódy a vlastnosti:

@TypeChecked trieda DefUnitTest rozširuje GroovyTestCase {def znásobiť (x, y) {návrat x * y} int rozdelenie (int x, int y) {návrat x / y}}

Tu je DefUnitTest trieda bude typovo skontrolovaná a kompilácia zlyhá kvôli znásobiť metóda je netypová. Groovy kompilátor zobrazí chybu:

[Statická kontrola typu] - Nemožno nájsť metódu zhody java.lang.Object # multiply (java.lang.Object). Skontrolujte, či je deklarovaný typ správny a či metóda existuje.

Takže na ignorovanie metódy môžeme použiť TypeCheckingMode.SKIP:

@TypeChecked (TypeCheckingMode.SKIP) def vynásobiť (x, y)

8. Záver

V tomto rýchlom návode sme videli, ako používať def kľúčové slovo, aby vyvolalo dynamickú vlastnosť jazyka Groovy a umožnilo mu určiť typy premenných a metód za behu programu.

Toto kľúčové slovo môže byť užitočné pri písaní dynamického a robustného kódu.

Implementácie kódu tohto tutoriálu sú ako obvykle k dispozícii v projekte GitHub.


$config[zx-auto] not found$config[zx-overlay] not found