Programovanie

Groovy: Zapnite si steroidy

AKTUALIZÁCIA: Tento príspevok prešiel významnými aktualizáciami 17. novembra 2016 s cieľom opraviť chybné tvrdenia a príklady, opraviť základné rozloženie HTML (čo čitateľom nie je zrejmé, pokiaľ si zdroj HTML neprezeráte vo webovom prehliadači) a opraviť problémy s pravopisom. Ak z nejakého dôvodu chcete vidieť starý nesprávny príspevok, pozrite si verziu archivovanú strojom Wayback.

Už som predtým blogoval ohľadne podpory Groovy pre zapnutie String. Groovy sa dá zapnúť oveľa viac než len doslovne Strings (a doslova integrálne typy, ktoré Java umožňuje zapnúť) a tu to stručne demonštrujem.

Groovy prepínač príkaz použije metódu implementovanú s názvom "isCase„určiť, či konkrétny prepínač možnosť sa zhoduje. To znamená, že vlastné objekty sú v Groovy „prepínateľné“. Pre jednoduchý príklad v tomto blogovom príspevku použijem triedy Java SimpleState a State.java.

Zoznam 1. SimpleState.java

 balenie zásypu.príklady; importovať statický java.lang.System.out; / ** * Trieda Java, ktorá sa má použiť pri demonštrácii "zapnutia steroidov" v aplikácii Groovy. * Skript Groovy bude schopný {@code switch} v inštanciách tejto triedy * prostredníctvom implicitného vyvolania funkcie {@code toString ()}, ak {@code case} * príkazy používajú ako položky {@code String} s tak, aby zodpovedala. * / verejná trieda SimpleState {private String stateName; public SimpleState (konečný reťazec newStateName) {this.stateName = newStateName; } @Override public String toString () {return this.stateName; }} 

Vyššie uvedené triedy Java String reprezentáciu je možné zapnúť v Groovy skripte, ako je uvedené v nasledujúcom zozname kódov pre switchOnSimpleState.groovy:

Zoznam 2. switchOnSimpleState.groovy

#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "Mottom pre stav $ {state.stateName} je '" switch (state) {case "Alabama ": print" Audemus jura nostra obranere "break case" 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 break "Connecticut": print "Qui transtulit sustinet" break default: print "<>"} println "'" " 

Keď je uvedený skript Groovy spustený proti vyššie uvedenej jednoduchej triede Java, kód vytlačí správne informácie, pretože Groovy implicitne vyvolá natiahnuť() metóda na inštancii "state" z Štát zapnutý. Podobné funkcie je teraz možné dosiahnuť aj v prostredí Java, ale je potrebné ich výslovne zavolať natiahnuť() na zapnutom objekte. Je tiež potrebné mať na pamäti, že keď som začiatkom roku 2010 napísal pôvodnú verziu tohto príspevku, Java nepodporovala zapínanie reťazcov. Výsledok spustenia vyššie uvedeného je uvedený na snímke obrazovky nižšie (názov skriptu sa nezhoduje vyššie, pretože ide o starú snímku obrazovky z tohto pôvodného príspevku, ktorá bola opravená a aktualizovaná).

S Groovy a isCase metódou, môžem zapnúť takmer akýkoľvek dátový typ, ktorý sa mi páči. Na demonštráciu je to trieda Java Štát použije sa a jeho zoznam kódov je uvedený nižšie. Zahŕňa a isCase (štát) metóda, ktorú Groovy implicitne zavolá v prípadoch Štát sa prepínajú ako prípade možnosti. V takom prípade isCase (štát) metóda jednoducho volá State.equals (Object) metóda na zistenie, či prípade je pravda. Aj keď toto je typické správanie pre implementáciu isCase (objekt), mohli sme nechať zistiť, či to tak bolo alebo nie, akýmkoľvek spôsobom sme chceli.

Zoznam 3. State.java

balenie zásypu.príklady; importovať statický java.lang.System.out; public class State {private String stateName; public State (konečný reťazec newStateName) {this.stateName = newStateName; } / ** * Metóda, ktorú má implicitne použiť prepínač Groovy, keď je zapnutá inštancia tejto * triedy. * * @param compareState State mi prešiel prípadom, aby som ho mohol porovnať so mnou. * / public boolean isCase (final State compareState) {return compareState! = null? compareState.equals (this): false; } public boolean equals (final Object other) {if (! (other instanceof State)) {return false; } konečný štát otherState = (State) other; if (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {return false; } návrat pravdivý; } @Override public String toString () {return this.stateName; }} 

Jednoduchá štandardná trieda Java uvedená vyššie implementuje isCase metóda, ktorá umožní Groovymu zapnúť to. Nasledujúci skript Groovy používa túto triedu a je schopný úspešne zapnúť inštanciu Štát.

#! / usr / bin / env groovy import dustin.examples.State State state = new State ("Arkansas") State alabama = new State ("Alabama") State arkansas = new State ("Arkansas") State alaska = new State ("Aljaška") Štát arizona = nový štát ("Arizona") Štát kalifornia = nový štát ("Kalifornia") Štát colorado = nový štát ("Colorado") Štát connecticut = nový štát ("Connecticut") tlačiť "Heslo pre štát $ {state.stateName} je '"switch (state) {case alabama: print" Audemus jura nostra obranere "break case aljaška: print" North to the future "break case arizona: print" Ditat Deus "break case arkansas : print "Regnat populus" break case kalifornia: print "Eureka" break case colorado: print "Nil sine numine" break case connecticut: print "Qui transtulit sustinet" break default: print "<>"} println "'" " 

Výstup na nasledujúcej snímke obrazovky naznačuje, že skript Groovy je schopný úspešne zapnúť inštanciu súboru Štát objekt. Prvý príkaz používa „jednoduchý“ príklad, o ktorom sme už hovorili, a druhý príkaz, používa príklad, ktorý je potrebné vyvolať Štátje isCase (štát) metóda.

Krása tejto schopnosti mať triedy „prepínateľná“ na základe implementácie isCase () Táto metóda umožňuje stručnejšiu syntax v situáciách, ktoré by inak mohli byť potrebné zdĺhavé ak/ináč Ak/inak konštruktov. Je lepšie vyhnúť sa takýmto konštrukciám úplne, ale niekedy narazíme na nich a na Groovy prepínač vyhlásenie ich robí menej únavnými.

S Groovy je to úplne možné prepínač aby viac možností prepínania zodpovedalo zadaným podmienkam. Preto je dôležité uviesť zoznam prípade príkazy v poradí, pre ktoré je preferovaná zhoda, pretože prvá zhoda bude vykonaná. The prestávka kľúčové slovo sa používa v Groovy prepínač ako je to v Jave.

V Groovy je oveľa viac sily prepínač podporuje. Niektoré príspevky týkajúce sa tejto sily zahŕňajú Groovy Goodness: The Switch Statement, Groovy, dovoľte mi spočítať spôsoby, ako ťa milujem, a dokumentáciu Groovy.

Tento príbeh „Groovy: Switch on Steroids“ bol pôvodne publikovaný spoločnosťou JavaWorld.

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