Προγραμματισμός

Groovy: Ενεργοποιήστε τα στεροειδή

ΕΚΣΥΓΧΡΟΝΙΖΩ: Αυτή η ανάρτηση υποβλήθηκε σε σημαντικές ενημερώσεις στις 17 Νοεμβρίου 2016 για τη διόρθωση λανθασμένων δηλώσεων και παραδειγμάτων, για τη διόρθωση της υποκείμενης διάταξης HTML (δεν είναι προφανές για τους αναγνώστες εκτός εάν προβάλλετε πηγή HTML σε πρόγραμμα περιήγησης ιστού) και για να διορθώσετε ορισμένα προβλήματα ορθογραφίας. Εάν για κάποιο λόγο θέλετε να δείτε την παλιά, λανθασμένη ανάρτηση, ρίξτε μια ματιά στην έκδοση που αρχειοθετήθηκε από το Wayback Machine.

Έχω κάνει blog στο παρελθόν σχετικά με την υποστήριξη του Groovy για την ενεργοποίηση του String. Το Groovy μπορεί να ενεργοποιηθεί πολύ περισσότερο από απλώς κυριολεκτικά Σειράs (και κυριολεκτικοί ακέραιοι τύποι που η Java επιτρέπει την ενεργοποίηση) και το παρουσιάζω εν συντομία εδώ.

Γκρόβι διακόπτης Η δήλωση θα χρησιμοποιήσει μια μέθοδο που εφαρμόζεται με το όνομα "είναι η υπόθεση"για να προσδιορίσετε εάν ένα συγκεκριμένο διακόπτης η επιλογή ταιριάζει. Αυτό σημαίνει ότι τα προσαρμοσμένα αντικείμενα είναι "εναλλάξιμα" στο Groovy. Για το απλό παράδειγμα σε αυτήν την ανάρτηση ιστολογίου, θα χρησιμοποιήσω τις τάξεις Java Απλό κράτος και State.java.

Λίστα 1. SimpleState.java

 πακέτο dustin.example; εισαγωγή στατικού java.lang.System.out; / ** * Κατηγορία Java που θα χρησιμοποιηθεί για την επίδειξη της "ενεργοποίησης στεροειδών" στο Groovy. * Το σενάριο Groovy θα μπορεί να {@code} ενεργοποιεί τις παρουσίες αυτής της κλάσης * μέσω της σιωπηρής επίκλησης του {@code toString ()} εάν οι δηλώσεις {@code case} * χρησιμοποιούν το {@code String} ως αντικείμενα να ταιριάζει. * / δημόσια τάξη SimpleState {private String stateName; δημόσιο SimpleState (τελική συμβολοσειρά newStateName) {this.stateName = newStateName; } @Override public String toString () {return this.stateName; }} 

Η παραπάνω κλάση Java Σειρά η αναπαράσταση μπορεί να ενεργοποιηθεί σε ένα σενάριο Groovy όπως φαίνεται στην επόμενη λίστα κωδικών για switchOnSimpleState.groovy:

Λίστα 2. switchOnSimpleState.groovy

#! / usr / bin / env groovy import dustin.examples.SimpleState SimpleState state = new SimpleState ("Colorado") print "Το σύνθημα για την κατάσταση του $ {state.stateName} είναι '" switch (state) {case "Alabama ": print" Audemus jura nostra defendere "break case" Alaska ": print" North to the μέλλον "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 "" 

Όταν το παραπάνω σενάριο Groovy εκτελείται με την παραπάνω απλή κλάση Java, ο κώδικας εκτυπώνει τις σωστές πληροφορίες επειδή ο Groovy επικαλείται έμμεσα το toString () μέθοδο για την κατάσταση "κατάσταση" του κατάσταση είναι ενεργοποιημένο. Παρόμοια λειτουργικότητα μπορεί τώρα να επιτευχθεί στην Java, αλλά πρέπει κανείς να καλέσει ρητά toString () στο αντικείμενο που ενεργοποιείται. Αξίζει επίσης να θυμάστε ότι όταν έγραψα την αρχική έκδοση αυτής της ανάρτησης στις αρχές του 2010, η Java δεν υποστήριξε την ενεργοποίηση του Strings. Η έξοδος της εκτέλεσης των παραπάνω εμφανίζεται στο στιγμιότυπο οθόνης παρακάτω (το όνομα του σεναρίου δεν ταιριάζει παραπάνω, επειδή αυτό είναι ένα παλιό στιγμιότυπο οθόνης από αυτήν την αρχική ανάρτηση προτού διορθωθεί και ενημερωθεί).

Με τον Γκρόβι και το είναι η υπόθεση μέθοδος, μπορώ να ενεργοποιήσω σχεδόν οποιονδήποτε τύπο δεδομένων που μου αρέσει. Για να το αποδείξετε αυτό, η κλάση Java κατάσταση θα χρησιμοποιηθεί και η λίστα κωδικών του φαίνεται παρακάτω. Περιλαμβάνει ένα isCase (πολιτεία) μέθοδος που ο Groovy θα καλέσει σιωπηρά όταν εμφανιστούν κατάσταση εναλλάσσονται ως το υπόθεση επιλογές. Σε αυτήν την περίπτωση, το isCase (πολιτεία) μέθοδος απλά καλεί το State.equals (Αντικείμενο) μέθοδος για να προσδιοριστεί εάν αυτό υπόθεση είναι αλήθεια. Αν και αυτή είναι η τυπική συμπεριφορά για υλοποιήσεις του isCase (αντικείμενο), θα μπορούσαμε να το καθορίσουμε αν συνέβαινε ή όχι με οποιονδήποτε τρόπο θέλαμε.

Λίστα 3. State.java

πακέτο dustin.example; εισαγωγή στατικού java.lang.System.out; Δημόσια τάξη State {private String stateName; δημόσια κατάσταση (τελική συμβολοσειρά newStateName) {this.stateName = newStateName; } / ** * Μέθοδος που πρέπει να χρησιμοποιείται από τον διακόπτη του Groovy σιωπηρά όταν είναι ενεργοποιημένη μια παρουσία αυτής της κλάσης *. * * @param membandingkanState State μου πέρασε μέσω θήκη για να συγκριθεί με μένα. * / public boolean isCase (τελική κατάσταση σύγκρισηςState) {return membandingkanState! = null? membandingkanState.equals (this): false; } δημόσια boolean ισούται με (τελικό αντικείμενο άλλο) {if (! (other instanceof State)) {return false; } τελική κατάσταση otherState = (State) other; if (this.stateName == null? otherState.stateName! = null:! this.stateName.equals (otherState.stateName)) {επιστροφή false; } επιστροφή αληθινή; } @Override public String toString () {return this.stateName; }} 

Η απλή τυπική κλάση Java που φαίνεται παραπάνω εφαρμόζει ένα είναι η υπόθεση μέθοδος που θα επιτρέψει στον Groovy να το ενεργοποιήσει. Το ακόλουθο σενάριο Groovy χρησιμοποιεί αυτήν την κλάση και μπορεί να ενεργοποιήσει με επιτυχία την παρουσία του κατάσταση.

#! / usr / bin / env groovy εισαγωγή dustin.examples.State State state = new State ("Arkansas") State alabama = new State ("Alabama") State arkansas = new State ("Arkansas") State alaska = νέο κράτος ("Αλάσκα") State arizona = new State ("Arizona") State california = new State ("California") State colorado = new State ("Colorado") State connecticut = new State ("Connecticut") εκτύπωση "Το σύνθημα για η κατάσταση του $ {state.stateName} είναι '"switch (state) {case alabama: print" Audemus jura nostra defendere "break case alaska: print" North to the μέλλον "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 "'" 

Η έξοδος στο επόμενο στιγμιότυπο οθόνης δείχνει ότι το σενάριο Groovy είναι σε θέση να ενεργοποιήσει επιτυχώς μια παρουσία ενός κατάσταση αντικείμενο. Η πρώτη εντολή χρησιμοποιεί το "απλό" παράδειγμα που συζητήθηκε νωρίτερα και η δεύτερη εντολή χρησιμοποιεί το παράδειγμα που πρέπει να επικαλεστεί κατάσταση'μικρό isCase (πολιτεία) μέθοδος.

Η ομορφιά αυτής της ικανότητας να έχουν μαθήματα "εναλλασσόμενα" με βάση την εφαρμογή ενός isCase () Η μέθοδος είναι ότι επιτρέπει πιο περιεκτική σύνταξη σε καταστάσεις που διαφορετικά θα απαιτούσαν μακροχρόνια αν/αλλιώς εάν/αλλού κατασκευές. Είναι προτιμότερο να αποφεύγετε εντελώς τέτοιες κατασκευές, αλλά μερικές φορές συναντάμε αυτές και το Groovy διακόπτης Η δήλωση τους καθιστά λιγότερο κουραστικούς.

Είναι απολύτως δυνατό με το Groovy διακόπτης να έχετε πολλές επιλογές διακόπτη που ταιριάζουν με τις καθορισμένες συνθήκες. Επομένως, είναι σημαντικό να απαριθμήσετε το υπόθεση δηλώσεις κατά σειρά του αγώνα που προτιμάται επειδή το πρώτο παιχνίδι θα είναι εκείνο που θα εκτελεστεί. ο Διακοπή Η λέξη-κλειδί χρησιμοποιείται στο Groovy's διακόπτης όπως είναι στην Java.

Υπάρχει πολύ περισσότερη δύναμη σε αυτό που το Groovy διακόπτης υποστηρίζει. Ορισμένες δημοσιεύσεις που καλύπτουν αυτήν την ισχύ περιλαμβάνουν το Groovy Goodness: The Switch Statement, Groovy, επιτρέψτε μου να μετρήσω τους τρόπους με τους οποίους σ 'αγαπώ και την τεκμηρίωση του Groovy.

Αυτή η ιστορία, "Groovy: Switch on Steroids" δημοσιεύθηκε αρχικά από την JavaWorld.