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

Συμβουλή Java 5: Σταθερές Java

Αυτήν την εβδομάδα δημιουργούμε ορισμένες σταθερές που έχουν όλα τα πλεονεκτήματα της χρήσης των εγκαταστάσεων του προεπεξεργαστή C για τον καθορισμό σταθερών χρόνου μεταγλώττισης και κωδικού μεταγλώττισης υπό όρους.

Η Java έχει απαλλαγεί από ολόκληρη την έννοια ενός προεπεξεργαστή κειμένου (εάν παίρνετε την Java ως «απόγονος» του C / C ++). Μπορούμε, ωστόσο, να αποκομίσουμε τα καλύτερα οφέλη από τουλάχιστον μερικά από τα χαρακτηριστικά του προεπεξεργαστή C στην Java: σταθερές και σύνταξη υπό όρους.

Ένα από τα αναμφισβήτητα καλά χαρακτηριστικά του προεπεξεργαστή C είναι η δυνατότητα καθορισμού σταθερών χρόνου μεταγλώττισης χρησιμοποιώντας ένα όνομα κειμένου για να αντιπροσωπεύει κάποια τιμή. Αυτό διευκολύνει την ανάγνωση και τη συντήρηση. Είναι επίσης ταχύτερο κατά το χρόνο εκτέλεσης από τη χρήση μιας κανονικής μεταβλητής.

Ένα αναμφισβήτητα κακοποιημένο χαρακτηριστικό του προεπεξεργαστή C είναι η χρήση του #καθορίζω μαζί με #ifdef και φίλοι να συντάξει υπό όρους ολόκληρα τμήματα κώδικα. Λέω ότι είναι αμφισβητήσιμο δεδομένου ότι οι άνθρωποι χρησιμοποιούν συχνά αυτήν την εγκατάσταση για να αντιμετωπίσουν ζητήματα ειδικά για την πλατφόρμα (και αυτό είναι και το καλό σημείο και το κακό σημείο).

Στο C, θα μπορούσε κανείς να ορίσει ορισμένες σταθερές σε ένα αρχείο κεφαλίδας μέσω:

# καθορισμός MY_BDATE 10 #define SILLY_PLATFORM 

και στη συνέχεια να αποκτήσετε πρόσβαση σε αυτές τις σταθερές χρησιμοποιώντας #περιλαμβάνω για να τα συμπεριλάβετε σε ένα αρχείο κώδικα και στη συνέχεια να τα χρησιμοποιήσετε:

fprintf (stderr, "Τα γενέθλιά μου είναι στο% d" "th! \ n", MY_BDATE); 

Το ισοδύναμο στην Java μπορεί να γίνει δημιουργώντας δημόσιος στατικός τελικός μεταβλητές σε Java διεπαφή:

διεπαφή ConstantStuff {public static final int MY_BDATE = 10; δημόσιο στατικό τελικό boolean SillyPlatform = true; } 

Τότε μπορούμε να τους προσπελάσουμε χρησιμοποιώντας εισαγωγή για να κάνουμε τη διεπαφή ορατή σε εμάς και στη συνέχεια χρησιμοποιώντας τις σταθερές:

System.out.println ("Τα γενέθλιά μου είναι το" + ConstantStuff.MY_BDATE + "th!"); 

Ο προεπεξεργαστής C μπορεί να αφαιρέσει υπό όρους μεγάλες περιοχές κειμένου εάν μια δεδομένη σταθερά προεπεξεργαστή ήταν ή δεν είχε καθοριστεί.

#if ορίστηκε (SILLY_PLATFORM) / * Πολύ άσχημος κώδικας για την αντιμετώπιση των ηλίθων της πλατφόρμας * SILLY. * / #else / * Κωδικός για την αντιμετώπιση άλλων κανονικών πλατφορμών. */ #τέλος εαν 

Πολλοί άνθρωποι θρηνούν ότι αυτή η ικανότητα απουσιάζει από την Java. Θυμηθείτε, ένας από τους λόγους για τους οποίους η Java είναι τόσο υπέροχη είναι ότι η γλώσσα είναι πολύ καλύτερα καθορισμένη, οπότε πρέπει να ισχύει ένας κωδικός συγκεκριμένος για το σύστημα δεν ακόμη και να είναι απαραίτητο.

Ωστόσο, μπορείτε ακόμα να λάβετε αυτόν τον τύπο κωδικού που έχει καταρτιστεί υπό όρους απευθείας από τον μεταγλωττιστή! Απλά χρησιμοποιείτε δημόσιο στατικό τελικό boolean σταθερές ως προϋπόθεση για μια κανονική αν δήλωση. Ο μεταγλωττιστής Java είναι αρκετά έξυπνος για να το αναγνωρίσει ως ειδική περίπτωση και μπορεί να εξαλείψει εντελώς τη δοκιμή και τον κωδικό του κατάλληλου υποκαταστήματος υπό όρους.

Απλώς γράψτε τη δήλωση υπό όρους ως συνήθως.

 if (ConstantStuff.SillyPlatform) {// Κωδικός που θα χρησιμοποιηθεί εάν η πλατφόρμα είναι αληθής * κατά τη στιγμή της μεταγλώττισης *. } αλλιώς {// Κωδικός που πρέπει να χρησιμοποιείται εάν η πλατφόρμα είναι λανθασμένη * κατά τη μεταγλώττιση } 

Δεν ξέρω για σένα, αλλά μισώ να έχω να γράψω τόσο μακρόχρονη διεπαφή όνομα πριν χρησιμοποιήσετε οποιαδήποτε από αυτές τις σταθερές. Έτσι, έχω μόνο την τάξη μου που θα χρησιμοποιήσει αυτές τις σταθερές υλοποιώ, εφαρμόζω ο διεπαφή. Τότε μπορώ απλώς να χρησιμοποιήσω το όνομα απευθείας, υποθέτοντας ότι δεν υπάρχουν συγκρούσεις ονόματος (στην περίπτωση αυτή θα πρέπει να τα διακρίνετε χρησιμοποιώντας τα πλήρη ονόματα).

Έχω βάλει όλα αυτά τα διασκεδαστικά πράγματα σε μερικές απλές εφαρμογές Java. Σταθερές (//www.javaworld.com/javatips/javatip5/Constants.java) υλοποιεί ο διεπαφή και χρησιμοποιεί απευθείας τις σταθερές, ενώ το Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) χρησιμοποιεί πλήρως αναγνωρισμένα ονόματα για πρόσβαση στις σταθερές.

Ο John D. Mitchell είναι ακόμα ένας απόφοιτος του UC-Berkeley Computer Science που απογαλακτίστηκε από καφεΐνη, ζάχαρη και πολύ λίγο ύπνο. Πέρασε τρία χρόνια εργαζόμενος σε λογισμικό PDA στο Geoworks για απόθεμα που αξίζει περισσότερο από την ταπετσαρία. Έσωσε τη δουλειά του μετά την πρώτη δημόσια κυκλοφορία της Java για την ανάπτυξη μικροεφαρμογών και ενός μεταγλωττιστή Java. Χρηματοδοτεί τον εθισμό του Java γράφοντας μεταγλωττιστές, Tcl / Tk, Perl, C ++ και Java. Ο άφθονος ελεύθερος χρόνος του καταναλώνεται συντονίζοντας την ομάδα συζητήσεων comp.lang.tcl.announce και γράφοντας ένα φοβερό βιβλίο Java.

Αυτή η ιστορία, "Java Tip 5: Java constants" δημοσιεύθηκε αρχικά από το JavaWorld.