Μπορείτε τελικά να δηλώσετε τις τοπικές μεταβλητές τύπου inferred στην Java με var - για αυτό είναι καταπληκτικό

Γεια σε όλους! Σε αυτό το άρθρο, θα συζητήσω νέες δυνατότητες της Java 10. Συγκεκριμένα, θα μιλήσω για το πιο δημοφιλές και πιο χρήσιμο: την εισαγωγή της λέξης-κλειδιού var στην Java. Λοιπόν, δεν είναι πραγματικά μια λέξη-κλειδί - αλλά θα σας πω αργότερα.

Επιτέλους…

Τέλος, η Java έχει πάρει τη λέξη-κλειδί var για να δηλώσει τοπικές μεταβλητές. Αυτό σας επιτρέπει να δηλώσετε μια μεταβλητή χωρίς τον τύπο της. Για παράδειγμα, αντί να το κάνετε αυτό:

String str = “Java”

μπορείτε τώρα να το πείτε:

var str = “Java”.

Αυτό μπορεί να μην ακούγεται πολύ όταν κερδίζετε μια συμβολοσειρά ή μια μεταβλητή int, αλλά σκεφτείτε για περίπλοκους τύπους με γενικά, για παράδειγμα. Αυτό σίγουρα θα εξοικονομήσει πολλή πληκτρολόγηση και θα βελτιώσει επίσης την αναγνωσιμότητα του κώδικα.

Ένα μικρό υπόβαθρο

Οι προγραμματιστές Java διαμαρτύρονται εδώ και πολύ καιρό για τον κωδικό boilerplate και τις τελετές που εμπλέκονται κατά τη σύνταξη κώδικα. Πολλά πράγματα που χρειάζονται μόλις 5 λεπτά σε γλώσσες όπως Python, Groovy ή JavaScript μπορεί να διαρκέσουν περισσότερο από 30 λεπτά στην Java λόγω της ευλογικότητάς τους.

Αν έχετε κωδικοποιήσει σε Scala, Kotlin, Go, C # ή οποιαδήποτε άλλη γλώσσα JVM, τότε γνωρίζετε ότι όλοι έχουν κάποιο είδος τοπικής μεταβλητού τύπου συμπερίληψης ήδη ενσωματωμένο στη γλώσσα.

Για παράδειγμα, το JavaScript έχει αφήσει και το var , το Scala και το Kotlin έχουν το var και το val , το C ++ έχει το αυτόματο , το C # έχει το var και το Go το υποστηρίζει με δήλωση με τον χειριστή : = .

Μέχρι την Java 10, η Java ήταν η μόνη γλώσσα που δεν είχε συμπεράσματα τοπικής μεταβλητής ή υποστήριξη για τη λέξη-κλειδί var.

Αν και το συμπέρασμα τύπου βελτιώθηκε πολύ στο Java 8 με την εισαγωγή της έκφρασης λάμδα, των αναφορών μεθόδου και των ροών, οι τοπικές μεταβλητές έπρεπε ακόμη να δηλωθούν με τον κατάλληλο τύπο. Αλλά τώρα έχει φύγει! Το Java 10 έχει ένα χαρακτηριστικό, JEP 286: Local-Variable Type Inference , το οποίο θα επιτρέπει τη δήλωση τοπικών μεταβλητών χωρίς πληροφορίες τύπου και χρησιμοποιώντας μόνο τη λέξη-κλειδί var.

Ας ρίξουμε μια πιο προσεκτική ματιά.

Παραδείγματα λέξεων-κλειδιών Java 10 var

Ακολουθούν ορισμένα παραδείγματα της λέξης-κλειδιού Java 10's var:

var str = "Java 10"; // infers String 
var list = new ArrayList(); // infers ArrayList
var stream = list.stream(); // infers Stream

Όπως είπα, σε αυτό το σημείο μπορεί να μην εκτιμάτε πλήρως τι κάνει ο var για εσάς. Αλλά δείτε το επόμενο παράδειγμα:

var list = List.of(1, 2.0, "3")

Εδώ, η λίστα θα συναχθεί στη Λίστα t; .. >> που είναι τύπος διασταύρωσης, αλλά δεν θα χρειαστεί να πληκτρολογήσετε τις πληροφορίες πλήρους τύπου. Το var κάνει τον κώδικα πολύ πιο εύκολο να γράψει και να διαβάσει σε αυτήν την περίπτωση.

Στην επόμενη ενότητα, θα δούμε μερικά ακόμη παραδείγματα που θα σας βοηθήσουν να μάθετε πώς να γράφετε συνοπτικό κώδικα χρησιμοποιώντας το var στο Java 10.

Σύνταξη συνοπτικού κώδικα χρησιμοποιώντας τη λέξη-κλειδί var στην Java

Η χρήση της λέξης αποθεματικού var κάνει επίσης τον κωδικό σας συνοπτικό μειώνοντας την επανάληψη - για παράδειγμα, το όνομα της κλάσης που εμφανίζεται τόσο στη δεξιά όσο και στην αριστερή πλευρά των εργασιών, όπως φαίνεται στο ακόλουθο παράδειγμα:

ByteArrayOutputStream bos = new ByteArrayOutputStream();

Εδώ το ByteArrayOutputStream επαναλαμβάνεται δύο φορές και μπορούμε να το εξαλείψουμε χρησιμοποιώντας τη δυνατότητα var του Java 10 όπως φαίνεται παρακάτω:

var bos = new ByteArrayOutputStream();

Μπορούμε να κάνουμε παρόμοια πράγματα κατά τη χρήση δηλώσεων δοκιμής με πόρους στην Java, για παράδειγμα αυτό

try (Stream data = dbconn.executeQuery(sql)) { return data.map(...) .filter(...) .findAny(); }

μπορεί να γραφτεί ως εξής:

try (var books = dbconn.executeQuery(query)) { return books.map(...) .filter(...) .findAny(); }

Αυτά είναι μερικά μόνο παραδείγματα. Υπάρχουν πολλά μέρη όπου μπορείτε να χρησιμοποιήσετε το var για να κάνετε τον κώδικα πιο περιεκτικό και ευανάγνωστο, πολλά από τα οποία μπορείτε να δείτε στο μάθημα του Sander's Pluarlsight Τι νέο υπάρχει στην Java 10 .

Είναι μια σειρά μαθημάτων επί πληρωμή, αλλά μπορείτε να δείτε αυτήν τη δωρεάν δοκιμαστική περίοδο 10 ημερών.

Για εκείνους τους προγραμματιστές που έχουν χρησιμοποιήσει το Groovy ή το Scala, η εισαγωγή του var κάνει να φαίνεται ότι η Java ακολουθεί τον τρόπο Scala… αλλά μόνο ο χρόνος θα το πει.

Προς το παρόν, μπορούμε απλώς να είμαστε ευτυχείς που το var διευκολύνει τη δήλωση μιας σύνθετης τοπικής μεταβλητής στο Java 10.

Και σημειώστε: το συμπέρασμα τοπικής μεταβλητής τύπου της λέξης-κλειδιού Java 10 var μπορεί να χρησιμοποιηθεί μόνο για να δηλώσει τοπικές μεταβλητές (για παράδειγμα, οποιαδήποτε μεταβλητή μέσα στο σώμα της μεθόδου ή στο μπλοκ κώδικα).

Μπορείτε να χρησιμοποιήσετε το var για να δηλώσετε μεταβλητές μέλους στην Java;

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

Για παράδειγμα, αυτό το παράδειγμα του var είναι εντάξει:

public void aMethod(){ var name = "Java 10"; } 

Όμως, το ακόλουθο παράδειγμα ΔΕΝ ΕΙΝΑΙ ΟΚ:

class aClass{ var list; // compile time error }

Έτσι, παρόλο που αυτό το νέο χαρακτηριστικό Java 10 είναι εντυπωσιακό και φαίνεται καλό, έχει ακόμη πολύ δρόμο να διανύσει. Ωστόσο, μπορείτε να αρχίσετε να το χρησιμοποιείτε για να απλοποιήσετε περαιτέρω τον κωδικό σας. Λιγότερος κωδικός πλακέτας σημαίνει πάντα καλύτερο και πιο ευανάγνωστο κώδικα.

Σημαντικά σημεία σχετικά με αυτήν τη νέα λέξη-κλειδί var

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

1. Αυτό το χαρακτηριστικό έχει δημιουργηθεί σύμφωνα με το JEP 286: Local-Variable Type Inference και δημιουργήθηκε από κανέναν άλλο από τον Brian Goetz Είναι ο συγγραφέας του Java Concurrency in Practice, ένα από τα πιο δημοφιλή βιβλία για προγραμματιστές Java.

2. Η var λέξη-κλειδί επιτρέπει την τοπική μεταβλητή τύπου συμπεράσματος, που σημαίνει ότι ο τύπος για την τοπική μεταβλητή θα συναχθεί από τον μεταγλωττιστή. Τώρα δεν χρειάζεται να το δηλώσετε.

3. Το συμπέρασμα τοπικής μεταβλητής τύπου ή η λέξη-κλειδί Java 10 var μπορεί να χρησιμοποιηθεί μόνο για να δηλώσει τοπικές μεταβλητές , για παράδειγμα εντός μεθόδων, σε μπλοκ κώδικα αρχικοποιητών, ευρετήρια στο βελτιωμένο για βρόχο, εκφράσεις λάμδα και τοπικές μεταβλητές που δηλώνονται σε παραδοσιακό για βρόχο .

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

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

5. Η λέξη-κλειδί var είναι παρόμοια με την αυτόματη λέξη-κλειδί του C ++, var του C #, JavaScript, Scala, Kotlin, def of Groovy και Python (σε κάποιο βαθμό) και τον: = χειριστή της γλώσσας προγραμματισμού Go.

6. Ένα σημαντικό πράγμα που πρέπει να γνωρίζετε είναι ότι, παρόλο που το var μοιάζει με λέξη-κλειδί, δεν είναι πραγματικά λέξη-κλειδί. Αντ 'αυτού, είναι ένα δεσμευμένο όνομα τύπου. Αυτό σημαίνει ότι ο κώδικας που χρησιμοποιεί το var ως μεταβλητή, μέθοδο ή όνομα πακέτου δεν θα επηρεαστεί.

7. Ένα άλλο πράγμα που πρέπει να σημειωθεί είναι ότι ο κώδικας που χρησιμοποιεί το var ως όνομα κλάσης ή διεπαφής θα επηρεαστεί από αυτήν την αλλαγή Java 10. Αλλά όπως λέει η JEP, αυτά τα ονόματα είναι σπάνια στην πράξη, καθώς παραβιάζουν τις συνήθεις συμβάσεις ονοματολογίας.

8. Το αμετάβλητο ισοδύναμο των τοπικών μεταβλητών ή των τελικών μεταβλητών val and let δεν υποστηρίζεται ακόμη στο Java 10.

Τυλίγοντας

Αυτό είναι όλο για το var στο Java 10! Είναι μια ενδιαφέρουσα δυνατότητα Java 10, η οποία σας επιτρέπει να δηλώνετε τοπικές μεταβλητές χωρίς να δηλώνετε τον τύπο τους. Αυτό θα βοηθήσει επίσης τους προγραμματιστές Java να μαζέψουν άλλες γλώσσες γρήγορα, όπως Python, Scala ή Kotlin, επειδή χρησιμοποιούν έντονα το var για να δηλώσουν μεταβλητές μεταβλητές και val για να δηλώσουν αμετάβλητες τοπικές μεταβλητές.

Παρόλο που το JEP 286: Τοπική-μεταβλητή συμπερίληψη τύπου υποστηρίζει μόνο var και όχι val , είναι ακόμα χρήσιμο και μοιάζει περισσότερο με την κωδικοποίηση Scala στην Java.

Περαιτέρω μάθηση

Τι νέο υπάρχει στην Java 10 από τον Sander Mak

Οδηγίες στυλ για την τοπική μεταβλητή τύπου inference στην Java

JEP 286: Τοπική-μεταβλητή συμπερίληψη τύπου

10 πράγματα που πρέπει να μάθει ο προγραμματιστής Java το 2018

Το πλήρες Java MasterClass για να μάθετε Java Better

Ευχαριστούμε που διαβάσατε αυτό το άρθρο. Εάν σας αρέσει αυτή η νέα δυνατότητα Java 10, μοιραστείτε με τους φίλους και τους συναδέλφους σας.

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

Αρχικά δημοσιεύθηκε στο javarevisited.blogspot.com στις 27 Μαρτίου 2018.