Swift εναντίον Objective-C: Το trending up-and-comer εναντίον του δεινοσαύρου

Μια σύντομη ιστορία του Swift

Θυμάμαι πόσο σημαντικό ήταν όταν παρουσιάστηκε το Swift στο 2014 WWDC της Apple (Worldwide Developers Conference). Ήταν η συζήτηση της πόλης και όλοι οι προγραμματιστές με τους οποίους συνεργάστηκα δεν περίμενα να το δοκιμάσουν. Η κοινότητα του iOS ήταν έντονη και υπήρχε πολύ ενθουσιασμός γύρω από τη νέα γλώσσα.

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

Ήταν ένα τεράστιο χτύπημα και είδε τον αναπτυσσόμενο πύραυλο του ουρανού τα χρόνια μετά την εισαγωγή. Ήταν η πιο αγαπημένη γλώσσα προγραμματισμού το 2015, η δεύτερη πιο αγαπημένη το 2016, η 11η πιο δημοφιλής γλώσσα προγραμματισμού το 2017, νικώντας το Objective-C και κέρδισε επίσης το Objective-C το 2018.

Το Swift είναι επίσης ένα στοίχημα από την Apple για τη νίκη σε αρχάριους για να γίνουν προγραμματιστές iOS. Η ελπίδα είναι ότι οι νέοι προγραμματιστές θα μάθουν τη γλώσσα και θα τη χρησιμοποιήσουν για τη δημιουργία εφαρμογών iOS. Αυτό αυξάνει στη συνέχεια το οικοσύστημα του App Store. Δεδομένου ότι το Swift έχει βελτιστοποιηθεί για να λειτουργεί με εφαρμογές iOS, αυτό διασφαλίζει ότι οι εφαρμογές που γράφονται είναι υψηλής ποιότητας.

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

Μια σύντομη ιστορία του Στόχου-Γ

Το Objective-C είναι μια αντικειμενοστρεφής γλώσσα προγραμματισμού που είναι ένα υπερσύνολο του C, όπως μπορεί να αποκαλύψει το όνομα της γλώσσας. Αυτό σημαίνει ότι οποιοδήποτε έγκυρο πρόγραμμα C θα μεταγλωττιστεί με έναν μεταγλωττιστή Objective-C. Προέρχεται από τη μη αντικειμενοστραφή σύνταξή της από το C και η αντικειμενοστραφή σύνταξή της από το SmallTalk. Αναπτύχθηκε το 1984, οπότε είχε χρόνο να ωριμάσει ως γλώσσα και είναι πολύ πιο σταθερό από το Swift.

Οι περισσότεροι άνθρωποι γνωρίζουν το Objective-C ως τη γλώσσα που χρησιμοποιείται για την ανάπτυξη εφαρμογών για το iPhone, αλλά η ιστορία πηγαίνει πολύ βαθύτερα από αυτό. Θα συνιστούσα να διαβάσετε αυτό το άρθρο για μια πιο εμπεριστατωμένη εμφάνιση.

Τα δυνατά σημεία του Swift

Το Swift έχει αυξηθεί εξαιρετικά στη δημοτικότητα για μερικούς βασικούς λόγους. Πρώτα απ 'όλα, υπάρχουν πολλά υπέροχα εργαλεία ανάπτυξης που η Apple έχει παράσχει για να συνεργαστεί με το Swift. Ένα από τα προσωπικά μου αγαπημένα είναι η παιδική χαρά, η οποία είναι συμβατή μόνο με το Swift. Η Apple παρουσίασε το Playgrounds το 2016. Παρουσιάστηκαν ως ένας τρόπος να μάθουν πώς να κωδικοποιούν, αλλά μου άρεσε για διαφορετικό λόγο.

Η ανάπτυξη για κινητά είχε πάντα περισσότερα οδοφράγματα από την ανάπτυξη ιστού. Χρειάζεστε έναν προσομοιωτή, συνήθως χρειάζεστε ένα ιδιόκτητο ολοκληρωμένο περιβάλλον ανάπτυξης (IDE) και πρέπει να δημιουργήσετε ένα ολόκληρο έργο μόνο για να δοκιμάσετε κάποιο μικρό πρωτότυπο. Στην περίπτωση της Apple, χρειάζεστε επίσης έναν λογαριασμό προγραμματιστή. Το ωραίο πράγμα για τις παιδικές χαρές είναι να ξεπεράσετε μερικά από αυτά. Χρειάζεστε Xcode ή την εφαρμογή Playgrounds, αλλά αυτό είναι όλο. Και μπορείτε να ξεκινήσετε με την κωδικοποίηση και τη σύνταξη του κώδικα αμέσως.

Ωστόσο, ένα άλλο τεράστιο πλεονέκτημα του Swift είναι το γεγονός ότι είναι ανοιχτού κώδικα. Εάν αναρωτηθήκατε ποτέ πώς λειτουργούσε μια γλώσσα προγραμματισμού κάτω από την κουκούλα, τότε μπορείτε να δείτε μόνοι σας! Αυτός είναι ένας πολύ καλός τρόπος για να κατανοήσετε τη γλώσσα προγραμματισμού με την οποία εργάζεστε καθημερινά σε βαθύτερο επίπεδο.

Μια αξιότιμη αναφορά αναφέρεται σε ένα ωραίο βοηθητικό πρόγραμμα που διατίθεται μόνο στο Swift, το Swift Package Manager. Το Swift Package Manager είναι απλά ένας διαχειριστής εξάρτησης που είναι ενσωματωμένος στο Swift build system. Δεν είναι καθόλου αλλαγή του παιχνιδιού, δεδομένου ότι η CocoaPods και η Carthage έκαναν αυτή τη δουλειά πριν από πολύ καιρό, αλλά είναι μια άλλη διαθέσιμη λύση εάν χρειαστεί.

Πολλά στοιχεία εδώ υποστηρίζουν το γεγονός ότι η Apple κάνει πολλά για να κάνει το Swift πιο επιθυμητό ως τη γλώσσα προγραμματισμού της επιλογής για προγραμματιστές iOS. Δημιουργούν ωραία βοηθητικά προγράμματα και βοηθητικά προγράμματα για να προσελκύσουν τους ανθρώπους να αρχίσουν να χρησιμοποιούν τη γλώσσα. Αυτό δείχνει ότι η Apple πιέζει για Swift σε πλήρη ισχύ.

Γλωσσικά χαρακτηριστικά

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

Ένα άλλο μεγάλο χαρακτηριστικό του Swift είναι η σύνταξη του. Ειδικά σε σύγκριση με το Objective-C. Η καλύτερη λέξη για την περιγραφή της σύνταξης θα ήταν «σύντομη». Δεν υπάρχει ανάγκη για ερωτηματικά, κλήσεις προς τον εαυτό σας ή παρενθέσεις γύρω από τις δηλώσεις. Φαίνεται ότι παραλείπετε πολλά πράγματα που πραγματικά δεν χρειάζεστε. Μπορεί να κάνει τη διαδικασία πληκτρολόγησης πολλού κώδικα «flow» καλύτερη.

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

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

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

Οι αδυναμίες

Το Swift είναι μια νέα γλώσσα και με αυτό έρχεται κάποια αλλαγή. Οι μετακινήσεις μεταξύ των εκδόσεων είναι απλά ένας πόνος. Σε μια μικρή εταιρεία, το εργαλείο μετεγκατάστασης που παρέχεται από την Apple μπορεί να είναι χρήσιμο και να καλύπτει τις περισσότερες περιπτώσεις. Γίνεται λιγότερο χρήσιμο όσο περισσότερο κώδικα έχετε. Είναι ακόμη χειρότερο εάν η βάση κώδικα περιέχει κώδικα Objective-C και Swift που λειτουργούν.

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

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

Ένα άλλο ζήτημα είναι ότι το Swift δεν παίζει καλά με το Xcode. Το Xcode αισθάνεται πολύ ασταθές όταν εργάζεστε με το Swift και η αυτόματη συμπλήρωση απλά δεν λειτουργεί μερικές φορές. Αυτό είναι παράξενο δεδομένου του πόσο σκληρά η Apple πιέζει το Swift. Θα νομίζατε ότι θα ήθελαν να κάνουν την εμπειρία της χρήσης του Swift με Xcode μια απόλαυση.

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

Τα πλεονεκτήματα του Στόχου-Γ

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

Σε πρακτικούς σκοπούς, τι σημαίνει αυτό; Λοιπόν, ένα μεγάλο πλεονέκτημα είναι η προσαρμοστικότητα στο χρόνο εκτέλεσης. Αυτό σημαίνει ότι είναι δυνατή η πρόσβαση σε ιδιωτικά API ή η πραγματοποίηση πραγμάτων όπως τα κοροϊδεύοντας αντικείμενα κατά την εκτέλεση. Αυτό μπορεί να είναι ιδιαίτερα χρήσιμο όταν πρόκειται για δοκιμή μονάδας. Βιβλιοθήκες όπως το OCMock το κάνουν ακόμα πιο εύκολο και επιτρέπουν πολύ περίπλοκες ρυθμίσεις δοκιμών. Η καλή δοκιμή μονάδας θα κάνει την εφαρμογή σας πιο σταθερή και αξιόπιστη.

Μιλώντας για τη σταθερότητα, το Objective-C υπάρχει εδώ και πολύ καιρό και το καθιστά μια πολύ σταθερή γλώσσα. Με το Swift, θα συναντήσετε σφάλματα που είναι αρκετά εκπληκτικά και θα ήταν ενοχλητικά για τη σταθερότητα της εφαρμογής σας. Στο παράδειγμα που έχω συνδέσει παραπάνω, αυτό το σφάλμα θα προκληθεί από την πραγματική γλώσσα που χρησιμοποιείτε για να κωδικοποιήσετε την εφαρμογή σας, όχι λόγω τυχόν σφάλματος που δημιουργήθηκε από τον κώδικα που γράψατε. Αυτό μπορεί να είναι απογοητευτικό.

Το τελευταίο σημείο, το οποίο είναι πιο σημαντικό για ορισμένες εταιρείες, είναι η συμβατότητα με τις βιβλιοθήκες C και C ++. Καθώς το Objective-C είναι ένα υπερσύνολο του C, είναι εύκολο στη χρήση κώδικα C και C ++ με το Objective-C. Μπορείτε ακόμη και να χρησιμοποιήσετε το Objective-C ++ εάν αισθάνεστε τόσο διατεθειμένοι. Αυτό είναι σημαντικό εάν εξαρτάστε από βιβλιοθήκες C και C ++ τρίτων.

Οι αδυναμίες

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

Ένα πράγμα που συμφωνώ όμως είναι ότι η σύνταξη μπλοκ είναι απογοητευτική. Υπάρχει ακόμη και ένας ιστότοπος αφιερωμένος στην αποκωδικοποίηση των μυστηρίων των μπλοκ στο Objective-C. Χρησιμοποιώ πραγματικά αυτόν τον ιστότοπο πολύ συχνά ως αναφορά.

Το μεγαλύτερο ζήτημα που αντιμετωπίζει το Objective-C αυτήν τη στιγμή είναι το γεγονός ότι μια μέρα η Apple ενδέχεται να εγκαταλείψει την υποστήριξη για το Objective-C με το κακάο και άλλες κοινές βιβλιοθήκες που χρησιμοποιούνται για τη δημιουργία εφαρμογών iOS. Δεδομένου ότι το Objective-C χρησιμοποιείται κυρίως για τη δημιουργία εφαρμογών iOS, αυτό θα ήταν ένας θάνατος για τη γλώσσα. Σημαίνει επίσης ότι οι νεοεισερχόμενοι στην κοινότητα iOS φοβούνται να δεσμευτούν να μάθουν το Objective-C αυτήν τη στιγμή, καθώς ενδέχεται να μην μπορούν πλέον να χρησιμοποιηθούν στο μέλλον.

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

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

Πρέπει να μάθω Swift ή Objective-C;

Η απάντηση για τους περισσότερους ανθρώπους θα είναι Swift. Η Apple προωθεί σαφώς το Swift ως τη γλώσσα επιλογής για την κοινότητα ανάπτυξης εφαρμογών iOS. Το Swift θα συνεχίσει να γίνεται πιο αποδοτικό μόνο όταν εισάγεται η σταθερότητα ABI και το Swift συσκευάζεται με το ίδιο το λειτουργικό σύστημα.

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

Ακόμη και σε μεγαλύτερες εταιρείες όπου το Objective-C χρησιμοποιείται ακόμη σε μεγάλο βαθμό, οι συνεντεύξεις μπορούν ακόμη να γίνουν στο Swift. Έτσι, μπορείτε να μάθετε το Objective-C μόλις εγγραφείτε στην εταιρεία και να μην ανησυχείτε για να επιβαρύνετε τον εαυτό σας με περισσότερα πράγματα που πρέπει να μάθετε πριν από τη συνέντευξη.

Θα θελήσετε να μάθετε το Objective-C εάν εργάζεστε ήδη σε εταιρεία εκκίνησης ή μεσαίου επιπέδου και θέλετε να μεταβείτε σε μια μεγαλύτερη εταιρεία. Οι δεξιότητες με το Objective-C θα σας δώσουν εξειδικευμένες γνώσεις και πλεονέκτημα σε σχέση με άλλους υποψηφίους συνέντευξης.

Σας άρεσε αυτό που διαβάσατε; Ρίξτε μια ματιά σε μερικά από τα άλλα άρθρα μου:

Συμβουλές για την πρώτη σας τεχνική συνέντευξη.

Ξεκινώντας μια τεχνολογική καριέρα από το τίποτα.

Πρέπει να αποκτήσετε πτυχίο επιστήμης υπολογιστών;