Swift naspram Objective-C: 10 razloga zbog kojih Swift favorizira budućnost

Programski jezici ne umiru lako, ali to rade trgovine za razvoj koje prianjaju uz sve bliže paradigme. Ako razvijate aplikacije za mobilne uređaje, a niste istražili Swift, imajte na umu: Swift neće zamijeniti Objective-C samo kada je u pitanju razvoj aplikacija za Mac, iPhone, iPad, Apple Watch i buduće uređaje, ali također će zamijeniti C za ugrađeno programiranje na Appleovim platformama.

Zahvaljujući nekoliko ključnih značajki, Swift potencijalno može postati de facto programski jezik za stvaranje obuzimajućih, responzivnih aplikacija okrenutih potrošačima u godinama koje dolaze.

Čini se da Apple ima velike ciljeve za Swifta. Optimizirao je kompajler za izvedbu i jezik za razvoj, a aludira na to da je Swift "dizajniran za skaliranje od" zdravo, svijet "do čitavog operativnog sustava" u Swiftovoj dokumentaciji. Iako Apple još nije naveo sve svoje ciljeve za jezik, lansiranje Xcode 6, Playgrounds i Swift zajedno signalizira Appleovu namjeru da razvoj aplikacija učini lakšim i pristupačnijim nego bilo kojem drugom lancu razvojnih alata.

Evo 10 razloga da krenete u igru ​​tako što ćete sada početi raditi s Swiftom.

1. Brzo je lakše čitati

Objective-C pati od svih bradavica koje biste očekivali od jezika izgrađenog na C. Kako bi razlikovao ključne riječi i tipove od C vrsta, Objective-C je predstavio nove ključne riječi pomoću simbola @. Budući da Swift nije izgrađen na C-u, on može objediniti sve ključne riječi i ukloniti brojne simbole @ ispred svake vrste Objective-C ili ključne riječi povezane s objektom.

Swift odustaje od naslijeđenih konvencija. Dakle, više vam ne trebaju točke sa zarezom za završetak redaka ili zagrade za okruživanje uvjetnih izraza unutar if / else izraza. Još jedna velika promjena je da pozive metoda ne gnijezdo unutar međusobno rezultira zagrada pakao-pa-pa, [[[ ]]]. Pozivi metoda i funkcija u Swiftu koriste industrijski standardni popis parametara odvojenih zarezom u zagradama. Rezultat je čišći, izražajniji jezik s pojednostavljenom sintaksom i gramatikom.

Swift kôd više sliči prirodnom engleskom, uz ostale moderne popularne programske jezike. Ova čitljivost olakšava postojećim programerima s JavaScripta, Jave, Pythona, C # i C ++ da usvoje Swifta u svoj lanac alata - za razliku od ružnog pačeta koji je bio Objective-C.

2. Brzo je lakše održavati

Ostavština je ono što zadržava Objective-C - jezik se ne može razvijati bez razvoja C. C zahtijeva od programera da održavaju dvije datoteke koda kako bi poboljšali vrijeme izrade i učinkovitost izrade izvršne aplikacije, što je zahtjev koji se prenosi na Objective-C.

Swift odustaje od zahtjeva za dvije datoteke. Xcode i kompajler LLVM mogu shvatiti ovisnosti i automatski izvoditi inkrementalne gradnje u Swiftu 1.2. Kao rezultat toga, ponavljajući zadatak razdvajanja sadržaja (datoteka zaglavlja) od tijela (datoteka implementacije) stvar je prošlosti. Swift kombinira Objective-C zaglavlje (.h) i datoteke implementacije (.m) u jednu datoteku koda (.swift).

Sustav s dvije datoteke Objective-C nameće dodatni rad programerima - a to je ono što odvraća programere od šire slike. U Objective-C morate ručno sinkronizirati imena metoda i komentare između datoteka, nadam se koristeći standardnu ​​konvenciju, ali to nije zajamčeno ako tim nema postavljena pravila i preglede koda.

Xcode i kompajler LLVM mogu raditi iza scene kako bi smanjili radno opterećenje programera. Uz Swift programeri rade manje knjigovodstva i mogu potrošiti više vremena na stvaranje logike aplikacija. Swift isključuje rad s uzorcima i poboljšava kvalitetu koda, komentara i podržanih značajki.

3. Brzo je sigurnije

Jedan zanimljiv aspekt Objective-C je način na koji se rukuje pokazivačima - posebno nulim (null) pokazivačima. U Objective-C se ništa ne događa ako pokušate nazvati metodu s varijablom pokazivača koja je nil (neinicijalizirana). Izraz ili redak koda postaje neaktivan (no-op), i iako se može činiti korisnim da se ne sruši, veliki je izvor bugova. Nepostupanje dovodi do nepredvidivog ponašanja, što je neprijatelj programera koji pokušavaju pronaći i popraviti slučajni pad ili zaustaviti nepravilno ponašanje.

Izborni tipovi čine mogućnost nulte opcijske vrijednosti vrlo jasnom u Swift kodu, što znači da može generirati pogrešku kompajlera dok pišete loš kod. To stvara kratku povratnu spregu i omogućava programerima da kodiraju s namjerom. Problemi se mogu riješiti tijekom pisanja koda, što uvelike smanjuje količinu vremena i novca koji ćete potrošiti na ispravljanje programskih pogrešaka povezanih s logikom pokazivača iz Objective-C.

Tradicionalno, u Objective-C, ako je vrijednost vraćena iz metode, programer je bio odgovoran dokumentirati ponašanje vraćene varijable pokazivača (koristeći komentare i konvencije imenovanja metoda). U Swiftu, neobavezni tipovi i tipovi vrijednosti u definiciji metode izričito daju do znanja postoji li vrijednost ili ima potencijal da bude neobavezna (to jest, vrijednost može postojati ili je nula).

Da bi pružio predvidljivo ponašanje, Swift pokreće runtime runtime ako se koristi nula neobavezna varijabla. Ovo rušenje pruža dosljedno ponašanje, što olakšava postupak ispravljanja programskih pogrešaka, jer prisiljava programera da odmah riješi problem. Swift runtime pad zaustavit će se na retku koda gdje je korištena nula neobavezna varijabla. To znači da će se pogreška prije ispraviti ili u potpunosti izbjeći u Swift kodu.

4. Swift je objedinjen s upravljanjem memorijom

Swift ujedinjuje jezik na način koji Objective-C nikada nije. Podrška za automatsko brojanje referenci (ARC) potpuna je kroz proceduralne i objektno orijentirane putove koda. U Objective-C, ARC je podržan unutar API-ja za kakao i objektno orijentiranog koda; međutim nije dostupan za proceduralni C kôd i API-je poput Core Graphics. To znači da odgovornost programera postaje rukovanje upravljanjem memorijom pri radu s Core Graphics API-ima i drugim API-ima niske razine dostupnim na iOS-u. Ogromna curenja memorije koja programer može imati u Objective-C-u nemoguća su u Swiftu.

Programer ne bi trebao razmišljati o memoriji za svaki digitalni objekt koji stvori. Budući da ARC upravlja svim upravljanjem memorijom u vrijeme sastavljanja, moždana snaga koja bi išla prema upravljanju memorijom može se umjesto toga usredotočiti na osnovnu logiku aplikacije i nove značajke. Budući da ARC u Swiftu djeluje i na proceduralni i na objektno orijentirani kôd, ne zahtijeva više prebacivanja mentalnog konteksta za programere, čak i dok pišu kôd koji dodiruje API-je niže razine - problem s trenutnom verzijom Objective-C.

Automatsko upravljanje memorijom i performansama visokih performansi problem je koji je riješen, a Apple je dokazao da može povećati produktivnost. Druga je nuspojava da Objective-C i Swift ne pate od Sakupljača smeća koji radi na čišćenju neiskorištene memorije, kao što su Java, Go ili C #. Ovo je važan čimbenik za bilo koji programski jezik koji će se koristiti za responzivnu grafiku i unos korisnika, posebno na taktilnim uređajima poput iPhonea, Apple Watcha ili iPada (gdje zaostajanje frustrira i čini da korisnici primijete da je aplikacija slomljena).

5. Swift zahtijeva manje koda

Swift smanjuje količinu koda koja je potrebna za ponavljanje izjava i manipulaciju nizom. U Objective-C-u rad s tekstualnim nizovima vrlo je opširan i zahtijeva mnogo koraka za kombiniranje dviju informacija. Swift usvaja moderne značajke programskog jezika poput dodavanja dva niza zajedno s operatorom "+", što nedostaje u Objective-C. Podrška za kombiniranje ovakvih znakova i nizova temeljna je za bilo koji programski jezik koji prikazuje tekst korisniku na ekranu.

Sustav tipova u Swiftu smanjuje složenost naredbi koda - jer kompajler može otkriti tipove. Kao primjer, Cilj-C zahtijeva programera memorirati posebne string žetona ( %s, %d, %@), i dati popis odvojenih zarezom varijabli zamijeniti svaku token. Swift podržava interpolaciju niza, što eliminira potrebu za pamćenjem tokena i omogućuje programerima umetanje varijabli izravno u redoslijed korisničkog niza, poput naslova oznake ili gumba. Sustav inferencije tipa i interpolacija nizova ublažavaju uobičajeni izvor rušenja koji su uobičajeni u Objective-C.

S Objective-C, neuredno naručivanje ili upotreba pogrešnog tokena niza uzrokuje pad aplikacije. Ovdje vas Swift ponovno oslobađa knjigovodstvenog rada, prevodeći u manje koda za pisanje (kod koji je sada manje podložan pogreškama) zbog svoje ugrađene podrške za manipulaciju tekstualnim nizovima i podacima.

6. Brzi je brži

Odbacivanje naslijeđenih C konvencija uvelike je poboljšalo Swifta ispod haube. Mjerila za izvedbu Swift koda i dalje ukazuju na Appleovu predanost poboljšanju brzine kojom Swift može pokretati logiku aplikacija.

Prema prioritetnim laboratorijima, tvorcima popularnog alata za izvedbu GeekBench, Swift se približavao karakteristikama izvedbe C ++-a za računski vezane zadatke u prosincu 2014. koristeći Mandelbrotov algoritam.

U veljači 2015., laboratoriji Primate Labs otkrili su da je Xcode 6.3 Beta poboljšao Swiftove performanse GEMM algoritma - algoritma vezanog uz memoriju sa sekvencijalnim pristupom velikim nizovima - za faktor 1,4. Početna implementacija FFT-a - algoritam vezan za memoriju sa slučajnim pristupom velikim nizovima - imala je poboljšanje performansi 2,6 puta.

Daljnja poboljšanja primijećena su u Swiftu primjenom najboljih praksi, što je rezultiralo 8,5-strukim pojačanjem performansi algoritma FFT (ostavljajući C ++ samo 1,1-puta dobitak u izvedbi). Poboljšanja su također omogućila Swiftu da nadmaši C ++ za Mandelbrotov algoritam samo za faktor 1,03.

Swift je gotovo u ravni s C ++-om i za algoritme FFT i za Mandelbrot. Prema Primate Labs, izvedba algoritma GEMM sugerira da Swift kompajler ne može vektorizirati kôd koji C ++ kompajler može - lako povećanje performansi koje bi se moglo postići u sljedećoj verziji Swifta.

7. Manje sudara imena s projektima otvorenog koda

Jedan problem koji muči Objective-C kod je nedostatak formalne podrške za prostore imena, što je bilo C ++-ovo rješenje za sudare imena datoteka. Kad se dogodi ovaj sudar imena u Objective-C, to je pogreška povezivača i aplikacija se ne može pokrenuti. Zaobilazna rješenja postoje, ali imaju potencijalne zamke. Uobičajena je konvencija uporaba prefiksa od dva ili tri slova za razlikovanje Objective-C koda koji je, na primjer, Facebook napisao u odnosu na vaš vlastiti kôd.

Swift pruža implicitne prostore imena koji omogućuju postojanje iste datoteke s kodom na više projekata, a da ne uzrokuje neuspjeh u gradnji i ne zahtijeva imena poput NSString (sljedeći korak - tvrtka Stevea Jobsa nakon otkaza iz Applea) ili CGPoint (Core Graphics). U konačnici, ova značajka u Swiftu programere čini produktivnijima i znači da ne moraju voditi knjigovodstvo koje postoji u Objective-C. Swiftov utjecaj možete vidjeti s jednostavnim imenima poput Array, Dictionary i String umjesto NSArray, NSDictionary i NSString, koji su nastali iz nedostatka prostora imena u Objective-C.

S Swiftom se prostor imena temelji na cilju kojem pripada datoteka s kodom. To znači da programeri mogu razlikovati klase ili vrijednosti pomoću identifikatora prostora imena. Ova promjena u Swiftu je ogromna. To uvelike olakšava uključivanje projekata otvorenog koda, okvira i knjižnica u vaš kod. Prostori imena omogućuju različitim softverskim tvrtkama da stvore ista imena datoteka datoteka bez brige o kolizijama prilikom integracije projekata otvorenog koda. Sada i Facebook i Apple mogu koristiti datoteku objektnog koda nazvanu FlyingCar.swift bez ikakvih pogrešaka ili grešaka u gradnji.

8. Swift podržava dinamičke knjižnice

Najveća promjena u Swiftu koja nije primila dovoljno pažnje je prelazak sa statičkih knjižnica, koje se ažuriraju u glavnim izdanjima (iOS 8, iOS 7 i tako dalje), na dinamičke knjižnice. Dinamičke knjižnice izvršni su dijelovi koda koji se mogu povezati s aplikacijom. Ova značajka omogućuje trenutnim Swift aplikacijama povezivanje s novijim verzijama jezika Swift kako se vremenom razvija.

Programer predaje aplikaciju zajedno s knjižnicama, koje su digitalno potpisane razvojnim certifikatom kako bi se osigurala cjelovitost (zdravo, NSA). To znači da se Swift može razvijati brže od iOS-a, što je uvjet za suvremeni programski jezik. Promjene u knjižnicama mogu se uključiti u najnovije ažuriranje aplikacije u App Storeu i sve jednostavno funkcionira.

Dinamičke knjižnice nikada nisu bile podržane na iOS-u do pokretanja Swifta i iOS-a 8, iako su dinamične knjižnice na Mac-u podržane jako dugo. Dinamičke knjižnice su vanjske za izvršnu aplikaciju, ali su uključene u paket aplikacija preuzet iz App Storea. Smanjuje početnu veličinu aplikacije dok se učitava u memoriju, jer je vanjski kôd povezan samo kada se koristi.

Sposobnost odgađanja učitavanja u mobilnoj aplikaciji ili ugrađenoj aplikaciji na Apple Watchu poboljšati će uočene performanse korisnika. Ovo je jedna od razlika zbog kojih se ekosustav iOS-a osjeća osjetljivijim. Apple se usredotočio na učitavanje samo imovine, resursa, a sada je u pokretu kompajlirao i povezao kôd. Učitavanje u letu smanjuje početno vrijeme čekanja dok resurs stvarno nije potreban za prikaz na zaslonu.