Swift vs. Objective-C: 10 motivi per cui il futuro favorisce Swift

I linguaggi di programmazione non muoiono facilmente, ma i negozi di sviluppo che si aggrappano ai paradigmi sbiaditi lo fanno. Se stai sviluppando app per dispositivi mobili e non hai studiato Swift, prendi nota: Swift non solo soppianterà Objective-C quando si tratta di sviluppare app per Mac, iPhone, iPad, Apple Watch e dispositivi a venire, ma sostituirà anche C per la programmazione embedded su piattaforme Apple.,

Grazie a diverse funzionalità chiave, Swift ha il potenziale per diventare il linguaggio di programmazione de facto per la creazione di applicazioni coinvolgenti, reattive e rivolte al consumatore per gli anni a venire.

Apple sembra avere grandi obiettivi per Swift. Ha ottimizzato il compilatore per le prestazioni e il linguaggio per lo sviluppo, e allude a Swift “progettato per scalare da” ciao, mondo” a un intero sistema operativo ” nella documentazione di Swift., Mentre Apple non ha ancora dichiarato tutti i suoi obiettivi per la lingua, i lanci di Xcode 6, Playgrounds e Swift insieme segnalano l’intento di Apple di rendere lo sviluppo di app più facile e più accessibile rispetto a qualsiasi altra catena di strumenti di sviluppo.

Qui ci sono 10 motivi per andare avanti del gioco, iniziando a lavorare con Swift ora.

Swift è più facile da leggere

Objective-C soffre di tutte le verruche che ti aspetteresti da un linguaggio costruito su C., Per differenziare parole chiave e tipi dai tipi C, Objective-C ha introdotto nuove parole chiave utilizzando il simbolo@. Poiché Swift non è costruito su C, può unificare tutte le parole chiave e rimuovere i numerosi simboli @ di fronte a ogni tipo Objective-C o parola chiave relativa all’oggetto.

Swift elimina le convenzioni legacy. Pertanto, non è più necessario il punto e virgola per terminare le righe o le parentesi per circondare le espressioni condizionali all’interno delle istruzioni if/else. Un altro grande cambiamento è che le chiamate al metodo non si annidano l’una dentro l’altra con conseguente parentesi hell—bye-bye, ]]., Le chiamate al metodo e alla funzione in Swift utilizzano l’elenco di parametri separati da virgole standard del settore tra parentesi. Il risultato è un linguaggio più pulito, più espressivo con una sintassi e una grammatica semplificate.

Il codice Swift assomiglia più da vicino all’inglese naturale, oltre ad altri moderni linguaggi di programmazione popolari. Questa leggibilità rende più facile per i programmatori esistenti di JavaScript, Java, Python, C# e C++ adottare Swift nella loro catena di strumenti, a differenza del brutto anatroccolo che era Objective—C.,

Swift è più facile da mantenere

Legacy è ciò che tiene Objective-C indietro—il linguaggio non può evolvere senza C evoluzione. C richiede ai programmatori di mantenere due file di codice per migliorare il tempo di compilazione e l’efficienza della creazione dell’app eseguibile, un requisito che porta a Objective-C.

Swift elimina il requisito dei due file. Xcode e il compilatore LLVM possono capire le dipendenze ed eseguire build incrementali automaticamente in Swift 1.2., Di conseguenza, il compito ripetitivo di separare il sommario (file di intestazione) dal corpo (file di implementazione) è una cosa del passato. Swift combina l’intestazione Objective-C (.h) e file di implementazione (.m) in un singolo file di codice (.Swift).

Il sistema a due file di Objective-C impone un lavoro aggiuntivo ai programmatori-ed è il lavoro che distrae i programmatori dal quadro più ampio., In Objective-C è necessario sincronizzare manualmente i nomi dei metodi e i commenti tra i file, si spera utilizzando una convenzione standard, ma ciò non è garantito a meno che il team non disponga di regole e revisioni del codice.

Xcode e il compilatore LLVM possono lavorare dietro le quinte per ridurre il carico di lavoro sul programmatore. Con Swift, i programmatori fanno meno contabilità e possono dedicare più tempo a creare la logica delle app. Swift taglia fuori boilerplate lavoro e migliora la qualità del codice, commenti, e le caratteristiche che sono supportati.,

Swift è più sicuro

Un aspetto interessante di Objective-C è il modo in cui vengono gestiti i puntatori, in particolare i puntatori nil (null). In Objective-C, non succede nulla se si tenta di chiamare un metodo con una variabile puntatore che è nil (non inizializzata). L’espressione o la riga di codice diventa una no-operation (no-op), e mentre potrebbe sembrare utile che non si blocchi, è stata un’enorme fonte di bug. Un no-op porta a comportamenti imprevedibili, che è il nemico dei programmatori che cercano di trovare e correggere un crash casuale o interrompere un comportamento irregolare.,

I tipi opzionali rendono molto chiara la possibilità di un valore opzionale nil nel codice Swift, il che significa che può generare un errore del compilatore mentre si scrive codice errato. Questo crea un breve ciclo di feedback e consente ai programmatori di codificare con intenzione. I problemi possono essere risolti mentre il codice è scritto, il che riduce notevolmente la quantità di tempo e denaro che spenderai per correggere i bug relativi alla logica del puntatore da Objective-C.,

Tradizionalmente, in Objective-C, se un valore veniva restituito da un metodo, era responsabilità del programmatore documentare il comportamento della variabile del puntatore restituita (usando commenti e convenzioni di denominazione del metodo). In Swift, i tipi opzionali e i tipi di valore rendono esplicitamente chiaro nella definizione del metodo se il valore esiste o se ha il potenziale per essere facoltativo (cioè, il valore può esistere o può essere nullo).

Per fornire un comportamento prevedibile Swift innesca un crash di runtime se viene utilizzata una variabile opzionale nil., Questo crash fornisce un comportamento coerente, che facilita il processo di correzione dei bug perché costringe il programmatore a risolvere immediatamente il problema. Il crash di runtime Swift si fermerà sulla riga di codice in cui è stata utilizzata una variabile opzionale nil. Ciò significa che il bug verrà risolto prima o evitato interamente nel codice Swift.

Swift è unificato con la gestione della memoria

Swift unifica il linguaggio in un modo che Objective-C non ha mai avuto. Il supporto per il conteggio automatico dei riferimenti (ARC) è completo attraverso i percorsi di codice procedurali e orientati agli oggetti., In Objective-C, ARC è supportato all’interno delle API Cocoa e del codice orientato agli oggetti; non è disponibile, tuttavia, per il codice C procedurale e le API come Core Graphics. Ciò significa che diventa responsabilità del programmatore gestire la gestione della memoria quando si lavora con le API grafiche di base e altre API di basso livello disponibili su iOS. Le enormi perdite di memoria che un programmatore può avere in Objective-C sono impossibili in Swift.

Un programmatore non dovrebbe pensare alla memoria per ogni oggetto digitale che crea., Poiché ARC gestisce tutta la gestione della memoria in fase di compilazione, la capacità intellettuale che sarebbe andata verso la gestione della memoria può invece essere focalizzata sulla logica delle app di base e sulle nuove funzionalità. Perché ARC in Swift funziona tutto, sia procedurale e object-oriented codice, si richiede al contesto mentale, interruttori programmatori, anche a scrivere il codice che tocca Api di livello inferiore—un problema con la versione corrente di Objective-C.

Automatico e ad alte prestazioni, la gestione della memoria è un problema che è stato risolto, e Apple ha dimostrato che può aumentare la produttività., L’altro effetto collaterale è che sia Objective-C che Swift non soffrono di un Garbage Collector che esegue la pulizia della memoria inutilizzata, come Java, Go o C#. Questo è un fattore importante per qualsiasi linguaggio di programmazione che verrà utilizzato per la grafica reattiva e l’input dell’utente, in particolare su un dispositivo tattile come iPhone, Apple Watch o iPad (dove il ritardo è frustrante e fa percepire agli utenti che un’app è rotta).

Swift richiede meno codice

Swift riduce la quantità di codice necessaria per le istruzioni ripetitive e la manipolazione delle stringhe., In Objective-C, lavorare con le stringhe di testo è molto dettagliato e richiede molti passaggi per combinare due informazioni. Swift adotta le moderne funzionalità del linguaggio di programmazione come l’aggiunta di due stringhe insieme a un operatore”+”, che manca in Objective-C. Il supporto per combinare caratteri e stringhe come questa è fondamentale per qualsiasi linguaggio di programmazione che visualizza il testo a un utente su uno schermo.

Il sistema di tipi in Swift riduce la complessità delle istruzioni di codice, poiché il compilatore può capire i tipi., Ad esempio, Objective-C richiede ai programmatori di memorizzare speciali token stringa (%s,%d,%@) e fornire un elenco separato da virgole di variabili per sostituire ogni token. Swift supporta l’interpolazione delle stringhe, che elimina la necessità di memorizzare i token e consente ai programmatori di inserire le variabili direttamente in linea con una stringa rivolta all’utente, come un’etichetta o un titolo del pulsante. Il sistema di inferenza del tipo e l’interpolazione delle stringhe attenuano una fonte comune di arresti anomali comuni in Objective-C.,

Con Objective-C, incasinare l’ordine o utilizzare il token stringa errato causa il crash dell’app. Qui, Swift ti allevia nuovamente dal lavoro di contabilità, traducendo in meno codice da scrivere (codice che ora è meno soggetto a errori) a causa del suo supporto in linea per la manipolazione di stringhe di testo e dati.

Swift è più veloce

La caduta delle convenzioni C legacy ha notevolmente migliorato Swift sotto il cofano. I benchmark per le prestazioni del codice Swift continuano a puntare alla dedizione di Apple per migliorare la velocità con cui Swift può eseguire la logica delle app.,

Secondo Primate Labs, creatori del popolare strumento di prestazioni GeekBench, Swift si stava avvicinando alle caratteristiche prestazionali del C++ per le attività legate al calcolo nel dicembre 2014 utilizzando l’algoritmo Mandelbrot.

Nel febbraio 2015, Primate Labs ha scoperto che la beta Xcode 6.3 ha migliorato le prestazioni di Swift dell’algoritmo GEMM—un algoritmo legato alla memoria con accesso sequenziale di array di grandi dimensioni-di un fattore 1.4. L’implementazione iniziale di FFT-un algoritmo legato alla memoria con accesso casuale di array di grandi dimensioni—ha avuto un miglioramento delle prestazioni di 2,6 volte.,

Ulteriori miglioramenti sono stati osservati in Swift applicando le migliori pratiche, con un conseguente aumento di 8,5 volte per le prestazioni dell’algoritmo FFT (lasciando C++ con un guadagno di prestazioni solo di 1,1 volte). I miglioramenti hanno anche permesso a Swift di sovraperformare C++ per l’algoritmo Mandelbrot di un fattore di soli 1,03.

Swift è quasi alla pari con C++ per entrambi gli algoritmi FFT e Mandelbrot., Secondo Primate Labs, le prestazioni dell’algoritmo GEMM suggeriscono che il compilatore Swift non può vettorizzare il codice che il compilatore C++ può-un facile guadagno di prestazioni che potrebbe essere raggiunto nella prossima versione di Swift.

Meno collisioni di nomi con progetti open source

Un problema che ha afflitto il codice Objective-C è la mancanza di supporto formale per gli spazi dei nomi, che era la soluzione di C++per codificare le collisioni di nomi di file. Quando questa collisione del nome si verifica in Objective-C, si tratta di un errore del linker e l’app non può essere eseguita. Esistono soluzioni alternative, ma hanno potenziali insidie., La convenzione comune consiste nell’utilizzare prefissi a due o tre lettere per differenziare il codice Objective – C scritto, ad esempio, da Facebook rispetto al proprio codice.

Swift fornisce spazi dei nomi impliciti che consentono allo stesso file di codice di esistere su più progetti senza causare un errore di compilazione e che richiedono nomi come NSString (Passo successivo: la società di Steve Jobs dopo essere stata licenziata da Apple) o CGPoint (Core Graphics). In definitiva, questa funzione in Swift mantiene i programmatori più produttivi e significa che non devono fare la contabilità esistente in Objective-C., Puoi vedere l’influenza di Swift con nomi semplici come Array, Dictionary e String invece di NSArray, NSDictionary e NSString, che sono nati dalla mancanza di spazi dei nomi in Objective-C.

Con Swift, gli spazi dei nomi sono basati sulla destinazione a cui appartiene un file di codice. Ciò significa che i programmatori possono differenziare classi o valori utilizzando l’identificatore dello spazio dei nomi. Questo cambiamento in Swift è enorme. Facilita notevolmente l’integrazione di progetti open source, framework e librerie nel codice., Gli spazi dei nomi consentono a diverse società di software di creare gli stessi nomi di file di codice senza preoccuparsi di collisioni durante l’integrazione di progetti open source. Ora sia Facebook che Apple possono utilizzare un file di codice oggetto chiamato FlyingCar.swift senza errori o errori di compilazione.

Swift supporta le librerie dinamiche

Il più grande cambiamento in Swift che non ha ricevuto abbastanza attenzione è il passaggio dalle librerie statiche, che vengono aggiornate nelle versioni principali (iOS 8, iOS 7 e così via), alle librerie dinamiche., Le librerie dinamiche sono blocchi eseguibili di codice che possono essere collegati a un’app. Questa funzione consente alle attuali app Swift di collegarsi alle versioni più recenti del linguaggio Swift man mano che si evolve nel tempo.

Lo sviluppatore invia l’app insieme alle librerie, entrambe firmate digitalmente con il certificato di sviluppo per garantire l’integrità (ciao, NSA). Ciò significa che Swift può evolvere più velocemente di iOS, che è un requisito per un linguaggio di programmazione moderno. Le modifiche alle librerie possono essere incluse con l’ultimo aggiornamento di un’app sull’App Store e tutto funziona semplicemente.,

Le librerie dinamiche non sono mai state supportate su iOS fino al lancio di Swift e iOS 8, anche se le librerie dinamiche sono state supportate su Mac per un tempo molto lungo. Le librerie dinamiche sono esterne all’eseguibile dell’app, ma sono incluse nel pacchetto di app scaricato dall’App Store. Riduce la dimensione iniziale di un’app mentre viene caricata in memoria, poiché il codice esterno è collegato solo quando viene utilizzato.

La possibilità di posticipare il caricamento in un’app mobile o in un’app incorporata su Apple Watch migliorerà le prestazioni percepite dall’utente., Questa è una delle distinzioni che rendono l’ecosistema iOS più reattivo. Apple è stata focalizzata sul caricamento solo risorse, risorse e ora codice compilato e collegato al volo. Il caricamento on-the-fly riduce i tempi di attesa iniziali fino a quando una risorsa è effettivamente necessaria per visualizzare sullo schermo.

Le librerie dinamiche in Swift rendono possibile la propagazione di modifiche e miglioramenti del linguaggio di programmazione più veloce che mai. Gli utenti non devono più attendere le versioni di iOS point per beneficiare di miglioramenti delle prestazioni o dell’affidabilità introdotti da Apple in Swift.,

Swift Playgrounds incoraggia la codifica interattiva

I nuovi campi da gioco di Swift sono una manna per gli sviluppatori esperti. I campi da gioco sono stati parzialmente ispirati dal lavoro dell’ex dipendente Apple Brett Victor. I parchi giochi consentono ai programmatori di testare un nuovo algoritmo o una routine grafica, ad esempio da 5 a 20 righe di codice, senza dover creare un’intera app per iPhone.

Apple ha aggiunto l’esecuzione di codice in linea a Playgrounds per aiutare i programmatori a creare un pezzo di codice o scrivere un algoritmo mentre ricevono feedback lungo la strada., Questo ciclo di feedback può migliorare la velocità con cui il codice può essere scritto perché il modello mentale di cui un programmatore tradizionale ha bisogno può essere sostituito con visualizzazioni di dati nei campi da gioco. La programmazione è un processo iterativo e qualsiasi sforzo che può essere ridotto o utilizzato per integrare il processo creativo renderà i programmatori più produttivi e li libererà per risolvere problemi più grandi, piuttosto che concentrarsi su dettagli noiosi che i compilatori tradizionali hanno imposto ai programmatori.,

Nota: Dalla mia esperienza nell’insegnare ai programmatori principianti, i campi da gioco non sono così potenti per i principianti come lo sono per i programmatori esperti. Mostrare semplicemente come funziona una variabile nel parco giochi Swift non aiuta un principiante a capire la necessità di una variabile in virgola mobile rispetto a una variabile intera. La necessità diventa evidente quando si mostra un app che può ricordare la vostra ultima posizione di scorrimento nel news feed di Facebook. Per i principianti, la domanda “perché” può essere risolta solo con un esempio di lavoro: un’app per iPhone.,

Swift è un futuro che puoi influenzare

Objective-C non sta andando da nessuna parte, ma non vedrà tanti cambiamenti importanti, grazie all’introduzione di Swift. Alcune funzionalità Swift probabilmente migreranno verso Objective-C, ma l’eredità di Objective-C in C significa che può assorbire solo così tanto.

Swift fornisce alla comunità di sviluppo un modo diretto per influenzare un linguaggio che verrà utilizzato per creare app, sistemi embedded (se Apple mai concede in licenza un framework e un chip embedded per terze parti) e dispositivi come Apple Watch.,

Apple è focalizzata sulla fornitura della migliore esperienza di consumo e sta costruendo solo quelle caratteristiche ritenute degne di attenzione. Con la versione Swift 1.2 in Xcode 6.3, Apple ha già risolto migliaia di bug segnalati con la popolare utility Apple Bug Reporter. Il team che supporta lo sviluppo e l’evoluzione di Swift è molto interessato a come migliorare il linguaggio per supportare meglio la comunità di sviluppo che costruisce app e sistemi utilizzando Swift.,

Swift: Il linguaggio più accessibile e completo

La maggior parte delle modifiche che consentono a Swift di superare Objective-C derivano dall’abbandono del linguaggio legacy su cui Objective-C è stato costruito. Apple non si sta allontanando da Cocoa, che è la loro API e libreria di codice per creare le esperienze che si sentono Apple-esque. Invece, stanno fornendo parità completa e rendendo più facile interagire con le nuove API che supportano funzionalità come Force Touch o Taptic Feedback.

Molte decisioni legacy sono state progettate per semplificare la progettazione del compilatore., Swift si sta concentrando sul rendere più facile il lavoro dello sviluppatore di app, eliminando lo sforzo mentale delle pratiche di codifica legacy. Man mano che i compilatori moderni migliorano, è possibile dedurre più informazioni da meno codice.

Con Swift, i programmatori hanno la metà dei file di codice da mantenere, zero sincronizzazione manuale del codice e molto meno punteggiatura da digitare erroneamente, portando a più tempo speso a scrivere righe di codice di qualità., Il codice viene ora auto-documentato in Swift con l’aggiunta di tipi opzionali: un meccanismo di sicurezza in fase di compilazione per restituire un valore o nessun valore, che è un problema comune con operazioni asincrone, errori di rete, input utente non valido o errori di convalida dei dati. ARC è unificato in Swift tra il codice procedurale in stile C e il codice orientato agli oggetti utilizzando il framework Cocoa di Apple.

Gli sviluppatori troveranno che scrivono meno codice in Swift e le moderne funzionalità linguistiche li supportano nel mantenere le righe di codice più leggibili., Swift manterrà l’intero ecosistema Apple in prima linea nella programmazione mentre continua ad evolversi, grazie al supporto della libreria dinamica in iOS e Swift. Progetti open source, SDK di terze parti e framework che si integrano con domotica, dispositivi e servizi sociali saranno più facili da integrare senza aumentare i tempi di compilazione. Swift è quasi veloce come C++ in alcuni algoritmi e l’ultima versione di Xcode 6.3 e Swift 1.2 punta a ulteriori ottimizzazioni delle prestazioni all’orizzonte.,

Aggiungete a ciò il fatto che Playgrounds e Swift consentono un nuovo modo di programmare con feedback visivo che aiuta lo sviluppo di algoritmi che utilizzano visualizzazioni di dati in linea. Un ciclo di feedback più breve e descrizioni grafiche rendono il processo di codifica iterativa ancora più facile da avviare.

In definitiva, Swift è un linguaggio di programmazione completo più accessibile che consentirà agli sviluppatori non solo di creare app ma anche di indirizzare sistemi embedded come il nuovo Apple Watch a bassa potenza per molti anni a venire.,

  • 10 caratteristiche Apple ‘rubato’ per il linguaggio di programmazione Swift
  • 9 cose che odio di Objective-C
  • Recensione: 7 ottima app mobile costruttori
  • Recensione: AppStudio è come Visual Basic for mobile dev
  • Recensione: Appery.io coppie mobile app builder con servizi di back-end
  • Recensione: Alfa Ovunque assi offline mobile

Share

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *