Programavimas

„Swift“ prieš „Objective-C“: 10 priežasčių, kodėl ateitis palanki „Swift“

Programavimo kalbos nemiršta lengvai, tačiau vystymosi parduotuvės, kurios laikosi blėstančių paradigmų, miršta. Jei kuriate programas mobiliesiems įrenginiams ir netyrėte „Swift“, atkreipkite dėmesį: „Swift“ ne tik išstums „C tikslą“, kai reikia kurti programas „Mac“, „iPhone“, „iPad“, „Apple Watch“ ir būsimiems įrenginiams, tačiau jis taip pat pakeis „C“ įterptąjį programavimą „Apple“ platformose.

Dėl kelių pagrindinių funkcijų „Swift“ gali tapti de facto programavimo kalba kuriant įtraukiančias, greitai reaguojančias ir vartotojams skirtas programas per ateinančius metus.

Panašu, kad „Apple“ turi didelių „Swift“ tikslų. Jis optimizavo kompiliatorių našumui ir kalbai, kad jis būtų tobulinamas, o Swift dokumentuose nurodoma, kad „Swift“ yra „suprojektuota skalė nuo„ labas, pasaulis “iki visos operacinės sistemos“. Nors „Apple“ dar nėra išsakęs visų savo kalbos tikslų, „Xcode 6“, „Playgrounds“ ir „Swift“ pristatymai kartu rodo „Apple“ ketinimą padaryti programų kūrimą lengvesnį ir prieinamesnį nei su bet kuria kita kūrimo įrankių grandine.

Čia yra 10 priežasčių, kodėl reikia žengti pirmyn, kai dabar pradedate dirbti su „Swift“.

1. „Swift“ yra lengviau skaityti

„Objective-C“ kenčia nuo visų karpų, kurių galite tikėtis iš kalbos, sukurtos C pagrindu. Norėdami atskirti raktinius žodžius ir tipus nuo C tipų, „Objective-C“ pristatė naujus raktinius žodžius naudodami simbolį @ Kadangi „Swift“ nėra pastatytas ant C, jis gali suvienodinti visus raktinius žodžius ir pašalinti daugybę @ simbolių prieš kiekvieną „Objective-C“ tipo ar su objektu susijusį raktinį žodį.

„Swift drop“ palikimo konvencijos. Taigi jums nebereikia kabliataškių, kad baigtumėte eilutes ar skliaustus, kad apsuptumėte sąlygines išraiškas if / else sakiniuose. Dar vienas didelis pokytis yra tai, kad metodo iškvietimai nesisuka vienas kitam, o tai sukelia skliaustų pragarą - iki pasimatymo, [[[ ]]]. Metodų ir funkcijų iškvietimai sistemoje „Swift“ naudoja pramonėje standartinį kableliais atskirtą parametrų sąrašą skliaustuose. Rezultatas - švaresnė, išraiškingesnė kalba su supaprastinta sintakse ir gramatika.

Be kitų šiuolaikinių populiarių programavimo kalbų, „Swift“ kodas labiau primena natūralią anglų kalbą. Šis skaitomumas leidžia esamiems programuotojams iš „JavaScript“, „Java“, „Python“, „C #“ ir „C ++“ lengviau priimti „Swift“ į savo įrankių grandinę, skirtingai nei bjaurus ančiukas, kuris buvo „Objective-C“.

2. „Swift“ yra lengviau prižiūrėti

Pavojus yra tai, kas sulaiko Objective-C - kalba negali vystytis be C raidos. „C“ reikalauja, kad programuotojai išlaikytų du kodinius failus, kad pagerintų vykdomosios programos kūrimo laiką ir efektyvumą. Šis reikalavimas perkeliamas į „C tikslą“.

„Swift“ atsisako dviejų failų reikalavimo. „Xcode“ ir LLVM kompiliatorius gali išsiaiškinti priklausomybes ir automatiškai atlikti inkrementinius kūrimus „Swift 1.2“. Todėl pasikartojanti užduotis atskirti turinio lentelę (antraštės failą) nuo turinio (įgyvendinimo failo) yra praeitis. „Swift“ sujungia „Objective-C“ antraštę (.h) ir diegimo failus (.m) į vieną kodo failą (.swift).

Dviejų failų sistema „Objective-C“ numato papildomą darbą programuotojams - ir tai atitraukia programuotojus nuo didesnio vaizdo. Programoje „Objective-C“ turite rankiniu būdu sinchronizuoti metodų pavadinimus ir komentarus tarp failų, tikimės, kad naudosite standartinį susitarimą, tačiau tai nėra garantuojama, nebent komanda turi taisykles ir kodų peržiūras.

„Xcode“ ir LLVM kompiliatorius gali dirbti užkulisiuose, kad sumažintų programuotojo darbo krūvį. Naudodamiesi „Swift“ programuotojai mažiau tvarko buhalteriją ir gali skirti daugiau laiko programų logikos kūrimui. „Swift“ nutraukia katilų darbą ir pagerina palaikomų kodų, komentarų ir funkcijų kokybę.

3. Greitas yra saugesnis

Vienas įdomus „C-objektyvo“ aspektas yra būdas, kaip elgtis su rodyklėmis, ypač nulinėmis (nulinėmis) rodyklėmis. Programoje „Objective-C“ nieko nevyksta, jei bandote iškviesti metodą su rodiklio kintamuoju, kuris yra nulis (neinicijuotas). Kodo išraiška ar eilutė tampa neveikia (neveikia), ir nors gali atrodyti naudinga, kad ji nesutrūktų, tai buvo didžiulis klaidų šaltinis. „No-op“ lemia nenuspėjamą elgesį, kuris yra programuotojų, bandančių surasti ir pašalinti atsitiktinę avariją ar sustabdyti nepastovų elgesį, priešas.

Pasirenkami tipai nulinės neprivalomos vertės galimybę labai aiškiai parodo „Swift“ kode, o tai reiškia, kad rašant blogą kodą jis gali sugeneruoti kompiliatoriaus klaidą. Tai sukuria trumpą grįžtamąjį ryšį ir leidžia programuotojams koduoti tyčia. Problemas galima išspręsti rašant kodą, o tai žymiai sumažina laiką ir pinigus, kuriuos išleisite taisydami klaidas, susijusias su „Objective-C“ žymeklių logika.

Tradiciškai, taikant „Objective-C“, jei reikšmė buvo grąžinta iš metodo, programuotojo atsakomybė buvo dokumentuoti grąžinamo rodyklės kintamojo elgesį (naudojant komentarus ir metodų pavadinimo principus). Programoje „Swift“ pasirinktiniai tipai ir reikšmių tipai metodo apibrėžime aiškiai nurodo, ar reikšmė egzistuoja, ar ji gali būti neprivaloma (tai yra, vertė gali būti arba ji gali būti lygi nuliui).

Jei norite numatyti elgseną, „Swift“ suaktyvina vykdymo laiko gedimą, jei naudojamas nulis pasirenkamasis kintamasis. Ši avarija suteikia nuoseklų elgesį, kuris palengvina klaidų taisymo procesą, nes tai priverčia programuotoją nedelsiant išspręsti problemą. „Swift“ vykdymo metu gedimas sustos kodo eilutėje, kur buvo naudojamas nulis pasirinktinis kintamasis. Tai reiškia, kad klaida bus ištaisyta anksčiau arba bus visiškai išvengta „Swift“ kode.

4. „Swift“ yra vienijamas su atminties valdymu

„Swift“ suvienija kalbą taip, kaip niekada neturėjo „Objective-C“. Automatinis nuorodų skaičiavimas (ARC) palaikomas visuose procedūriniuose ir objektuose kodų keliuose. „Objective-C“ ARC palaikomas „Cocoa“ API ir objektuose; tačiau jis negalimas procedūriniam C kodui ir API, pvz., „Core Graphics“. Tai reiškia, kad tampa programuotojo atsakomybe tvarkyti atmintį, kai dirbama su „Core Graphics“ API ir kitomis „iOS“ pasiekiamomis žemo lygio API. Didžiulės atminties nutekėjimo, kurį programuotojas gali patekti į „Objective-C“, neįmanoma „Swift“.

Programuotojui nereikėtų galvoti apie kiekvieno jo sukurto skaitmeninio objekto atmintį. Kadangi ARC tvarko visą atminties valdymą kompiliavimo metu, proto galia, kuri būtų skirta atminties valdymui, gali būti sutelkta į pagrindinę programų logiką ir naujas funkcijas. Kadangi „Swift“ ARC veikia per procedūrinį ir į objektą orientuotą kodą, programuotojams nebereikia jokių psichinių kontekstinių jungiklių, net ir tada, kai jie rašo kodą, paliečiantį žemesnio lygio API - tai yra dabartinės „Objective-C“ versijos problema.

Automatinis ir didelio našumo atminties valdymas yra išspręsta problema, o „Apple“ įrodė, kad tai gali padidinti produktyvumą. Kitas šalutinis poveikis yra tas, kad „Objective-C“ ir „Swift“ nekenčia šiukšlių surinkėjas, kuris valo nepanaudotą atmintį, pvz., „Java“, „Go“ ar „C #“. Tai yra svarbus bet kurios programavimo kalbos, kuri bus naudojama reaguojančiai grafikai ir vartotojo įvestims, veiksnys, ypač liečiamame įrenginyje, tokiame kaip „iPhone“, „Apple Watch“ ar „iPad“ (kur atsilikimas vargina ir priverčia vartotojus suvokti, kad programa yra sugadinta).

5. „Swift“ reikia mažiau kodo

„Swift“ sumažina kodo kiekį, reikalingą pasikartojantiems sakiniams ir manipuliacijoms eilutėmis. Programoje „Objective-C“ darbas su teksto eilutėmis yra labai paprastas ir norint sujungti dvi informacijos dalis reikia atlikti daugybę veiksmų. „Swift“ priima šiuolaikines programavimo kalbos funkcijas, pvz., Prideda dvi eilutes kartu su „+“ operatoriumi, kurio trūksta C objektyve. Parama derinant tokius simbolius ir eiles yra labai svarbi bet kuriai programavimo kalbai, rodančiai tekstą vartotojui ekrane.

„Swift“ tipo sistema sumažina kodo sakinių sudėtingumą - nes kompiliatorius gali išsiaiškinti tipus. Pavyzdžiui, „Objective-C“ reikalauja, kad programuotojai įsimintų specialius eilutės žetonus (% s, % d, %@) ir pateikite kableliais atskirtą kintamųjų sąrašą, kuris pakeistų kiekvieną prieigos raktą. „Swift“ palaiko eilučių interpoliaciją, todėl nebereikia įsiminti žetonų ir leidžia programuotojams įterpti kintamuosius tiesiai į vartotojui skirtą eilutę, pvz., Etiketę ar mygtuko pavadinimą. Tipo išvadų sistema ir eilučių interpoliacija sušvelnina bendrą avarijų šaltinį, kuris yra įprastas C objekte.

Naudojant „Objective-C“, sugadinus užsakymą arba naudojant netinkamą eilutės prieigos raktą, programa sugenda. Čia „Swift“ vėl atleidžia jus nuo buhalterinės apskaitos, verčiant į mažiau rašytino kodo (kodas, kuriame dabar mažiau klaidų), nes jis palaiko teksto eilučių ir duomenų valdymą.

6. „Swift“ yra greitesnis

„C“ tradicijų atsisakymas žymiai pagerino „Swift“ po variklio dangčiu. „Swift“ kodo našumo etalonai ir toliau nurodo „Apple“ atsidavimą tobulinti greitį, kuriuo „Swift“ gali vykdyti programų logiką.

Anot „Primate Labs“, populiaraus „GeekBench“ našumo įrankio kūrėjų, „Swift“ 2014 m. Gruodžio mėn. Artėjo prie C ++ charakteristikų, susijusių su skaičiavimais susijusioms užduotims, naudodamas „Mandelbrot“ algoritmą.

2015 m. Vasario mėnesį „Primate Labs“ atrado, kad „Xcode 6.3 Beta“ pagerino „Swift“ GEMM algoritmo - su atmintimi susieto algoritmo su nuoseklios didelių masyvų prieigos - našumą 1,4 karto. Pradinis FFT įgyvendinimas - su atmintimi susietas algoritmas su atsitiktine didelių masyvų prieiga - pagerino našumą 2,6 karto.

Taikant geriausią praktiką buvo pastebėti tolesni „Swift“ patobulinimai, todėl FFT algoritmo našumas padidėjo 8,5 karto (C ++ liko tik 1,1 karto našumas). Patobulinimai taip pat leido „Swift“ aplenkti Mandelbrot algoritmo C ++ tik 1,03 koeficientu.

Tiek „FFT“, tiek „Mandelbrot“ algoritmams „Swift“ beveik prilygsta C ++ lygiui. Pasak „Primate Labs“, GEMM algoritmo našumas rodo, kad „Swift“ kompiliatorius negali vektorizuoti kodo, kurį gali atlikti C ++ kompiliatorius - tai lengvas našumas, kurį galima pasiekti kitoje „Swift“ versijoje.

7. Mažiau vardų susidūrimų su atvirojo kodo projektais

Viena problema, kuri kankino „Objective-C“ kodą, yra oficialios paramos trūkumas vardų sritims, o tai buvo „C ++“ sprendimas koduojant failų pavadinimus. Kai „Objective-C“ įvyksta šio vardo susidūrimas, tai yra susiejimo klaida ir programa negali veikti. Sprendimai egzistuoja, tačiau jie gali turėti spąstų. Įprasta sutartis yra naudoti dviejų ar trijų raidžių priešdėlius, kad būtų galima atskirti „Objective-C“ kodą, kurį, tarkime, parašė „Facebook“, palyginti su jūsų paties kodu.

„Swift“ suteikia numanomų vardų sritis, leidžiančias tam pačiam kodo failui egzistuoti keliuose projektuose, nesukeliant sukūrimo gedimo ir reikalaujant tokių vardų kaip „NSString“ (kitas žingsnis - Steve'o Jobso įmonė atleidus iš „Apple“) ar „CGPoint“ („Core Graphics“). Galų gale ši „Swift“ funkcija palaiko programuotojus produktyvesniais ir reiškia, kad jiems nereikia tvarkyti buhalterijos, kuri egzistuoja „Objective-C“. Galite pamatyti „Swift“ įtaką paprastais pavadinimais, pvz., „Masyvas“, „Žodynas“ ir „String“, o ne „NSArray“, „NSDictionary“ ir „NSString“, kurie atsirado dėl to, kad „Objective-C“ trūksta vardų.

Naudojant „Swift“, vardų sritys yra pagrįstos taikiniu, kuriam priklauso kodo failas. Tai reiškia, kad programuotojai gali atskirti klases ar reikšmes naudodami vardų srities identifikatorių. Šis „Swift“ pokytis yra didžiulis. Tai labai palengvina atvirojo kodo projektų, sistemų ir bibliotekų įtraukimą į savo kodą. Vardų erdvės suteikia galimybę įvairioms programinės įrangos įmonėms sukurti tuos pačius kodų failų pavadinimus, nesijaudinant dėl ​​susidūrimų integruojant atvirojo kodo projektus. Dabar tiek „Facebook“, tiek „Apple“ gali naudoti objekto kodo failą, vadinamą FlyingCar.swift, be jokių klaidų ar sukūrimo gedimų.

8. „Swift“ palaiko dinamines bibliotekas

Didžiausias „Swift“ pakeitimas, kuriam nebuvo skiriama pakankamai dėmesio, yra perėjimas nuo statinių bibliotekų, kurios atnaujinamos svarbiausiuose leidimuose („iOS 8“, „iOS 7“ ir pan.), Prie dinamiškų bibliotekų. Dinaminės bibliotekos yra vykdomi kodo gabalai, kuriuos galima susieti su programa. Ši funkcija leidžia dabartinėms „Swift“ programoms susieti naujesnes „Swift“ kalbos versijas, kai ji laikui bėgant tobulėja.

Kūrėjas pateikia programą kartu su bibliotekomis, kurios abi yra skaitmeniniu būdu pasirašytos su kūrimo sertifikatu, kad būtų užtikrintas vientisumas (labas, NSA). Tai reiškia, kad „Swift“ gali vystytis greičiau nei „iOS“, o tai yra šiuolaikinės programavimo kalbos reikalavimas. Bibliotekų pakeitimus galima įtraukti į naujausią programos atnaujinimą „App Store“, ir viskas tiesiog veikia.

Dinaminės bibliotekos niekada nebuvo palaikomos „iOS“, kol nebuvo paleistos „Swift“ ir „iOS 8“, nors dinaminės bibliotekos „Mac“ palaikomos labai ilgai. Dinaminės bibliotekos nėra programos vykdomojo failo išorės, tačiau yra įtrauktos į programų paketą, atsisiųstą iš „App Store“. Tai sumažina pradinį programos dydį, kai ji įkeliama į atmintį, nes išorinis kodas susiejamas tik tada, kai naudojamas.

Galimybė atidėti įkėlimą į programą mobiliesiems ar įterptą programą „Apple Watch“ pagerins suvokiamą vartotojo našumą. Tai yra vienas iš skirtumų, dėl kurių „iOS“ ekosistema tampa jautresnė. „Apple“ daugiausia dėmesio skyrė tik turto, išteklių įkėlimui, o dabar sudarė ir susiejo kodą. Skrydžio apkrova sumažina pradinį laukimo laiką, kol iš tikrųjų reikės išteklių, kad būtų galima parodyti ekrane.