Μονάδα 2 / 11

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

Κέρδη:

  • Λήψη εύκολου στη συντήρηση και ελεγχόμενου κώδικα επιβάλλοντας μια αρχιτεκτονική όπως το MVVM και ζητώντας επίπεδο προς στρώμα σε μικρά κομμάτια πριν από την τεχνητή νοημοσύνη να δημιουργήσει κώδικα.
  • Δυνατότητα αναγνώρισης παγίδων συγκεκριμένης γλώσσας, όπως η μηδενική ασφάλεια και η κορουτίνα στο Kotlin, οι προαιρετικοί βρόχοι και οι βρόχοι μνήμης στο Swift και ο έλεγχος του παραγόμενου κώδικα σε σχέση με αυτά.
  • Δυνατότητα επαλήθευσης αδειών και διαμόρφωσης χωριστά για κάθε πλατφόρμα σε έργα cross-platform (Flutter, React Native)

Η καρδιά της ανάπτυξης κινητών είναι ο κώδικας και εκεί εμφανίζονται τα πιο απτά κέρδη από την τεχνητή νοημοσύνη. Αλλά η πρόταση "Αφήστε το AI να γράψει κώδικα για μένα" δεν είναι μια στρατηγική από μόνη της. Καλή παραγωγή κώδικα. Απαιτεί τον συνδυασμό της σωστής γλώσσας, της σωστής αρχιτεκτονικής, των σωστών ορίων και της σωστής επικύρωσης. Σε αυτήν την ενότητα, θα μάθουμε πώς να χρησιμοποιούμε την τεχνητή νοημοσύνη αποτελεσματικά και με ασφάλεια για το Swift, τη γλώσσα του iOS, το Kotlin, τη γλώσσα του Android, και τα εργαλεία πολλαπλών πλατφορμών που τρέχουν σε δύο πλατφόρμες με μια ενιαία βάση κώδικα. Ο στόχος είναι να τοποθετήσετε την τεχνητή νοημοσύνη όχι ως "αυτόματο κώδικα" αλλά ως έναν επιταχυντή του οποίου την αρχιτεκτονική καθορίζετε εσείς.

Αρχιτεκτονική πρώτα, κώδικας μετά

Το πιο συνηθισμένο λάθος είναι να ζητάτε από το AI κώδικα απευθείας χωρίς αρχιτεκτονικό σχέδιο. Αυτό είναι σαν να χτίζεις έναν τοίχο χωρίς να βάλεις θεμέλια. Η πιο κοινή αρχιτεκτονική στα κινητά είναι το MVVM (Model-View-ViewModel — ένα μοτίβο σχεδίασης που διαχωρίζει τα δεδομένα, την οθόνη και τη λογική της οθόνης). Αυτό σημαίνει ότι η προβολή είναι απλώς μια προβολή, η λογική και η κατάσταση βρίσκονται στο ViewModel και τα δεδομένα βρίσκονται στο επίπεδο Model. Εάν δεν επιβάλλετε αυτόν τον διαχωρισμό στο AI από την αρχή, δημιουργείται μια δομή που δεν μπορεί να δοκιμαστεί και είναι δύσκολο να διατηρηθεί που στριμώχνει όλη τη λογική στον κώδικα οθόνης.

Μια υγιής ροή δημιουργίας κώδικα βήμα προς βήμα:

  1. Δώστε το πλαίσιο. Πλατφόρμα, γλώσσα, έκδοση, αρχιτεκτονική, βιβλιοθήκες που χρησιμοποιούνται.
  2. Ζητήστε στρώματα. Πρώτα το μοντέλο δεδομένων, μετά το επίπεδο δικτύου/δεδομένων και μετά το ViewModel, τελευταία στην οθόνη.
  3. Ζητήστε μικρά κομμάτια. Μία οθόνη ή μία λειτουργία. Δεν είναι ένα τεράστιο αρχείο 500 γραμμών.
  4. Επαληθεύστε κάθε κομμάτι. Δημιουργία, δοκιμή, ενσωμάτωση. μετά προχωρήστε στο επόμενο κομμάτι.
  5. Ζητήστε ένα refactor (βελτιώστε τον κώδικα). Το βήμα "κάντε αυτό πιο ευανάγνωστο και δοκιμαστό" μετά τον κώδικα εργασίας.
Συμβουλή: Πείτε στην τεχνητή νοημοσύνη "διαχωρίστε τον κώδικα σύμφωνα με το MVVM: ποιο μέρος πρέπει να είναι View, ποιο ViewModel, ποιο μοντέλο, δώστε τα ξεχωριστά". Αυτή η μοναδική πρόταση βελτιώνει δραματικά την αρχιτεκτονική ποιότητα του παραγόμενου κώδικα.

Kotlin και Swift: ειδικές για τη γλώσσα θεωρήσεις

Η Kotlin (Android) και η Swift (iOS) είναι σύγχρονες, ασφαλείς γλώσσες, αλλά έχουν διαφορετικές παγίδες. Στο Kotlin, η ασφάλεια null (έλεγχος εάν μια μεταβλητή μπορεί να είναι "null" μέσω του συστήματος τύπων) μερικές φορές πληκτρολογείται χαλαρά από το AI. περιττό!! ο χειριστής (το σύμβολο που αναγκάζει τη συντριβή εάν είναι μηδενική) μπορεί να διακόψει την εφαρμογή. Στο Swift, οι προαιρετικοί κύκλοι διαχείρισης και διατήρησης είναι κρίσιμοι. Το AI μπορεί να ξεχάσει να προσθέσει [αδύναμο εαυτό] στα κλεισίματα και αυτό θα δημιουργήσει διαρροή μνήμης.

Έτσι, όταν επιλέγετε μια γλώσσα, ακονίστε την προτροπή ανάλογα: όπως "Διατηρήστε τη μηδενική ασφάλεια στο Kotlin, μην χρησιμοποιείτε !!" ή "Αποτρέψτε τον ισχυρό βρόχο αναφοράς στα κλεισίματα στο Swift".

Προσοχή: Ο ασύγχρονος κώδικας που παράγεται από AI απαιτεί ιδιαίτερη προσοχή. Η επιλογή λανθασμένου εύρους στις κορουτίνες Kotlin ή ο αποκλεισμός του κύριου νήματος σε async/wait στο Swift θα παγώσει την εφαρμογή. Το AI κάνει αυτά τα λάθη συχνά. Μην το εμπιστεύεστε χωρίς να το δοκιμάσετε.

Ανάπτυξη μεταξύ πλατφορμών: Flutter και React Native

Για όσους θέλουν να πάνε τόσο στο iOS όσο και στο Android με μια ενιαία βάση κώδικα, το Flutter (το εργαλείο εργαλείων που βασίζεται στη γλώσσα Dart της Google) και το React Native (λύση που βασίζεται σε JavaScript της Meta) ξεχωρίζουν. Η τεχνητή νοημοσύνη είναι ισχυρή και σε αυτά τα περιβάλλοντα, αλλά μερικές φορές παρακάμπτει τις διαφορές πλατφόρμας (άδειες, κανόνες καταστήματος, συμπεριφορά συγκεκριμένης συσκευής). Για παράδειγμα, στο Flutter, η άδεια κάμερας ορίζεται σε διαφορετικά αρχεία σε iOS και Android. Το AI μπορεί να γράψει μόνο ένα. Στον κώδικα πολλαπλών πλατφορμών, είναι απαραίτητο να λέμε "χορήγηση των απαραίτητων αδειών και διαμόρφωσης και για τις δύο πλατφόρμες ξεχωριστά".

Περίληψη εκλογών:

Προσέγγιση

όταν

προσοχή με AI

Εγγενής (Kotlin/Swift)

Υψηλή απόδοση, ενσωμάτωση σε βάθος της συσκευής

Κάθε πλατφόρμα έχει ξεχωριστό κωδικό. επαληθεύστε δύο φορές

Φτερουγίζω

Μία ομάδα, γρήγορη, συνεπή διεπαφή χρήστη

Ελέγξτε με μη αυτόματο τρόπο τα δικαιώματα/ρυθμίσεις για συγκεκριμένη πλατφόρμα

React Native

Διατίθεται ομάδα Web/JS

Δοκιμάστε τα τμήματα της γέφυρας (εγγενής γέφυρα) προσεκτικά

τρεις μίνι θήκες

Περίπτωση 1 — Παγίδα κορουτίνας. Μια ομάδα Android έλαβε μια λειτουργία που βγάζει τη λίστα προϊόντων από το AI. Ο κώδικας έκανε το αίτημα δικτύου στο κύριο νήμα. Το πρόβλημα δεν εμφανίστηκε στη δοκιμαστική συσκευή, αλλά στο αδύναμο δίκτυο, η εφαρμογή πάγωσε για 4 δευτερόλεπτα και έδωσε μια προειδοποίηση ANR (Application Not Responding). Διορθώθηκε όταν είπαν στο AI να "κάνει τη δουλειά του δικτύου στον αποστολέα IO". Μάθημα: ο συγχρονισμός ελέγχεται πάντα.

Περίπτωση 2 — Διαρροή μνήμης. Ένας προγραμματιστής iOS διαπίστωσε ότι μετά το άνοιγμα και το κλείσιμο μιας οθόνης που δημιουργήθηκε από AI 20 φορές, η μνήμη της εφαρμογής αυξήθηκε από 40 MB σε 180 MB. Ο λόγος ήταν ότι το ViewController δεν μπορούσε να διαγραφεί από τη μνήμη λόγω ενός [αδύναμου εαυτού] που λείπει στο κλείσιμο. Το γράφημα μνήμης του Xcode αποκάλυψε την παγίδα. Μάθημα: το προφίλ μνήμης είναι υποχρεωτικό στην εγγενή ανάπτυξη.

Περίπτωση 3 — Διαφορά πλατφόρμας. Μια ομάδα Flutter έλαβε κωδικό πρόσβασης στη γκαλερί από την τεχνητή νοημοσύνη, δούλευε σε Android αλλά χάλασε στο iOS. Ο λόγος ήταν ότι η περιγραφή της άδειας της βιβλιοθήκης φωτογραφιών (NSPhotoLibraryUsageDescription) δεν προστέθηκε στο αρχείο Info.plist. Το AI έγραψε μόνο την πλευρά του Android. Είναι μια επιδιόρθωση 15 λεπτών, αλλά θα ήταν απόρριψη καταστήματος αν δεν είχε συλληφθεί.

Αδύναμη προτροπή / Ισχυρή προτροπή

Αδύναμη προτροπή: "Γράψτε κώδικα Kotlin που εξάγει προϊόντα από το API."

Ισχυρό μήνυμα: "Δημιουργία κώδικα για Android/Kotlin που τραβά τη λίστα προϊόντων από το REST API.- Επίπεδο δικτύου με εκ των υστέρων προσαρμογή, λειτουργία αναστολής- Εργασία δικτύου στο Dispatchers.IO; αποκλεισμός του κύριου νήματος- MVVM: Repository -> ViewModel -> Κατάσταση διεπαφής χρήστη με StateFlow- Καταστάσεις σφάλματος: no classt, ξεχωριστό, sexllxal ασφάλεια, !! Χρησιμοποιώντας τα επίπεδα !!

Η ισχυρή προτροπή εμποδίζει τον παραγόμενο κώδικα να πέσει στις παγίδες των προηγούμενων περιπτώσεων.

Αντιγράψιμα πρότυπα

Πρότυπο παραγωγής σε επίπεδα: "Ανάπτυξη [λειτουργίας] για [πλατφόρμα/γλώσσα]. Παραγωγή με σειρά:1) Μοντέλο δεδομένων (κατηγορία δεδομένων/δομή)2) Επίπεδο δικτύου ή πηγής δεδομένων3) Αποθετήριο4) ViewModel (διαχείριση κατάστασης) 5) Οθόνη (UI) Εξαγωγή κάθε επιπέδου ξεχωριστά, προσθήκη σημείωσης ενοποίησης μεταξύ τους."

Πρότυπο ασφαλείας συγκεκριμένης γλώσσας (Kotlin): "Ελέγξτε αυτόν τον κωδικό Kotlin: - Εκκαθάριση χρήσης του !! και τύπου πλατφόρμας - Επαλήθευση του εύρους Coroutine και της επιλογής διεκπεραιωτή - Υπάρχουν κλήσεις που εμποδίζουν το κύριο νήμα; [κωδικός]"

Πρότυπο ασφαλείας για συγκεκριμένη γλώσσα (Swift): "Ελέγξτε αυτόν τον κωδικό Swift: - Κίνδυνος κύκλου διατήρησης στα κλεισίματα (αδύναμος/άγνωστος εαυτός) - Χρήση προαιρετικού αναδιπλούμενου με δύναμη (!) - Βαριά εργασία που πρέπει να αφαιρεθεί από το κύριο νήμα [κωδικός]"

Πρότυπο ελέγχου μεταξύ πλατφορμών: "Παραθέστε όλα τα δικαιώματα, τις διαμορφώσεις και τον κώδικα για συγκεκριμένη πλατφόρμα που απαιτούνται για αυτήν τη λειτουργία [Flutter/React Native] τόσο σε iOS όσο και σε Android. Παρέχετε ξεχωριστές καταχωρίσεις Info.plist και AndroidManifest.xml."

Συνήθη λάθη

  • Ζητώντας κώδικα χωρίς επιβολή αρχιτεκτονικής. Το αποτέλεσμα: ανεξέλεγκτη δομή που γεμίζει τα πάντα στην οθόνη.
  • Εμπιστοσύνη χωρίς δοκιμή ταυτόχρονου κώδικα. Τα κύρια μπλοκ νημάτων και το εσφαλμένο εύρος είναι οι πιο συνηθισμένες αιτίες σφαλμάτων.
  • Με θέα στη διαχείριση μνήμης. Ειδικά διαρροές σε κλείσιμο iOS. Δεν γίνεται αντιληπτό χωρίς λήψη προφίλ.
  • Παράκαμψη διαφορών πλατφόρμας. Στα εργαλεία πολλαπλών πλατφορμών, τα δικαιώματα και οι ρυθμίσεις παραμέτρων γράφονται χωριστά στις δύο πλατφόρμες.
  • Δεν επαληθεύεται η έκδοση της βιβλιοθήκης. Το AI μπορεί να προτείνει απαρχαιωμένο Retrofit/Alamofire API. Ελέγξτε με επίσημο έγγραφο.
  • Παραγωγή ενός μόνο γιγαντιαίου αρχείου. Αδύνατη η συντήρηση και η επαλήθευση. ζητήστε στρώματα.

Συνοπτικά

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

Εργασία εφαρμογής

Για μια οθόνη λίστας (π.χ. "λίστα επαφών"), ζητήστε κωδικό από το AI χρησιμοποιώντας το "Πρότυπο πρόσθετης κατασκευής" στην πλατφόρμα της επιλογής σας (Kotlin ή Swift). Προσθέστε τον κώδικα που δημιουργήθηκε σε ένα έργο, μεταγλωττίστε τον και κάντε αυτούς τους δύο ελέγχους: (1) εκτελείται η διαδικασία δικτύου/μακράς διάρκειας στο κύριο νήμα, (2) είναι σωστή η μηδενική/προαιρετική ασφάλεια; Ζητήστε από το AI να διορθώσει το πρόβλημα που εντοπίσατε με ένα πρότυπο ασφαλείας για συγκεκριμένη γλώσσα.

λίστα ελέγχου

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