Kotlin vs Java - ποια είναι η διαφορά μεταξύ των δύο;

Συγγραφέας: John Stephens
Ημερομηνία Δημιουργίας: 24 Ιανουάριος 2021
Ημερομηνία Ενημέρωσης: 1 Ιούλιος 2024
Anonim
Kotlin vs Java - ποια είναι η διαφορά μεταξύ των δύο; - Εφαρμογές
Kotlin vs Java - ποια είναι η διαφορά μεταξύ των δύο; - Εφαρμογές

Περιεχόμενο


Η Java μπορεί να είναι ακόμα η πρώτη γλώσσα προγραμματισμού που έρχεται στο μυαλό όταν σκέφτεστε για το Android, αλλά δεν το κάνετε έχω να χρησιμοποιήσετε την ανάπτυξη Java για Android. Στην πραγματικότητα, η Kotlin είναι τώρα η Googleπρονομιούχοςεπίσημη γλώσσα για το Android!

Για να μάθετε περισσότερα σχετικά με την Java, λάβετε ένα δωρεάν εισαγωγικό μάθημα Java στην εφαρμογή Εφαρμογές Android.

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

Αλλά αν κάνετε τη μετάβαση από την Java στην Kotlin, τι ακριβώς κερδίζετε; Τι χαρακτηριστικά έχει ο Kotlin, ότι η Java δεν το κάνει και το αντίστροφο;


Σε αυτό το άρθρο, θα εξετάσουμε όλες τις σημαντικές διαφορές μεταξύ Kotlin vs Java.

Kotlin εναντίον Java, αργότερα προσφέρει πιο συνοπτικό κώδικα - χωρίς findViewByIds

Αν συγκρίνετε μια κλάση Kotlin και μια τάξη Java που εκτελούν την ίδια εργασία, τότε η τάξη Kotlin θα είναι γενικά πολύ πιο συνοπτική, αλλά υπάρχει μια περιοχή ειδικότερα όπου ο Kotlin μπορεί να μειώσει σοβαρά το ποσό του κώδικα boilerplate που πρέπει να γράψετε: findViewByIds.

Οι επεκτάσεις Android Kotlin σας επιτρέπουν να εισάγετε μια αναφορά σε μια προβολή στο αρχείο δραστηριότητας σας, οπότε θα μπορείτε να εργαστείτε με αυτήν την προβολή σαν να ήταν μέρος της Δραστηριότητας. Το αποτέλεσμα? Ποτέ δεν θα χρειαστεί να ξαναγράψετε άλλη μέθοδο findViewById!

Πριν μπορέσετε να χρησιμοποιήσετε αυτές τις επεκτάσεις, θα χρειαστεί να προσθέσετε επιπλέον plugin στο αρχείο build.gradle σε επίπεδο module (ισχύστε plugin: 'kotlin-android-extensions'), αλλά μετά από αυτό είστε έτοιμοι να αρχίσετε να εισάγετε προβολές, για για παράδειγμα, εάν το αρχείο activity_main.xml περιελάμβανε ένα TextView με το αναγνωριστικό textView, τότε θα προσθέσατε τα ακόλουθα στη Δραστηριότητά σας:


εισαγωγή kotlinx.android.synthetic.main.activity_main.textView

Στη συνέχεια, μπορείτε να έχετε πρόσβαση σε αυτό το TextView χρησιμοποιώντας μόνο το αναγνωριστικό του:

textView.setText ("Hello World")

Αυτό είναι πολύ πιο συνοπτικό από το ισοδύναμο Java:

TextView κείμενο = (TextView) findViewById (R.id.textView); text.setText ("Hello World")?

Ο Kotlin είναι μηδενικός από προεπιλογή

Οι NullPointerExceptions αποτελούν τεράστια πηγή απογοήτευσης για τους προγραμματιστές της Java. Η Java σας επιτρέπει να αντιστοιχίσετε null σε οποιαδήποτε μεταβλητή, αλλά αν προσπαθήσετε να χρησιμοποιήσετε μια αναφορά αντικειμένου που έχει μηδενική τιμή, στη συνέχεια, στηρίξτε τον εαυτό σας για να αντιμετωπίσετε ένα NullPointerException!

Επίσης, διαβάστε: Kotiln για εισαγωγή Android

Στο Kotlin, όλοι οι τύποι είναι μη ακυρώσιμοι (δεν μπορούν να κρατήσουν μια μηδενική τιμή) από προεπιλογή. Εάν προσπαθήσετε να αντιστοιχίσετε ή να επιστρέψετε null στον κώδικα σας Kotlin, τότε θα αποτύχει στο compile-time, έτσι ώστε να μην συγκεντρωθούν οι ακόλουθες γραμμές:

όνομα όνομα: String = null

διασκέδαση getName (): String = null

Αν εσύ Πραγματικά θέλετε να ορίσετε μια μηδενική τιμή σε μια μεταβλητή στο Kotlin, τότε θα πρέπει να σημειώσετε ρητά τη μεταβλητή αυτή ως μηδενική, προσθέτοντας ένα ερωτηματικό μετά τον τύπο:

Αριθμός κύματος: Int; = null

Αυτό καθιστά σχεδόν αδύνατο να συναντήσετε NullPointerExceptions στο Kotlin - στην πραγματικότητα, εάν συναντήσετε αυτήν την εξαίρεση, πιθανότατα είναι επειδή ζητήσατε ρητά από τη Kotlin να ρίξει ένα ή το NullPointerException προέρχεται από εξωτερικό κώδικα Java.

Λειτουργίες επέκτασης

Το Kotlin δίνει στους προγραμματιστές τη δυνατότητα να επεκτείνουν μια τάξη με νέα λειτουργικότητα, η οποία είναι ιδανική αν υπάρχει μια τάξη που πάντα ένιωθε ότι έλειπε μια σημαντική μέθοδος!

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

Διαβάστε παρακάτω: Java tutorial για αρχάριους

Δημιουργείτε μια συνάρτηση επέκτασης προθέτοντας το όνομα της κλάσης που θέλετε να επεκτείνετε (όπως 'String') στο όνομα της συνάρτησης που δημιουργείτε ('styleString') για παράδειγμα:

fun String.styleString (): String {// Στυλ της συμβολοσειράς και στη συνέχεια να την επιστρέψετε //}

Στη συνέχεια, μπορείτε να καλέσετε αυτή τη λειτουργία σε εμφανίσεις της διευρυμένης κλάσης μέσω του. σημείωμα, σαν να ήταν μέρος αυτής της κατηγορίας:

myString.styleString ()

Οι κορουτίνες είναι πολίτες πρώτης κατηγορίας

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

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

Παρόλο που μπορείτε να δημιουργήσετε πρόσθετα θέματα στο Kotlin, μπορείτε επίσης να χρησιμοποιήσετε κορουστίνες. Οι Coroutines εκτελούν μακρόχρονες και εντατικές εργασίες αναστέλλοντας την εκτέλεση σε ένα συγκεκριμένο σημείο χωρίς να εμποδίζουν το νήμα και στη συνέχεια να ξαναρχίζουν αυτή τη λειτουργία σε ένα μεταγενέστερο σημείο, ενδεχομένως σε ένα άλλο νήμα. Αυτό σας επιτρέπει να δημιουργήσετε ασύγχρονο κωδικό μη αποκλεισμού φαίνεται σύγχρονη και συνεπώς πιο σαφής, συνοπτική και αναγνώσιμη από τον άνθρωπο. Οι κορουτίνες είναι επίσης stackless, έτσι έχουν χαμηλότερη χρήση μνήμης σε σύγκριση με τα νήματα και ανοίγουν την πόρτα σε πρόσθετες μορφές ασύγχρονου μη αποκλεισμού προγραμματισμού, όπως το async / await.

Δεν υπάρχουν εξακριβωμένες εξαιρέσεις

Ο Kotlin δεν έχει ελέγξει τις εξαιρέσεις, επομένως δεν χρειάζεται να πιάσετε ή να δηλώσετε εξαιρέσεις.

Το αν αυτό είναι κάτι που σας προσελκύει στο Kotlin, ή σας κάνει να θέλετε να κολλήσετε με την Java θα εξαρτηθεί από τη γνώμη σας για ελεγμένες εξαιρέσεις, καθώς αυτό είναι ένα χαρακτηριστικό που χωρίζει την κοινότητα προγραμματιστών. Εάν είστε άρρωστοι από μπλοκ try / catch που γεμίζουν τον κώδικα Java, τότε θα είστε ικανοποιημένοι με αυτή την παράλειψη, ωστόσο αν διαπιστώσετε ότι οι ελεγμένες εξαιρέσεις σας ενθαρρύνουν να σκεφτείτε την ανάκτηση σφαλμάτων και τελικά να σπρώξετε προς την κατεύθυνση της δημιουργίας πιο ισχυρής κώδικα, τότε είναι πιο πιθανό να δείτε αυτό ως περιοχή όπου η Java έχει το πλεονέκτημα έναντι του Kotlin.

Η εγγενής υποστήριξη της αντιπροσωπείας

Ο Kotlin, αντίθετα με την Java, υποστηρίζει το μοτίβο "σύνθεσης πάνω από κληρονομιά", μέσω αντιπροσωπείας πρώτης κατηγορίας (μερικές φορές γνωστού ως σιωπηρή ανάθεση). Η αντιπροσωπεία είναι όπου ένα αντικείμενο λήψης μεταβιβάζει λειτουργίες σε ένα δεύτερο αντικείμενο αντιπροσώπου, το οποίο είναι ένα βοηθητικό αντικείμενο με το αρχικό περιβάλλον.

Η ταξική αντιπροσωπεία του Kotlin είναι μια εναλλακτική λύση στην κληρονομιά που επιτρέπει τη χρήση πολλαπλής κληρονομιάς. Εν τω μεταξύ, οι εξουσιοδοτημένες ιδιότητες του Kotlin συμβάλλουν στην αποφυγή της επανάληψης κώδικα, για παράδειγμα εάν πρέπει να επαναχρησιμοποιήσετε τον ίδιο κώδικα για τους getters και τους ρυθμιστές πολλαπλών ιδιοτήτων, τότε μπορείτε να εξαγάγετε αυτόν τον κώδικα σε ιδιότητα που έχει εκχωρηθεί. Ο πληρεξούσιος ιδιοκτησίας πρέπει να ορίσει τη λειτουργία operator getValue και, προαιρετικά, τον τελεστή setValue:

class Delegate {operator fun getValue (...) ... ... ...} χειριστής διασκέδασης setValue (...) ... ... ...}}

Στη συνέχεια, όταν δημιουργείτε μια ιδιότητα, μπορείτε να δηλώσετε ότι οι λειτουργίες getter και setter για αυτήν τη συγκεκριμένη ιδιότητα αντιμετωπίζονται από μια άλλη κλάση:

class MyClass {var property: String by Delegate ()}

Τάξεις δεδομένων

Δεν είναι ασυνήθιστο για ένα έργο να έχει πολλαπλές κλάσεις που δεν κάνουν τίποτα αλλά κατέχουν δεδομένα. Στην Java, θα βρείτε τον εαυτό σας να γράφει πολλά κώδικα boilerplate για αυτές τις τάξεις, παρόλο που οι ίδιοι οι κλάδοι έχουν ελάχιστη λειτουργικότητα. Συνήθως, θα πρέπει να ορίσετε έναν κατασκευαστή, πεδία για την αποθήκευση των δεδομένων, των επιλογών getter και setter για κάθε πεδίο, συν τις λειτουργίες hashCode (), equals () και toString ().

Στο Kotlin, αν συμπεριλάβετε τη λέξη-κλειδί 'data' στον ορισμό της κλάσης σας, τότε ο μεταγλωττιστής θα εκτελέσει όλες τις εργασίες για εσάς, συμπεριλαμβανομένης της δημιουργίας όλων των απαραίτητων getters και ρυθμιστών:

τάξη δεδομένων Ημερομηνία (μήνας var: Σειρά, ημέρα var: Int)

Έξυπνα χτυπήματα

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

Τα έξυπνα casts του Kotlin μπορούν να χειριστούν αυτά τα περιττά αντικείμενα για εσάς, οπότε δεν χρειάζεται να πετάξετε μέσα σε μια δήλωση, αν το έχετε ήδη ελέγξει με τον τελεστή "είναι" του Kotlin. Για παράδειγμα, ο μεταγλωττιστής γνωρίζει ότι το ακόλουθο cast είναι ασφαλές:

αν (γεια είναι String) {printString (γεια)}

Υποστήριξη κατασκευαστών

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

class constructor της MainActivity (firstName: String) {}

Δεν υπάρχει υποστήριξη για σιωπηρές διευρύνσεις μετατροπών

Ο Kotlin δεν υποστηρίζει σιωπηρές διευρυνόμενες μετατροπές για αριθμούς, έτσι οι μικρότεροι τύποι δεν μετατρέπονται σιωπηρά σε μεγαλύτερους τύπους. Στο Kotlin, εάν θέλετε να ορίσετε μια τιμή Byte τύπου σε μια μεταβλητή Int, τότε θα χρειαστεί να εκτελέσετε μια ρητή μετατροπή, ενώ η Java έχει υποστήριξη για σιωπηρές μετατροπές.

Βιβλιοθήκες επεξεργασίας σχολιασμών με τον Kotlin

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

Εάν θέλετε να χρησιμοποιήσετε μια βιβλιοθήκη Java που βασίζεται στην επεξεργασία σχολιασμού, η προσθήκη της στο έργο Kotlin είναι ελαφρώς διαφορετική, καθώς θα χρειαστεί να καθορίσετε την εξάρτηση χρησιμοποιώντας το kotlin-kapt plugin και, στη συνέχεια, χρησιμοποιήστε το εργαλείο επεξεργασίας σχολιασμού Kotlin (kapt) αντί για τον σχολιασμόProcessor. Για παράδειγμα:

// Εφαρμόστε το plugin // apply plugin: kvanlin-kapt // Προσθέστε τις αντίστοιχες εξαρτήσεις χρησιμοποιώντας την διαμόρφωση kapt // εξαρτήσεις {kapt "com.google.dagger: dagger-compiler: $ dagger-version" ... ... ...}

Ανταλλαξιμότητα με την Java

Όταν συζητάτε αν θα χρησιμοποιήσετε την ανάπτυξη του Kotlin ή της Java για Android, θα πρέπει να γνωρίζετε ότι υπάρχει μια τρίτη επιλογή: χρησιμοποιήστε και τα δύο. Παρά τις διαφορές μεταξύ των δύο γλωσσών, η Java και η Kotlin είναι 100% διαλειτουργικές. Μπορείτε να καλέσετε τον κώδικα Kotlin από την Java και μπορείτε να καλέσετε τον Java κώδικα από το Kotlin, οπότε είναι δυνατό να έχετε τα μαθήματα Kotlin και Java δίπλα-δίπλα στο ίδιο έργο και όλα θα εξακολουθούν να καταρτίζονται.

Αυτή η ευελιξία μετακίνησης μεταξύ των δύο γλωσσών είναι χρήσιμη όταν ξεκινάτε με το Kotlin καθώς σας επιτρέπει να εισάγετε την Kotlin σε ένα υπάρχον έργο σταδιακά, αλλά ίσως προτιμάτε να χρησιμοποιείτε και τις δύο γλώσσες σε μόνιμη βάση. Για παράδειγμα, ενδέχεται να υπάρχουν ορισμένα χαρακτηριστικά που προτιμάτε να γράφετε στο Kotlin και ορισμένα χαρακτηριστικά που μπορείτε να γράψετε ευκολότερα στη Java. Από τη στιγμή που ο Kotlin και η Java μεταγλωττίζονται στο bytecode, οι τελικοί χρήστες δεν θα είναι σε θέση να καταλάβουν πού τελειώνει ο κώδικας Java και αρχίζει ο κώδικας Kotlin, οπότε δεν υπάρχει κανένας λόγος για τον οποίο δεν μπορείτε να απελευθερώσετε μια εφαρμογή που αποτελείται από Java και Κώδικα Kotlin.

Εάν θέλετε να δοκιμάσετε τον Kotlin για τον εαυτό σας, τότε όσο έχετε εγκατεστημένο το Android Studio 3.0 Preview ή υψηλότερο, υπάρχουν μερικοί τρόποι με τους οποίους μπορείτε να ξεκινήσετε:

  • Δημιουργήστε ένα νέο έργο στο Android Studio. Η πιο εύκολη μέθοδος είναι να δημιουργήσετε ένα νέο έργο και να επιλέξετε το πλαίσιο ελέγχου "Συμπεριλάβετε την υποστήριξη Kotlin" από τον οδηγό δημιουργίας έργου.

  • Προσθέστε μια κλάση Kotlin σε έναν υπάρχοντα κατάλογο. Ελέγξτε-κάντε κλικ στον εν λόγω κατάλογο και στη συνέχεια επιλέξτε 'File> New> Kotlin File / Class'. Το Android Studio θα εμφανίσει ένα banner που σας ζητάει να διαμορφώσετε το έργο σας για να υποστηρίξετε το Kotlin. κάντε κλικ στο σύνδεσμο 'Ρύθμιση' και ακολουθήστε τις οδηγίες στην οθόνη.

  • Μετατρέψτε τα υπάρχοντα αρχεία Java στο Kotlin. Μπορείτε να εκτελέσετε οποιοδήποτε αρχείο Java μέσω ενός μετατροπέα Kotlin, κάνοντας κλικ στο αρχείο και επιλέγοντας 'Code> Convert Java File to Kotlin File'.

Τυλίγοντας

Όπως μπορείτε να δείτε, υπάρχουν πολλοί καλοί λόγοι για να προτιμήσετε τον Kotlin στην Java, ωστόσο υπάρχουν δύο περιοχές όπου η Java έχει το πάνω χέρι. Ίσως το πιο σημαντικό: πολλοί προγραμματιστές Android είναι απλά πιο εξοικειωμένοι με την Java σε αυτό το σημείο. Πιθανότατα η συζήτηση Kotlin vs Java δεν θα διευθετηθεί σύντομα, και οι δύο να έχουν τα δικά τους πλεονεκτήματα. Έτσι, πρόκειται να κάνετε τη μετάβαση στο Kotlin, ή νομίζετε ότι η Java εξακολουθεί να είναι η καλύτερη επιλογή για ανάπτυξη Android;

Διαβάστε παρακάτω: Μια εισαγωγή στη σύνταξη Java για ανάπτυξη Android

Η πεπεισμένη ανάπτυξη του Android είναι για σας; Χρειάζεστε ένα πλήρες αναπτυξιακό περιβάλλον για να μπορείτε να πηδήξετε και να ξεκινήσετε. Ας δούμε τα βασικά βήματα που απαιτούνται για την προετοιμα...

Το Google Play tore παίρνει συχνές ενημερώσεις, κάτι που είναι εξαιρετικό. Η όχι τόσο μεγάλη είδηση ​​είναι ότι μπορεί να χρειαστούν εβδομάδες, ή ακόμα και για μερικούς ακόμα ανθρώπους, για να πάρετε...

Σας Συνιστούμε