Programovanie

Swift vs. Objective-C: 10 dôvodov, prečo budúcnosť uprednostňuje Swift

Programovacie jazyky neumierajú ľahko, ale vývojové obchody, ktoré sa držia slabnúcich paradigiem, áno. Ak vyvíjate aplikácie pre mobilné zariadenia a nevyskúšali ste Swift, všimnite si: Swift nielenže nahradí Objective-C, pokiaľ ide o vývoj aplikácií pre Mac, iPhone, iPad, Apple Watch a ďalšie zariadenia, ale tiež nahradí C pre zabudované programovanie na platformách Apple.

Vďaka niekoľkým kľúčovým funkciám má Swift potenciál stať sa de facto programovacím jazykom pre vytváranie pohlcujúcich, pohotových a spotrebiteľsky orientovaných aplikácií na ďalšie roky.

Zdá sa, že Apple má pre Swift veľké ciele. Optimalizoval výkon kompilátora a jazyk pre vývoj a naráža na to, že Swift je v dokumentácii Swiftu „navrhnutý na škálovanie od„ ahoj, sveta “po celý operačný systém. Aj keď spoločnosť Apple ešte neuviedla všetky svoje ciele pre daný jazyk, uvedenie produktov Xcode 6, Playgrounds a Swift spolu signalizuje zámer spoločnosti Apple uľahčiť a sprístupniť vývoj aplikácií ako v prípade iného reťazca vývojových nástrojov.

Tu je 10 dôvodov, prečo ísť vpred a začať pracovať so Swiftom už teraz.

1. Swift sa číta ľahšie

Objective-C trpí všetkými bradavicami, ktoré by ste čakali od jazyka postaveného na jazyku C. Na odlíšenie kľúčových slov a typov od typov C predstavil Objective-C nové kľúčové slová pomocou symbolu @. Pretože Swift nie je postavený na C, môže zjednotiť všetky kľúčové slová a odstrániť početné symboly @ pred každým typom Objective-C alebo kľúčovým slovom súvisiacim s objektom.

Swift upustil od starších konvencií. Už teda nepotrebujete bodkočiarky na ukončenie riadkov alebo zátvorky na obklopenie podmienených výrazov vo vnútri príkazov if / else. Ďalšou veľkou zmenou je, že volania metód sa nestavajú do seba, čo vedie k pekelnej zátvorke - zbohom, [[[ ]]]. Volania metód a funkcií v aplikácii Swift používajú v zátvorkách štandardný zoznam parametrov oddelených čiarkami. Výsledkom je čistejší a expresívnejší jazyk so zjednodušenou syntaxou a gramatikou.

Kód Swift sa okrem iných moderných populárnych programovacích jazykov viac podobá prirodzenej angličtine. Táto čitateľnosť uľahčuje existujúcim programátorom z jazykov JavaScript, Java, Python, C # a C ++ prijať Swift do svojho reťazca nástrojov - na rozdiel od škaredého káčatka, ktorým bol Objective-C.

2. Swift sa ľahšie udržiava

Ciele C drží späť Legacy - jazyk sa nemôže vyvíjať bez vývoja C. C vyžaduje, aby programátori udržiavali dva súbory kódu, aby sa zlepšil čas potrebný na zostavenie a efektívnosť vytvorenia spustiteľnej aplikácie, čo sa prenáša na Objective-C.

Swift zruší požiadavku na dva súbory. Xcode a kompilátor LLVM môžu v systéme Swift 1.2 zistiť závislosti a vykonávať automatické prírastkové zostavenia. Výsledkom je, že opakovaná úloha oddeliť obsah (hlavičkový súbor) od tela (implementačný súbor) je minulosťou. Swift kombinuje hlavičku Objective-C (.h) a implementačné súbory (.m) do jedného súboru s kódom (.swift).

Systém dvoch súborov Objective-C ukladá programátorom ďalšiu prácu - a práve táto práca odvádza pozornosť programátorov od širšieho obrazu. V Objective-C musíte ručne synchronizovať názvy metód a komentáre medzi súbormi, dúfajme, že použijete štandardnú konvenciu, ale nie je to zaručené, pokiaľ tím nemá zavedené pravidlá a kontroly kódu.

Xcode a kompilátor LLVM môžu pracovať v zákulisí, aby znížili záťaž programátora. S programom Swift programátori robia menej účtovníctva a môžu tráviť viac času vytváraním logiky aplikácií. Swift preruší prácu so štandardnými informáciami a zlepší kvalitu podporovaných kódov, komentárov a funkcií.

3. Swift je bezpečnejší

Jedným zaujímavým aspektom cieľa C je spôsob, akým sa s ukazovateľmi - najmä s nulovými (nulovými) ukazovateľmi - zaobchádza. V Objective-C sa nič nestane, ak sa pokúsite zavolať metódu s ukazovateľovou premennou, ktorá je nulová (neinicializovaná). Výraz alebo riadok kódu sa stáva neoperáciou (no-op) a hoci by sa mohlo zdať prospešné, že nezlyhá, bol obrovským zdrojom chýb. No-op vedie k nepredvídateľnému správaniu, ktoré je nepriateľom programátorov, ktorí sa snažia nájsť a opraviť náhodný pád alebo zastaviť nepravidelné správanie.

Vďaka voliteľným typom je v kóde Swift veľmi jasná možnosť nulovej voliteľnej hodnoty, čo znamená, že pri písaní chybného kódu môže vygenerovať chybu kompilátora. Toto vytvára krátku spätnú väzbu a umožňuje programátorom kódovať zámerne. Problémy je možné opraviť už pri písaní kódu, čo výrazne znižuje čas a peniaze, ktoré strávite pri opravovaní chýb súvisiacich s logikou ukazovateľa z Objective-C.

Tradične v prípade Objective-C, ak bola hodnota vrátená z metódy, bolo zodpovednosťou programátora zdokumentovať správanie vrátenej premennej ukazovateľa (pomocou komentárov a konvencií pomenovania metód). V Swifte voliteľné typy a typy hodnôt výslovne objasňujú v definícii metódy, či hodnota existuje alebo či má potenciál byť voliteľná (to znamená, že hodnota môže existovať alebo môže byť nulová).

Ak chcete poskytnúť predvídateľné správanie, program Swift spustí runtime zlyhanie, ak sa použije nulová voliteľná premenná. Toto zlyhanie poskytuje konzistentné správanie, čo uľahčuje proces opravy chýb, pretože núti programátora, aby problém okamžite odstránil. Zlyhanie runtime modulu Swift sa zastaví na riadku kódu, kde bola použitá nulová voliteľná premenná. To znamená, že chyba bude opravená skôr alebo sa jej úplne zabráni v kóde Swift.

4. Swift je zjednotený so správou pamäte

Swift zjednocuje jazyk spôsobom, aký Objective-C nikdy nemal. Podpora automatického počítania referencií (ARC) je úplná v rámci procedurálnych a objektovo orientovaných kódových ciest. V Objective-C je ARC podporovaná v rámci kakaových API a objektovo orientovaného kódu; nie je však k dispozícii pre procedurálny C kód a API ako Core Graphics. To znamená, že programátor bude zodpovedný za správu pamäte pri práci s rozhraniami Core Graphics API a inými nízkoúrovňovými API dostupnými v systéme iOS. Obrovské úniky pamäte, ktoré môže mať programátor v Objective-C, sú v Swifte nemožné.

Programátor by nemal myslieť na pamäť pre každý digitálny objekt, ktorý vytvorí. Pretože ARC spracováva všetku správu pamäte v čase kompilácie, inteligenčný výkon, ktorý by šiel k správe pamäte, môže byť namiesto toho zameraný na základnú logiku aplikácie a nové funkcie. Pretože ARC v Swifte funguje naprieč procedurálnym aj objektovo orientovaným kódom, nevyžaduje pre programátorov žiadne ďalšie prepínače mentálneho kontextu, aj keď píšu kód, ktorý sa dotýka API nižšej úrovne - problém s aktuálnou verziou Objective-C.

Automatická a vysoko výkonná správa pamäte je problém, ktorý sa vyriešil a spoločnosť Apple dokázala, že môže zvýšiť produktivitu. Ďalším vedľajším účinkom je, že objekty Objective-C aj Swift netrpia tým, že by program Garbage Collector spustil čistenie nevyužitej pamäte, napríklad Java, Go alebo C #. To je dôležitý faktor pre akýkoľvek programovací jazyk, ktorý sa použije na responzívnu grafiku a vstupy používateľov, najmä na dotykových zariadeniach, ako sú iPhone, Apple Watch alebo iPad (kde je oneskorenie frustrujúce a umožňuje používateľom vnímať porušenie aplikácie).

5. Swift vyžaduje menej kódu

Swift znižuje množstvo kódu, ktoré je potrebné na opakujúce sa príkazy a manipuláciu s reťazcami. V Objective-C je práca s textovými reťazcami veľmi podrobná a vyžaduje veľa krokov na spojenie dvoch informácií. Swift prijíma moderné funkcie programovacieho jazyka, ako je pridanie dvoch reťazcov spolu s operátorom „+“, ktorý v Objective-C chýba. Podpora kombinovania znakov a reťazcov, ako je táto, je základom pre akýkoľvek programovací jazyk, ktorý zobrazuje text používateľovi na obrazovke.

Systém typov v aplikácii Swift znižuje zložitosť príkazov kódu - pretože kompilátor dokáže zistiť typy. Napríklad Cieľ-C vyžaduje, aby si programátori pamätali špeciálne reťazcové tokeny (% s, % d, %@) a poskytnite zoznam premenných oddelených čiarkami, ktoré nahradia jednotlivé tokeny. Swift podporuje interpoláciu reťazcov, čo eliminuje potrebu pamätať si tokeny a umožňuje programátorom vkladať premenné priamo do reťazca orientovaného na používateľa, napríklad štítok alebo názov tlačidla. Systém odvodzovania typov a interpolácia reťazcov zmierňujú spoločný zdroj zlyhaní, ktoré sú bežné v Objective-C.

V prípade Objective-C spôsobuje narušenie objednávky alebo použitie nesprávneho reťazcového tokenu zlyhanie aplikácie. Tu vás Swift opäť odbremení od práce v účtovníctve a prekladá do menšieho množstva kódu na zápis (kód, ktorý je teraz menej náchylný na chyby) kvôli svojej priamej podpore pre manipuláciu s textovými reťazcami a dátami.

6. Swift je rýchlejší

Upustenie od starších konvencií C výrazne zlepšilo Swift pod kapotou. Benchmarky pre výkon kódu Swift naďalej poukazujú na odhodlanie spoločnosti Apple zlepšovať rýchlosť, akou dokáže Swift spúšťať logiku aplikácií.

Podľa spoločnosti Primate Labs, tvorcov populárneho výkonového nástroja GeekBench, sa Swift v decembri 2014 blížil k výkonovým charakteristikám C ++ pre úlohy spojené s výpočtom pomocou algoritmu Mandelbrot.

Vo februári 2015 spoločnosť Primate Labs zistila, že Xcode 6.3 Beta vylepšil Swiftov výkon algoritmu GEMM - algoritmu viazaného na pamäť so sekvenčným prístupom k veľkým poliam - o faktor 1,4. Počiatočná implementácia FFT - algoritmus viazaný na pamäť s náhodným prístupom k veľkým poliam - mala 2,6-násobné zlepšenie výkonu.

Ďalšie vylepšenia boli pozorované v aplikácii Swift použitím najlepších postupov, čo malo za následok 8,5-násobné zvýšenie výkonu algoritmu FFT (ponechanie jazyka C ++ s iba 1,1-násobným zvýšením výkonu). Vylepšenia tiež umožnili spoločnosti Swift prekonať C ++ pre algoritmus Mandelbrot iba o faktor 1,03.

Swift je takmer na rovnakej úrovni ako C ++ pre algoritmy FFT aj Mandelbrot. Podľa Primate Labs výkonnosť algoritmu GEMM naznačuje, že kompilátor Swift nemôže vektorizovať kód, ktorý dokáže kompilátor C ++ - ľahký nárast výkonu, ktorý by sa dal dosiahnuť v ďalšej verzii Swiftu.

7. Menej kolízií s projektmi typu open source

Jedným z problémov, ktoré trápili kód Objective-C, je jeho nedostatok formálnej podpory pre menné priestory, čo bolo riešenie C ++ pri kolíziách názvov súborov. Keď k tejto kolízii názvu dôjde v Objective-C, jedná sa o chybu linkera a aplikáciu nemožno spustiť. Riešenia existujú, ale majú potenciálne úskalia. Bežnou konvenciou je použitie dvoj- alebo trojpísmenových predpôn na odlíšenie kódu Objective-C, ktorý je napísaný povedzme Facebookom oproti vášmu vlastnému kódu.

Swift poskytuje implicitné menné priestory, ktoré umožňujú existenciu rovnakého súboru s kódom vo viacerých projektoch bez toho, aby došlo k zlyhaniu zostavenia a vyžadovali názvy ako NSString (ďalší krok - spoločnosť Steva Jobsa po prepustení z Apple) alebo CGPoint (Core Graphics). Táto funkcia vo Swifte v konečnom dôsledku zvyšuje produktivitu programátorov a znamená, že nemusia robiť účtovníctvo, ktoré existuje v Objective-C. Vplyv Swiftu môžete vidieť pomocou jednoduchých mien ako Array, Dictionary a String namiesto NSArray, NSDictionary a NSString, ktoré sa zrodili z nedostatku menných priestorov v Objective-C.

V prípade aplikácie Swift sú menné priestory založené na cieli, ku ktorému patrí súbor s kódom. To znamená, že programátori môžu rozlišovať triedy alebo hodnoty pomocou identifikátora menného priestoru. Táto zmena v Swifte je obrovská. Veľmi uľahčuje začlenenie projektov, rámcov a knižníc otvoreného zdroja do vášho kódu. Menné priestory umožňujú rôznym softvérovým spoločnostiam vytvárať rovnaké názvy súborov s kódom bez obáv z kolízií pri integrácii open source projektov. Teraz môžu Facebook aj Apple používať súbor s objektovým kódom s názvom FlyingCar.swift bez akýchkoľvek chýb alebo zlyhaní zostavenia.

8. Swift podporuje dynamické knižnice

Najväčšou zmenou v Swifte, ktorej sa nevenovala dostatočná pozornosť, je prechod zo statických knižníc, ktoré sa aktualizujú v hlavných vydaniach (iOS 8, iOS 7 atď.), Na dynamické knižnice. Dynamické knižnice sú spustiteľné bloky kódu, ktoré je možné prepojiť s aplikáciou. Táto funkcia umožňuje prepojenie súčasných aplikácií Swift s novšími verziami jazyka Swift, ktorý sa časom vyvíja.

Vývojár odošle aplikáciu spolu s knižnicami, ktoré sú na zaistenie integrity digitálne podpísané vývojovým certifikátom (ahoj, NSA). To znamená, že Swift sa môže vyvíjať rýchlejšie ako iOS, čo je požiadavka na moderný programovací jazyk. Zmeny v knižniciach je možné zahrnúť do najnovšej aktualizácie aplikácie v App Store a všetko jednoducho funguje.

Dynamické knižnice neboli nikdy podporované v systéme iOS až do uvedenia Swiftu a iOS 8, aj keď dynamické knižnice boli v systéme Mac podporované veľmi dlho. Dynamické knižnice sú externé k spustiteľnému programu aplikácie, ale sú súčasťou balíka aplikácií stiahnutého z App Store. Znižuje počiatočnú veľkosť aplikácie pri načítaní do pamäte, pretože externý kód je prepojený iba pri použití.

Schopnosť odložiť načítanie v mobilnej alebo vloženej aplikácii na Apple Watch zlepší vnímaný výkon pre používateľa. Toto je jeden z rozdielov, vďaka ktorým sa ekosystém iOS cíti citlivejšie. Apple sa zameral na načítanie iba aktív, zdrojov a teraz kompilovaný a prepojený kód za chodu. Načítanie za behu skracuje počiatočné čakacie doby, kým je na zobrazenie na obrazovke skutočne potrebný zdroj.

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