Programiranje

Groovy: vklopite steroide

NADGRADNJA: Ta objava je bila 17. novembra 2016 deležna pomembnih posodobitev, da bi popravila napačne izjave in primere, popravila osnovno postavitev HTML (bralcem ni očitno, razen če si vir HTML ogledate v spletnem brskalniku) in odpravila nekaj težav s črkovanjem. Če želite iz nekega razloga videti staro, napačno objavo, si oglejte različico, ki jo je arhiviral Wayback Machine.

Že prej sem pisal blog o podpori Groovyja za vklop Stringa. Groovy lahko vklopi veliko več kot le dobesedno Vrvicas (in dobesedni integralni tipi, ki jih Java omogoča vklop) in to na kratko predstavim tukaj.

Groovy's stikalo stavek bo uporabil metodo z imenom "isCase", da ugotovi, ali določen stikalo možnost se ujema. To pomeni, da so predmeti po meri v Groovyju "preklopljivi". Za preprost primer v tej objavi v blogu bom uporabil razrede Java SimpleState in State.java.

Seznam 1. SimpleState.java

 paket prah v.primeri; uvoz statičnega java.lang.System.out; / ** * Razred Java, ki se bo uporabljal pri predstavitvi "vklopa steroidov" v Groovyju. * Skript Groovy bo lahko {@code switch} na primerkih tega razreda * prek implicitnega priklica {@code toString ()}, če stavki {@code case} * kot elemente uporabljajo {@code String} ujemati se. * / javni razred SimpleState {private String stateName; javno SimpleState (končni niz newStateName) {this.stateName = newStateName; } @Override public String toString () {return this.stateName; }} 

Zgornji razred Java Vrvica predstavitev lahko vklopite v skriptu Groovy, kot je prikazano v naslednjem seznamu kod za switchOnSimpleState.groovy:

Seznam 2. switchOnSimpleState.groovy

#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "Moto države $ {state.stateName} je '" switch (state) {case "Alabama ": print" Audemus jura nostra defendere "case break" Alaska ": print" North to the future "break case" Arizona ": print" Ditat Deus "break case" Arkansas ": print" Regnat populus "break case" California ": print "Eureka" break case "Colorado": print "Nil sine numine" break case "Connecticut": print "Qui transtulit sustinet" break default: print "<>"} println "'" 

Ko se zgornji skript Groovy zažene proti zgornjemu preprostemu razredu Java, koda izpiše pravilne podatke, ker Groovy implicitno prikliče toString () metoda na "stanju" primerka Država vklopljen. Podobno funkcionalnost lahko zdaj dosežemo v Javi, vendar je treba to izrecno poklicati toString () na vklopljenem predmetu. Upoštevati je treba tudi, da ko sem v začetku leta 2010 pisal prvotno različico te objave, Java ni podpirala vklopa Strings. Rezultat izvajanja zgoraj je prikazan na posnetku zaslona spodaj (ime skripta se ne ujema zgoraj, ker je to stari posnetek zaslona iz tega prvotnega prispevka, preden je bil popravljen in posodobljen).

Z Groovyjem in isCase lahko vklopim skoraj vse vrste podatkov, ki so mi všeč. Da bi to dokazali, je razred Java Država bo uporabljen, njegov seznam kod pa je prikazan spodaj. Vključuje a isCase (država) metoda, ki jo bo Groovy implicitno poklical, ko bodo primeri Država so vklopljeni kot Ovitek izbire. V tem primeru je isCase (država) metoda preprosto pokliče State.equals (objekt) metoda za ugotavljanje, ali je to Ovitek je res. Čeprav je to tipično vedenje za izvedbe isCase (objekt), lahko bi lahko ugotovili, ali je temu tako ali ne, kakorkoli smo želeli.

Seznam 3. State.java

paket prah v.primeri; uvoz statičnega java.lang.System.out; javni razred State {private String stateName; javna država (končni niz newStateName) {this.stateName = newStateName; } / ** * Metoda, ki jo Groovyjevo stikalo uporablja implicitno, ko je vklopljen primerek tega razreda *. * * @param compareState State mi je posredoval primer, da ga primerjam z mano. * / public boolean isCase (končno stanje compareState) {return compareState! = null? compareState.equals (this): false; } javna logična vrednost je enako (končni objekt drug) {if (! (drug primer države)) {return false; } končno stanje otherState = (stanje) drugo; if (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {return false; } vrni true; } @Override public String toString () {return this.stateName; }} 

Preprosti standardni razred Java, prikazan zgoraj, izvaja isCase metoda, ki bo Groovyju omogočila, da jo vklopi. Naslednji skript Groovy uporablja ta razred in lahko uspešno vklopi primerek Država.

#! / usr / bin / env groovy import dustin.examples.State State = nova država ("Arkansas") Država alabama = nova država ("Alabama") Država arkansas = nova država ("Arkansas") država aljaska = nova država ("Alaska") država Arizona = nova država ("Arizona") država california = nova država ("California") država colorado = nova država ("Colorado") država connecticut = nova država ("Connecticut") print "Moto za država $ {state.stateName} je '"stikalo (država) {primer Alabama: tisk" Audemus jura nostra defendere "primer aljaske: tisk" Sever do prihodnosti "zadeva Arizona: tisk" Ditat Deus "primer arkanzas : print "Regnat populus" break case california: print "Eureka" break case colorado: print "Nil sine numine" break case connecticut: print "Qui transtulit sustinet" break default: print "<>"} println "'" 

Izpis v naslednjem posnetku zaslona kaže, da lahko skript Groovy uspešno vklopi primerek a Država predmet. Prvi ukaz uporablja "preprost" primer, o katerem smo že govorili, drugi ukaz pa primer, ki ga je treba priklicati Državaje isCase (država) metoda.

Lepota te zmožnosti, da so razredi "preklopljivi" na podlagi izvajanja isCase () metoda je, da omogoča bolj jedrnato sintakso v situacijah, ki bi sicer zahtevale dolgo če/sicer če/drugače konstrukti. Takšnim konstrukcijam se je bolje izogniti, včasih pa naletimo na njih in Groovyja stikalo izjava jih naredi manj dolgočasne.

Z Groovyjem je povsem mogoče stikalo če želite, da se več možnosti stikala ujema z navedenimi pogoji. Zato je pomembno, da navedete Ovitek izjave po vrstnem redu, katero ujemanje je prednostno, ker bo prvo ujemanje izvedeno. The odmor ključna beseda se uporablja v Groovyjevem stikalo kot je v Javi.

V tem, kar ima Groovy, je veliko več moči stikalo podpira. Nekatere objave, ki pokrivajo to moč, vključujejo Groovy Goodness: The Switch Statement, Groovy, naj preštejem načine, kako te ljubim, in Groovy dokumentacijo.

To zgodbo, "Groovy: Vklop steroidov", je prvotno objavil JavaWorld.

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