Programavimas

Groovy: įjunkite steroidus

ATNAUJINTI: Šis įrašas buvo reikšmingai atnaujintas 2016 m. Lapkričio 17 d., Siekiant ištaisyti klaidingus teiginius ir pavyzdžius, pataisyti pagrindinį HTML išdėstymą (skaitytojams tai nėra akivaizdu, nebent HTML šaltinį žiūrite žiniatinklio naršyklėje) ir išspręsti kai kurias rašybos problemas. Jei dėl kokių nors priežasčių norite pamatyti seną, neteisingą įrašą, peržiūrėkite „Wayback Machine“ archyvuotą versiją.

Anksčiau rašiau tinklaraštį apie „Groovy“ palaikymą įjungiant „String“. Groovy gali įjungti daug daugiau nei tiesiog pažodžiui Stygoss (ir pažodinius integralų tipus, kuriuos „Java“ leidžia įjungti), ir aš tai trumpai pademonstruoju.

Groovy's perjungti sakinyje bus naudojamas metodas, įdiegtas pavadinimu "isCase"nustatyti, ar konkretus perjungti variantas yra suderintas. Tai reiškia, kad „Groovy“ tinkintus objektus galima „perjungti“. Paprastam pavyzdžiui šiame tinklaraščio įraše naudosiu „Java“ klases „SimpleState“ ir Valstybė.java.

Sąrašas 1. SimpleState.java

 pakuotė dustin.pavyzdžiai; importuoti statinį java.lang.System.out; / ** * „Java“ klasė, naudojama demonstruojant „įjungti steroidus“ Groovyje. * „Groovy“ scenarijus galės {@code switch} įjungti šios klasės egzempliorius * netiesiogiai iškviesdamas {@code toString ()}, jei {@code case} * sakiniuose elementai naudojami {@code String} s atitikti. * / viešoji klasė „SimpleState“ {private String stateName; public SimpleState (final String newStateName) {this.stateName = newStateName; } @Paisyti viešąją eilutę toString () {grąžinti this.stateName; }} 

Aukščiau nurodytos „Java“ klasės Stygos atstovavimą galima įjungti Groovy scenarijuje, kaip parodyta kitame switchOnSimpleState.groovy:

Sąrašas 2. switchOnSimpleState.groovy

#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "$ {state.stateName} valstijos šūkis yra" "jungiklis (valstija) {atvejis" Alabama ": spausdinti" Audemus jura nostra defere "pertraukos atvejį" Aliaska ": spausdinti" Šiaurės į ateitį "pertraukos atvejį" Arizona ": spausdinti" Ditat Deus "pertraukos atvejį" Arkanzasas ": spausdinti" Regnat populus "pertraukos atvejį" Kalifornija ": spausdinti „Eureka“ pertraukos dėklą „Colorado“: spausdinti „Nulis sine numine“ pertraukos atvejis „Connecticut“: spausdinti „Qui transtulit sustinet“ pertrauka numatytasis: spausdinti „<>“} println "'" 

Kai minėtas „Groovy“ scenarijus paleidžiamas prieš aukščiau nurodytą paprastą „Java“ klasę, kodas išspausdina teisingą informaciją, nes „Groovy“ netiesiogiai kviečia toString () metodas "valstybės" instancijoje Valstija yra įjungtas. Dabar panašią funkciją galima pasiekti „Java“, tačiau reikia aiškiai paskambinti toString () ant įjungto objekto. Taip pat verta nepamiršti, kad kai 2010 m. Pradžioje parašiau originalią šio įrašo versiją, „Java“ nepalaikė „Strings“ įjungimo. Aukščiau aprašytų rezultatų išvestis rodoma žemiau esančioje ekrano kopijoje (scenarijaus pavadinimas neatitinka aukščiau, nes tai yra sena ekrano nuotrauka iš šio originalaus įrašo, kol ji nebuvo taisyta ir atnaujinta).

Su Groovy ir isCase metodą, aš galiu įjungti beveik bet kokį man patinkantį duomenų tipą. Norėdami tai parodyti, „Java“ klasė Valstija bus naudojamas, o jo kodų sąrašas parodytas žemiau. Tai apima a isCase (valstija) metodas, kurį Groovy netiesiogiai vadins, kai Valstija yra perjungiami kaip atveju pasirinkimus. Šiuo atveju isCase (valstija) metodas tiesiog vadina State.equals (objektas) metodas nustatyti, ar tai atveju tiesa. Nors tai yra tipiškas elgesys įgyvendinant „isCase“ (objektas), mes būtume galėję nustatyti, ar taip yra, ar ne kokiu nors būdu norėjome.

Sąrašas 3. Valstybė.java

pakuotė dustin.pavyzdžiai; importuoti statinį java.lang.System.out; public class Valstybė {private String stateName; viešoji būsena (galutinė eilutė newStateName) {this.stateName = newStateName; } / ** * Metodas, kurį netiesiogiai turi naudoti Groovy jungiklis, kai įjungiamas šios * klasės egzempliorius. * * @param palygintiValstybės valstybė man perdavė bylą, kad ji būtų lyginama su manimi. * / viešoji loginė „isCase“ (galutinė būsenos palyginimo būsena) {grąžinti palyginimą = = null? palyginti valstybę.lygus (tai): klaidinga; } viešoji loginė reikšmė lygi (final Object other) {if (! (other Stateof of State)) {return false; } final state otherState = (valstija) kita; if (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {grąžinti klaidingą; } return true; } @Paisyti viešąją eilutę toString () {grąžinti this.stateName; }} 

Aukščiau parodyta paprasta standartinė „Java“ klasė įgyvendina isCase metodas, kuris leis Groovy jį įjungti. Šis Groovy scenarijus naudoja šią klasę ir gali sėkmingai įjungti Valstija.

#! / usr / bin / env groovy import dustin.examples. valstijos valstijos valstija = nauja valstija ("Arkanzasas") valstija alabama = nauja valstija ("Alabama") valstija arkanzasas = nauja valstija ("Arkanzasas") valstija alaska = nauja valstija ("Aliaska") valstijos arizona = nauja valstija ("Arizona") valstijos kalifornija = nauja valstija ("Kalifornija") valstija kolorado = nauja valstija ("Kolorado") valstija connecticut = nauja valstija ("Konektikutas") spausdinti "Šūkis $ {state.stateName} valstija yra "jungiklis (valstija) {atvejis alabama: spausdinti" Audemus jura nostra defereere "pertraukos bylą alaska: spausdinti" šiaurę į ateitį "pertraukos atvejis arizona: spausdinti" Ditat Deus "pertraukos atvejį arkansas : spausdinti "Regnat populus" pertraukos atvejį Kalifornijoje: spausdinti "Eureka" pertraukos atvejį koloradą: spausdinti "Nulio sine numine" pertraukos atvejis connecticut: spausdinti "Qui transtulit sustinet" pertrauka numatytasis: spausdinti "<>"} println "'" 

Kitos ekrano momentinės nuotraukos išvestis rodo, kad „Groovy“ scenarijus gali sėkmingai įjungti „a“ egzempliorių Valstija objektas. Pirmoji komanda naudoja anksčiau aptartą „paprastą“ pavyzdį, o antroji - pavyzdį, kurį reikia iškviesti Valstija's isCase (valstija) metodas.

Šio gebėjimo rengti pamokas grožis gali būti „perjungiamas“, atsižvelgiant į isCase () metodas yra tas, kad jis leidžia glaustesnę sintaksę situacijose, kurios kitu atveju galėjo reikalauti ilgo jei/dar jei/Kitas konstruoja. Geriau visiškai vengti tokių konstrukcijų, tačiau kartais susiduriame su jais ir „Groovy“ perjungti pareiškimas daro juos mažiau varginančius.

Tai visiškai įmanoma naudojant „Groovy“ perjungti kad kelios jungiklio parinktys atitiktų nurodytas sąlygas. Todėl svarbu išvardyti sąrašą atveju teiginiai, pagal kuriuos pirmenybė teikiama pirmenybei, nes pirmasis bus tas, kuris bus įvykdytas. pertrauka raktinis žodis naudojamas Groovy's perjungti kaip yra „Java“.

Yra daug daugiau galios tame, ką Groovy perjungti palaiko. Kai kurie įrašai, apimantys šią galią, yra „Groovy Goodness: The Switch Statement“, „Groovy“, leisk man suskaičiuoti būdus, kuriais aš tave myliu, ir „Groovy“ dokumentaciją.

Šią istoriją „Groovy: Steroidų įjungimas“ iš pradžių paskelbė „JavaWorld“.

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