Groovy def Nøgleord

1. Oversigt

I denne hurtige vejledning undersøger vi begrebet def nøgleord i Groovy. Det giver en valgfri typefunktion til dette dynamiske JVM-sprog.

2. Betydning af def Nøgleord

Det def nøgleord bruges til at definere en utypet variabel eller en funktion i Groovy, da det er et valgfrit indtastet sprog.

Når vi er usikre på typen af ​​en variabel eller et felt, kan vi udnytte def at lade Groovy beslutte typer ved kørsel baseret på de tildelte værdier:

def firstName = "Samwell" def listOfCountries = ['USA', 'UK', 'FRANCE', 'INDIA'] 

Her, fornavn vil være en Snorog listOfCountries vil være en ArrayList.

Vi kan også bruge def nøgleord for at definere returtypen for en metode:

def multiplicer (x, y) {return x * y}

Her, formere sig kan returnere enhver type objekt afhængigt af de parametre, vi videregiver til den.

3. def Variabler

Lad os forstå hvordan def fungerer for variabler.

Når vi bruger def at erklære en variabel, erklærer Groovy det som en NullObject og tildel en nul værdi for det:

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

I det øjeblik vi tildeler en værdi til liste, Groovy definerer sin type baseret på den tildelte værdi:

liste = [1,2,4] hævde listeforekomst af ArrayList 

Lad os sige, at vi vil have vores variabeltype dynamisk og ændre med en opgave:

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

Vi kan ikke tildele Liste eller Snor til en int indtastet variabel, som dette vil kaste en undtagelse fra runtime.

Så for at overvinde dette problem og påberåbe sig den dynamiske karakter af Groovy bruger vi def nøgleord:

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

4. def Metoder

Det def nøgleord bruges yderligere til at definere den dynamiske returtype for en metode. Dette er praktisk, når vi kan have forskellige typer returværdier til en metode:

def divide (int x, int y) {if (y == 0) {return "Bør ikke divideres med 0"} ellers {return x / y}} assert divide (12, 3) forekomst af BigDecimal assert divide (1, 0 ) forekomst af streng

Vi kan også bruge def at definere en metode uden eksplicit retur:

def greetMsg () {println "Hej! Jeg er groovy"}

5. def mod type

Lad os diskutere nogle af de bedste fremgangsmåder omkring brugen af def.

Selvom vi muligvis bruger begge dele def og skriv sammen, mens deklarerer en variabel:

def int count assert count instanceof Integer

Det def nøgleord vil være overflødigt der, så vi skal bruge begge def eller en type.

Derudover skal vi undgå at bruge def for utypede parametre i en metode.

Derfor i stedet for:

ugyldigt multiplicere (def x, def y)

Vi foretrækker:

ugyldig gang (x, y)

Desuden skal vi undgå at bruge def når man definerer konstruktører.

6. Groovy def mod Java Objekt

Som vi har set de fleste af funktionerne i def nøgleord og dets anvendelser gennem eksempler, kan vi undre os over, om det svarer til at erklære noget ved hjælp af Objekt klasse i Java. Ja, def kan betragtes som ligner Objekt:

def fullName = "Norman Lewis"

På samme måde kan vi bruge Objekt i Java:

Objekt fullName = "Norman Lewis";

7. def vs. @TypeChecked

Som mange af os ville være fra en verden med strengt typede sprog, kan vi undre os hvordan man tvinger kompileringstidstypekontrol i Groovy. Vi kan let opnå dette ved hjælp af @TypeChecked kommentar.

For eksempel kan vi bruge @TypeChecked over en klasse for at aktivere typekontrol af alle dens metoder og egenskaber:

@TypeChecked klasse DefUnitTest udvider GroovyTestCase {def multiplicere (x, y) {return x * y} int divide (int x, int y) {return x / y}}

Her, den DefUnitTest klasse vil blive typekontrolleret, og kompilering mislykkes på grund af formere sig metode er ikke-skrevet. Groovy-kompilatoren viser en fejl:

[Kontrol af statisk type] - Kan ikke finde matchende metode java.lang.Object # multiplicere (java.lang.Object). Kontroller, om den deklarerede type er korrekt, og om metoden findes.

Så, for at ignorere en metode, kan vi bruge TypeCheckingMode.SKIP:

@TypeChecked (TypeCheckingMode.SKIP) def multipliceres (x, y)

8. Konklusion

I denne hurtige vejledning har vi set, hvordan man bruger def nøgleord for at påberåbe sig det dynamiske træk ved Groovy-sproget og få det til at bestemme typer af variabler og metoder under kørsel.

Dette nøgleord kan være praktisk til at skrive dynamisk og robust kode.

Som normalt er kodeimplementeringerne af denne vejledning tilgængelig på GitHub-projektet.


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