Programování

Groovy: Zapněte steroidy

AKTUALIZACE: Tento příspěvek prošel významnými aktualizacemi 17. listopadu 2016, aby opravil chybná prohlášení a příklady, opravil podkladové rozvržení HTML (není to čtenářům zřejmé, pokud si zdroj HTML neprohlédnete ve webovém prohlížeči) a opravil některé pravopisné problémy. Pokud z nějakého důvodu chcete vidět starý, nesprávný příspěvek, podívejte se na verzi archivovanou Wayback Machine.

Předtím jsem blogoval ohledně podpory Groovy pro zapnutí Stringu. Groovy se může zapnout mnohem víc než jen doslovně Tětivas (a doslovné integrální typy, které Java umožňuje zapnutí) a zde to krátce předvedu.

Groovy přepínač příkaz použije metodu implementovanou s názvem "isCase"zjistit, zda konkrétní přepínač možnost je uzavřena. To znamená, že vlastní objekty lze v Groovy „přepínat“. Pro jednoduchý příklad v tomto příspěvku na blogu použiji třídy Java SimpleState a State.java.

Výpis 1. SimpleState.java

 příklady zásilky; importovat statický java.lang.System.out; / ** * Třída Java, která má být použita při demonstraci "zapnutí steroidů" v Groovy. * Skript Groovy bude schopen {@code switch} na instancích této třídy * prostřednictvím implicitního vyvolání {@code toString ()}, pokud příkazy {@code case} * používají jako položky {@code String} s shodovat se. * / public class SimpleState {private String stateName; public SimpleState (konečný řetězec newStateName) {this.stateName = newStateName; } @Override public String toString () {return this.stateName; }} 

Výše uvedené třídy Java Tětiva reprezentaci lze zapnout ve skriptu Groovy, jak je uvedeno v následujícím seznamu kódů pro switchOnSimpleState.groovy:

Výpis 2. switchOnSimpleState.groovy

#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "Mottem pro stav $ {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" California ": print "Eureka" break case "Colorado": print "Nil sine numine" break case "Connecticut": print "Qui transtulit sustinet" break default: print "<>"} println "'" " 

Když je výše uvedený Groovy skript spuštěn proti výše uvedené jednoduché třídě Java, kód vytiskne správné informace, protože Groovy implicitně vyvolá toString () metoda na "stav" instance Stát zapnutý. Podobné funkce lze nyní dosáhnout v Javě, ale je třeba ji explicitně zavolat toString () na zapnutém objektu. Je také třeba mít na paměti, že když jsem na začátku roku 2010 napsal původní verzi tohoto příspěvku, Java nepodporovala přepínání řetězců. Výstup spuštění výše je zobrazen na snímku obrazovky níže (název skriptu se neshoduje výše, protože se jedná o starý snímek obrazovky z tohoto původního příspěvku, než byl opraven a aktualizován).

S Groovy a isCase metoda, mohu zapnout téměř jakýkoli datový typ, který se mi líbí. K prokázání toho je třída Java Stát bude použit a jeho seznam kódů je uveden níže. Zahrnuje a isCase (stát) metoda, kterou Groovy implicitně zavolá, když instance Stát jsou přepínány proti jako případ volby. V tomto případě isCase (stát) metoda jednoduše volá State.equals (Object) metoda k určení, zda to případ je pravda. I když se jedná o typické chování pro implementaci isCase (objekt), mohli jsme si nechat zjistit, zda tomu tak bylo nebo ne, jakkoli jsme chtěli.

Výpis 3. State.java

příklady zásilky; importovat statický java.lang.System.out; public class State {private String stateName; public State (konečný řetězec newStateName) {this.stateName = newStateName; } / ** * Metoda, kterou má implicitně použít přepínač Groovy, když je zapnuta instance této * třídy. * * @param compareState Stát předán prostřednictvím případu ke srovnání se mnou. * / public boolean isCase (final State compareState) {návrat porovnatState! = null? compareState.equals (this): false; } public boolean equals (final Object other) {if (! (other instanceof State)) {return false; } final State otherState = (State) other; if (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {return false; } návrat true; } @Override public String toString () {return this.stateName; }} 

Jednoduchá standardní třída Java uvedená výše implementuje isCase metoda, která umožní Groovy zapnout. Následující skript Groovy používá tuto třídu a je schopen úspěšně zapnout instanci Stá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") Stát arizona = nový stát ("Arizona") Stát kalifornie = nový stát ("Kalifornie") Stát colorado = nový stát ("Colorado") Stát connecticut = nový stát ("Connecticut") tisk "Heslo pro stát $ {state.stateName} je '"switch (state) {případ alabama: tisk" Audemus jura nostra Defere "případ přerušení Aljaška: tisk" sever k budoucnosti "případ přerušení arizona: tisk" Ditat Deus "případ přerušení arkansas : print "Regnat populus" break case Kalifornie: print "Eureka" break case colorado: print "Nil sine numine" break case connecticut: print "Qui transtulit sustinet" break default: print "<>"} println "'" " 

Výstup na dalším snímku obrazovky naznačuje, že skript Groovy je schopen úspěšně zapnout instanci a Stát objekt. První příkaz používá „jednoduchý“ příklad popsaný dříve a druhý příkaz používá příklad, který je třeba vyvolat Státje isCase (stát) metoda.

Krása této schopnosti mít třídy „přepínatelné“ na základě implementace isCase () Metoda spočívá v tom, že umožňuje stručnější syntaxi v situacích, které by jinak mohly vyžadovat zdlouhavé -li/jinak pokud/jiný konstrukty. Je lepší se těmto konstruktům úplně vyhnout, ale někdy na ně narazíme a na Groovy přepínač prohlášení je činí méně nudnými.

U Groovy je to zcela možné přepínač aby více možností přepínače odpovídalo zadaným podmínkám. Proto je důležité uvést seznam případ příkazy v pořadí, ve kterém je preferována shoda, protože první shoda bude ta, která bude provedena. The přestávka klíčové slovo se používá v Groovy's přepínač jak je to v Javě.

Groovy má mnohem více síly přepínač podporuje. Některé příspěvky, které pokrývají tuto moc, zahrnují Groovy Goodness: The Switch Statement, Groovy, let me count the ways in which I love thee, and the Groovy documentation.

Tento příběh „Groovy: Switch on Steroids“ byl původně publikován společností JavaWorld.

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