Programiranje

Swift proti Objective-C: 10 razlogov, zakaj je prihodnost naklonjena Swiftu

Programski jeziki ne umrejo zlahka, toda razvojne prodajalne, ki se držijo izginjajočih paradigem. Če razvijate aplikacije za mobilne naprave in še niste raziskali Swifta, upoštevajte: Swift ne bo nadomestil Objective-C samo pri razvoju aplikacij za Mac, iPhone, iPad, Apple Watch in prihodnje naprave, bo pa nadomestil tudi C za vdelano programiranje na Appleovih platformah.

Zahvaljujoč številnim ključnim lastnostim lahko Swift v prihodnjih letih dejansko postane programski jezik za ustvarjanje izjemnih, odzivnih aplikacij, usmerjenih k potrošnikom.

Zdi se, da ima Apple velike cilje za Swift. Prevajalnik je optimiziral za delovanje in jezik za razvoj, v Swiftovi dokumentaciji pa se namiguje na to, da je Swift "zasnovan tako, da se meri od" zdravo, svet "na celoten operacijski sistem. Čeprav Apple še ni navedel vseh svojih ciljev glede jezika, uvedbe Xcode 6, Playgrounds in Swift skupaj kažejo na Appleov namen, da bo razvoj aplikacij lažji in bolj dostopen kot s katero koli drugo verigo razvojnih orodij.

Tu je 10 razlogov, da začnete z igro, tako da začnete sodelovati s Swiftom zdaj.

1. Swift je lažje brati

Objective-C trpi zaradi vseh bradavic, ki bi jih pričakovali od jezika, zgrajenega na C. Za razlikovanje ključnih besed in vrst od vrst C je Objective-C predstavil nove ključne besede s simbolom @. Ker Swift ni zgrajen na C, lahko poenoti vse ključne besede in odstrani številne simbole @ pred vsako vrsto Objective-C ali ključno besedo, povezano z objektom.

Swift opusti zapuščene konvencije. Tako ne potrebujete več podpičja do končnih vrstic ali oklepajev, ki bi obdajali pogojne izraze znotraj stavkov if / else. Druga velika sprememba je, da klici metode ne gnezdijo drug v drugem, kar povzroči pekel oklepaja - adijo, [[[ ]]]. Klici metod in funkcij v Swiftu uporabljajo standardni standard, ločen z vejicami, seznam parametrov v oklepajih. Rezultat je čistejši, bolj izrazit jezik s poenostavljeno sintakso in slovnico.

Swift koda je poleg drugih sodobnih priljubljenih programskih jezikov bolj podobna naravni angleščini. Ta berljivost obstoječim programerjem iz JavaScript, Java, Python, C # in C ++ olajša sprejemanje Swifta v njihovo verigo orodij - za razliko od grdega račka, ki je bil Objective-C.

2. Swift je lažje vzdrževati

Zapuščina je tisto, kar zadržuje Objective-C - jezik se ne more razvijati brez razvoja C. C zahteva, da programerji vzdržujejo dve kodni datoteki, da bi izboljšali čas izdelave in učinkovitost ustvarjanja izvršljive aplikacije, kar je zahteva, ki se prenese na Objective-C.

Swift opusti zahtevo za dve datoteki. Xcode in prevajalnik LLVM lahko ugotovita odvisnosti in samodejno izvedeta postopno gradnjo v Swift 1.2. Posledično je ponavljajoča se naloga ločevanja kazala (datoteka z glavo) od telesa (datoteka za izvajanje) preteklost. Swift združuje glavo Objective-C (.h) in izvedbene datoteke (.m) v eno kodno datoteko (.swift).

Sistem z dvema datotekama Objective-C programerjem nalaga dodatno delo - in to delo odvrača programerje od širše slike. V Objective-C morate ročno sinhronizirati imena metod in komentarje med datotekami, upajmo, da uporabljate standardno konvencijo, vendar to ni zagotovljeno, razen če ima ekipa vzpostavljena pravila in preglede kod.

Xcode in prevajalnik LLVM lahko opravita delo v ozadju, da zmanjšata obremenitev programerja. Z Swiftom programerji manj vodijo knjigovodstvo in lahko porabijo več časa za ustvarjanje logike aplikacij. Swift izklopi delo z vzorci in izboljša kakovost kode, komentarjev in podprtih funkcij.

3. Hitri je varnejši

Zanimiv vidik Objective-C je način obdelave kazalcev - zlasti ničelnih (ničelnih) kazalcev. V Objective-C se nič ne zgodi, če poskusite poklicati metodo s spremenljivko kazalca, ki je nič (neinicializirana). Izraz ali vrstica kode postane neaktivna (no-op) in čeprav se zdi koristno, da se ne zruši, je bil velik vir napak. Neodločitev vodi do nepredvidljivega vedenja, ki je sovražnik programerjev, ki poskušajo najti in odpraviti naključne zrušitve ali ustaviti neredno vedenje.

Izbirni tipi omogočajo, da je ničelna neobvezna vrednost zelo jasna v kodi Swift, kar pomeni, da lahko med pisanjem slabe kode ustvari napako prevajalnika. To ustvarja kratko povratno zanko in programerjem omogoča kodno načrtovanje. Težave je mogoče odpraviti s pisanjem kode, kar močno zmanjša čas in denar, ki ga boste porabili za odpravljanje napak, povezanih z logiko kazalca, iz Objective-C.

Običajno je bil v Objective-C, če je bila vrednost vrnjena iz metode, odgovoren programer, da dokumentira obnašanje vrnjene spremenljivke kazalca (z uporabo komentarjev in pravil o imenovanju metod). V Swiftu neobvezni tipi in tipi vrednosti v definiciji metode izrecno pojasnijo, ali vrednost obstaja ali je potencialno neobvezna (to pomeni, da vrednost lahko obstaja ali je nič).

Za zagotovitev predvidljivega vedenja Swift sproži runtime med izvajanjem, če je uporabljena neobvezna spremenljivka nič. Ta zrušitev zagotavlja dosledno vedenje, ki olajša postopek odpravljanja napak, ker programerja prisili, da težavo odpravi takoj. Swift runtime se bo ustavil v vrstici kode, kjer je bila uporabljena neobvezna spremenljivka nič. To pomeni, da bo napaka prej odpravljena ali v celoti izognjena v kodi Swift.

4. Swift je poenoten z upravljanjem pomnilnika

Swift poenoti jezik na način, kot ga Objective-C še nikoli ni imel. Podpora za samodejno štetje referenc (ARC) je popolna v postopkovni in objektno usmerjeni kodi. V Objective-C je ARC podprt v API-jih kakava in objektno usmerjeni kodi; ni pa na voljo za postopkovno kodo C in API-je, kot je Core Graphics. To pomeni, da je programer odgovoren za upravljanje pomnilnika pri delu z API-ji Core Graphics in drugimi API-ji nizke ravni, ki so na voljo v iOS-u. Ogromno puščanje pomnilnika, ki ga lahko ima programer v Objective-C, je v Swiftu nemogoče.

Programerju ne bi bilo treba razmišljati o pomnilniku za vsak digitalni predmet, ki ga ustvari. Ker ARC obvladuje celotno upravljanje pomnilnika v času prevajanja, je možganska moč, ki bi bila usmerjena k upravljanju pomnilnika, lahko osredotočena na osnovno logiko aplikacije in nove funkcije. Ker ARC v Swiftu deluje tako v postopkovni kot v objektno usmerjeni kodi, za programerje ne potrebuje več stikal za mentalni kontekst, čeprav pišejo kodo, ki se dotika API-jev nižje ravni - težava s trenutno različico Objective-C.

Samodejno in visoko zmogljivo upravljanje pomnilnika je rešena težava in Apple je dokazal, da lahko poveča produktivnost. Drugi neželeni učinek je, da Objective-C in Swift ne trpita zaradi zbiranja smeti, ki izvaja čiščenje neuporabljenega pomnilnika, kot so Java, Go ali C #. To je pomemben dejavnik za kateri koli programski jezik, ki se bo uporabljal za odzivno grafiko in uporabniški vnos, zlasti na otipnih napravah, kot so iPhone, Apple Watch ali iPad (kjer je zaostajanje moteče in uporabniki zaznajo, da je aplikacija pokvarjena).

5. Swift zahteva manj kode

Swift zmanjša količino kode, ki je potrebna za ponavljajoče se izjave in manipulacijo nizov. V programu Objective-C je delo z besedilnimi nizi zelo podrobno in zahteva veliko korakov za združitev dveh podatkov. Swift sprejme sodobne funkcije programskega jezika, kot je dodajanje dveh nizov skupaj z operatorjem "+", kar manjka v Objective-C. Podpora za kombiniranje takšnih znakov in nizov je bistvena za kateri koli programski jezik, ki uporabniku na zaslonu prikaže besedilo.

Sistem tipov v Swiftu zmanjšuje kompleksnost stavkov kode - saj lahko prevajalnik ugotovi vrste. Kot primer Objective-C od programerjev zahteva, da si zapomnijo posebne žetone (% s, % d, %@) in podajte seznam spremenljivk, ločenih z vejicami, da zamenjate vsak žeton. Swift podpira interpolacijo nizov, kar odpravlja potrebo po pomnjenju žetonov in omogoča programerjem, da vstavljajo spremenljivke neposredno v vrstico, usmerjeno v uporabnika, na primer nalepko ali naslov gumba. Sistem za ugotavljanje vrste in interpolacija nizov omilita pogost vir zrušitev, ki so pogosti v Objective-C.

V programu Objective-C zmeda naročila ali uporaba napačnega žetona niza povzroči zrušitev aplikacije. Tu vas Swift spet razbremeni knjigovodstva in prevede v manj kode za pisanje (koda, ki je zdaj manj nagnjena k napakam) zaradi vgrajene podpore za manipulacijo besedilnih nizov in podatkov.

6. Hitri so hitrejši

Odpuščanje starejših konvencij C je močno izboljšalo Swifta pod pokrovom. Merila uspešnosti kode Swift še naprej kažejo na Appleovo predanost izboljšanju hitrosti, s katero lahko Swift poganja logiko aplikacije.

Po navedbah Primate Labs, izdelovalcev priljubljenega orodja za zmogljivost GeekBench, se je Swift decembra 2014 z algoritmom Mandelbrot približeval značilnostim delovanja C ++ za računsko vezane naloge.

Februarja 2015 je laboratorij Primate Labs odkril, da je Xcode 6.3 Beta izboljšal Swiftovo delovanje algoritma GEMM - algoritem, vezan na pomnilnik, z zaporednim dostopom velikih nizov - za faktor 1,4. Začetna izvedba FFT - algoritem, vezan na pomnilnik z naključnim dostopom do velikih nizov - je imela 2,6-kratno izboljšanje zmogljivosti.

Nadaljnje izboljšave so opazili v Swiftu z uporabo najboljših praks, kar je povzročilo 8,5-kratno povečanje zmogljivosti algoritma FFT (s čimer je C ++ dosegel le 1,1-kratno povečanje zmogljivosti). Izboljšave so Swiftu prav tako omogočile, da je C ++ za Mandelbrotov algoritem presegel zgolj 1,03.

Swift je tako za algoritme FFT kot Mandelbrot skoraj enak C ++. Po navedbah Primate Labs zmogljivost algoritma GEMM kaže, da prevajalnik Swift ne more vektorizirati kode, ki ga lahko prevajalnik C ++, - enostaven dobiček v zmogljivosti, ki bi ga lahko dosegli v naslednji različici Swifta.

7. Manj trkov imen pri odprtokodnih projektih

Ena od težav, ki je prizadela kodo Objective-C, je pomanjkanje formalne podpore za imenske prostore, ki je bila rešitev za trke kodnih datotek v C ++. Ko pride do tega trka z imeni v Objective-C, gre za napako povezovalca in aplikacija se ne more zagnati. Rešitve obstajajo, vendar imajo potencialne pasti. Običajna konvencija je, da z dvo- ali tričrkovnimi predponami razlikujemo kodo Objective-C, ki jo na primer Facebook napiše, v primerjavi z vašo kodo.

Swift ponuja implicitne imenske prostore, ki omogočajo, da ista kodna datoteka obstaja v več projektih, ne da bi pri tem prišlo do okvare gradnje in ni zahteval imen, kot sta NSString (naslednji korak - podjetje Steva Jobsa po odpovedi iz Applea) ali CGPoint (Core Graphics). Ta funkcija Swifta na koncu ohranja programerje bolj produktivne in pomeni, da jim ni treba voditi knjigovodstva, ki obstaja v Objective-C. Swiftov vpliv lahko vidite s preprostimi imeni, kot so Array, Dictionary in String namesto NSArray, NSDictionary in NSString, ki so se rodila iz pomanjkanja imenskih prostorov v Objective-C.

Pri Swiftu prostori imen temeljijo na cilju, ki mu pripada kodna datoteka. To pomeni, da lahko programerji razlikujejo razrede ali vrednosti z uporabo identifikatorja imenskega prostora. Ta sprememba v Swiftu je velika. Zelo olajša vključitev odprtokodnih projektov, ogrodja in knjižnic v kodo. Imenski prostori različnim podjetjem programske opreme omogočajo ustvarjanje enakih imen kodnih datotek, ne da bi se morali skrbeti za trčenja pri integraciji odprtokodnih projektov. Tako Facebook kot Apple lahko zdaj uporabljata datoteko objektne kode z imenom FlyingCar.swift brez napak ali napak pri gradnji.

8. Swift podpira dinamične knjižnice

Največja sprememba v Swiftu, ki ni bila deležna dovolj pozornosti, je prehod s statičnih knjižnic, ki se posodabljajo ob večjih izdajah (iOS 8, iOS 7 itd.), Na dinamične knjižnice. Dinamične knjižnice so izvedljivi kosi kode, ki jih je mogoče povezati z aplikacijo. Ta funkcija omogoča trenutnim aplikacijam Swift povezave z novejšimi različicami jezika Swift, ki se sčasoma razvija.

Razvijalec odda aplikacijo skupaj s knjižnicami, ki sta digitalno podpisane z razvojnim certifikatom, da se zagotovi celovitost (zdravo, NSA). To pomeni, da se Swift lahko razvija hitreje kot iOS, kar je zahteva sodobnega programskega jezika. Spremembe knjižnic lahko vključite v najnovejšo posodobitev aplikacije v App Store in vse preprosto deluje.

Dinamične knjižnice v iOS-u še nikoli niso bile podprte do uvedbe Swift in iOS 8, čeprav dinamične knjižnice že zelo dolgo podpirajo Mac. Dinamične knjižnice so zunaj izvršljive aplikacije, vendar so vključene v paket sveženj aplikacij, prenesen iz trgovine App Store. Zmanjša začetno velikost aplikacije, ko je naložena v pomnilnik, saj je zunanja koda povezana samo, kadar se uporablja.

Zmožnost odložitve nalaganja v mobilni aplikaciji ali vdelani aplikaciji v Apple Watch bo izboljšala zaznano zmogljivost uporabnika. To je eno od razlik, zaradi katerih se ekosistem iOS počuti bolj odziven. Apple se je osredotočil na nalaganje samo sredstev, virov in zdaj sproti prevajal in povezoval kodo. Nalaganje med letom zmanjša začetne čakalne dobe, dokler res ni potreben vir za prikaz na zaslonu.

$config[zx-auto] not found$config[zx-overlay] not found