Swift kontra C-objektív: A felkapott jövevény és a dinoszaurusz ellen

A Swift rövid története

Emlékszem, milyen döntő jelentőségű volt, amikor a Swiftet bemutatták az Apple 2014-es WWDC-jén (Worldwide Developers Conference). A város beszéde volt, és minden fejlesztő, akivel dolgoztam, alig várta, hogy kipróbálja. Az iOS közösség zümmögött, és sok izgalom volt az új nyelv körül.

Azért fejlesztették ki, hogy folytasson néhány olyan célt, amelyet a C-objektívben láttunk, mint például a bővíthető programozás. De a protokoll-orientált tervezéssel a kódolás más megközelítése felé mozdult el, és a statikus gépeléssel fokozott biztonságot nyújtott.

Hatalmas sláger volt, és a bevezetés utáni években látta növekedési égboltját. Ez volt a legkedveltebb programnyelv 2015-ben, a második legkedveltebb 2016-ban, a 11. legnépszerűbb programozási nyelv 2017-ben, felülmúlva az Objective-C-t, és 2018-ban az Objective-C-t is legyőzte.

A Swift az Apple fogadása arra is, hogy megnyeri az újoncokat az iOS fejlesztőként. A remény az, hogy az új fejlesztők megtanulják a nyelvet, és iOS-alkalmazások készítésére használják fel. Ez aztán növeli az alkalmazásbolt ökoszisztémáját. Mivel a Swift az iOS alkalmazásokkal való működésre van optimalizálva, ez biztosítja, hogy az írandó alkalmazások kiváló minőségűek legyenek.

A gyors népszerűség csak tovább növekszik, különösen a kisebb alkalmazások és az induló vállalkozások esetében. A különbség a Swift és az Objective-C között csak tovább növekszik. A jövő fényes ennek a fiatal nyelvnek.

Az Objective-C rövid története

Az Objective-C egy objektum-orientált programozási nyelv, amely a C felső része, amint azt a nyelv neve is felfedheti. Ez azt jelenti, hogy bármely érvényes C program lefordít egy Objective-C fordítóval. Minden nem objektum-orientált szintaxisát C-ből, objektum-orientált szintaxisát pedig a SmallTalk-ból nyeri. 1984-ben fejlesztették ki, így ideje volt éretté válni nyelvként, és sokkal stabilabb, mint a Swift.

A legtöbb ember ismeri az Objective-C-t, mint azt a nyelvet, amelyet az iPhone alkalmazások fejlesztésére használnak, de a történelem ennél sokkal mélyebbre nyúlik vissza. Javaslom, hogy olvassa el ezt a cikket a mélyebb áttekintés érdekében.

A Swift erősségei

A Swift óriási népszerűségnek örvend néhány fő okból. Először is, sok nagyszerű fejlesztőeszközt kínál az Apple, amely a Swift-mel együtt működik. Az egyik személyes kedvencem a Playground, amely csak a Swifttal kompatibilis. Az Apple 2016-ban mutatta be a Playgrounds alkalmazást. Ezeket a kódolás elsajátításának egyik módjaként mutatták be, de más okból szerettem őket.

A mobil fejlesztésnek mindig több akadálya volt, mint a webes fejlesztésének. Szüksége van egy szimulátorra, általában egy saját integrált fejlesztői környezetre (IDE), és egy egész projektet kell felállítania, hogy teszteljen néhány apró prototípust. Az Apple esetében fejlesztői fiókra is szükséged van. A Playgrounds-ban az a szép, hogy ezt megkerüli. Szüksége van Xcode-ra vagy a Playgrounds alkalmazásra, de ez minden. És azonnal elkezdheti a kódolást és a kód fordítását.

A Swift másik hatalmas előnye, hogy nyílt forráskódú. Ha valaha is elgondolkodott azon, hogyan működött a programnyelv a motorháztető alatt, akkor megnézheti maga is! Ez egy nagyszerű módja annak, hogy mélyebben megértsük a napi programozási nyelvet.

Megtisztelő említést érdemel egy szép segédprogram, amelyet csak a Swift, a Swift csomagkezelő érhet el. A Swift Package Manager egyszerűen függőségkezelő, amely integrálva van a Swift build rendszerbe. Ez semmiképpen sem játékváltó, mivel a CocoaPods és a Carthage már régen elvégezte ezt a munkát, de szükség esetén egy másik megoldás is elérhető.

Sok bizonyíték támasztja alá azt a tényt, hogy az Apple sokat tesz azért, hogy a Swift kívánatosabb legyen, mint az iOS fejlesztők számára kiválasztott programozási nyelv. Szép segédprogramokat és kiegészítő szolgáltatásokat hoznak létre, hogy az embereket a nyelv használatának megkezdésére csábítsák. Ez azt mutatja, hogy az Apple teljes erővel szorgalmazza a Swiftet.

Nyelvi jellemzők

Bemutassuk magának a nyelvnek néhány részletét. A Swift biztonságosabb statikus gépelése és opcionális használata miatt. Ha a kódban karakterláncra van szükség, akkor a Swift szolgáltatásai garantálják, hogy a kód karakterláncot kapjon, és ne egy másik típust, például int. Ez természetesen attól függ, hogy a nyelvet a szándékolt módon használja-e, és nem kényszeríti-e mindent kibontani.

A Swift másik nagy tulajdonsága a szintaxisa. Különösen az Objective-C-hez képest. A szintaxis leírására a legjobb szó a „tömör” lenne. Nincs szükség sem pontosvesszőre, sem saját hívásra, sem zárójelbe, ha a nyilatkozatok vannak. Olyan érzés, mintha sok olyan dolgot kihagyna, amire egyébként nincs is igazán szüksége. Jobbá teheti a sok kód beírásának folyamatát.

Vannak, akik szerint ez a fejlődés sebességének javulásához vezet, de ezt magam sem mondanám pontosan. Az objektumok folyamatos kibontásának szükségessége a Swifts típusbiztonságnak való megfelelés érdekében ellensúlyozza a tömörséggel járó fejlesztési előnyöket.

A Swift emellett rengeteg nagyszerű vezérlési folyamatot is kínál őrzéssel, ha engedélyezett, haladó kapcsoló utasításokkal, ismétléssel és halasztással. Tetszik az összes különféle lehetőség, mert ez lehetővé teszi az emberek számára, hogy a számukra értelmes módon irányítsák a kódjuk folyamatát. Sokan utálják a halasztókat, de szeretik az őröket és fordítva. Nem igazán számít, hogy mit szeretsz vagy nem, de a lehetőségek megvannak, és kódolhatsz a számodra legmegfelelőbb módon.

Nem tudom elfelejteni az összes olyan funkcionális programozási funkciót, mint a szűrés, a térkép és a kicsinyítés. Ez kiválóan alkalmas a gyűjtemények kezelésére, és gyakran hasznos.

A gyengeségek

A Swift egy fiatal nyelv, és ezzel együtt változik. A verziók közötti migráció egyszerűen fájdalmat okoz. Egy kisvállalkozásnál az Apple által biztosított migrációs eszköz hasznos lehet, és lefedheti a legtöbb esetet. Annál kevésbé lesz hasznos, minél több kódod van. Még rosszabb, ha a kódbázis tartalmazza az Objective-C és a Swift kódokat is, amelyek együttműködnek.

Legutóbbi társaságomnál a migrációs erőfeszítések egy dedikált csoportnak egy egész hétvégét vettek igénybe. Hétvégén kellett megtenniük, hogy ne ütközzenek össze konfliktusokkal más fejlesztőktől, akik kódot nyomnak. Ez hihetetlenül fájdalmas volt minden érintett számára.

Ennek oka az a tény, hogy a Swift nem stabil ABI. Ez azt jelenti, hogy a Swift újabb verziói nem működhetnek a Swift régebbi verzióival. Ez azt is jelenti, hogy a nyelv nem csomagolható össze az operációs rendszerrel. Ez nagy probléma azoknak a nagy alkalmazásokkal rendelkező vállalatoknak, amelyek aktívan harcolnak az alkalmazásméretek ellen, mert a Swiftet az alkalmazással együtt szállítják és növelik a méretét.

Más kérdés, hogy a Swift nem játszik jól az Xcode-val. Az Xcode nagyon szaggatottnak érzi magát, amikor a Swifttal dolgozik, és az automatikus kiegészítés egyszerűen nem működik néha. Ez furcsa, tekintve, hogy az Apple mennyire nyomja a Swiftet. Azt gondolhatja, hogy örömet szereznek a Swift és az Xcode használata közben.

A Swiftnek problémái vannak a karakterlánc-kezeléssel is, lásd a fenti kód példát. Pokolian nehézkes. A mindennapokban ez nem túl rossz. Az interjúk során ez játszik leginkább szerepet. Sajnos a Swift fejlesztői számára az interjúkészítők szeretnek olyan kérdéseket feltenni, amelyek vonósmanipulációt jelentenek. Ezt tetézi az a tény, hogy a húrok kezelési módja megváltozott a Swift verziói között.

A C-objektív erősségei

Az Objective-C egy rendkívül dinamikus, objektumorientált nyelv. Dinamikus addig a pontig, hogy a módszer invokációit futás közben felcserélheti olyan technikákkal, mint a Swizzling. Üzenetküldő paradigmájának köszönhetően képes ilyesmire. Ez lehetővé teszi, hogy az objektumok futás közben üzeneteket küldjenek más objektumoknak, hogy meghatározzák a meghívandó módszer meghívását.

Gyakorlatilag mit jelent ez? Nos, az egyik nagy előny az alkalmazkodóképesség futás közben. Ez azt jelenti, hogy hozzáférhetünk a privát API-khoz, vagy olyan dolgokat tehetünk, mint például az objektumok futás közbeni gúnyolása. Ez különösen hasznos lehet az egység tesztelésénél. Az OCMockhoz hasonló könyvtárak ezt még könnyebbé teszik, és nagyon bonyolult tesztbeállításokat tesznek lehetővé. A jó egységtesztek révén az alkalmazás stabilabb és megbízhatóbb lesz.

A stabilitásról szólva az Objective-C már régóta létezik, ami nagyon stabil nyelvvé teszi. A Swift segítségével olyan hibákba ütközik, amelyek meglehetősen meglepőek, és károsak lehetnek az alkalmazás stabilitása szempontjából. A fent linkelt példában ezt az összeomlást az alkalmazás kódolásához használt tényleges nyelv okozza, nem pedig az Ön által írt kód által létrehozott hiba miatt. Ez frusztráló lehet.

Az utolsó pont, amely bizonyos vállalatok számára fontosabb, a C és C ++ könyvtárakkal való kompatibilitás. Mivel az Objective-C a C szuperhalmaza, könnyen használható C és C ++ kód az Objective-C-vel. Akár az Objective-C ++ programot is használhatja, ha annyira hajlamosnak érzi magát. Ez akkor fontos, ha függ a harmadik féltől származó C és C ++ könyvtáraktól.

A gyengeségek

Az első fő panasz, amelyet az Objective-C-ről hallok, a szintaxis. Szakmai pályafutásomat az Objective-C használatával kezdtem, így nincsenek gondjaim vele. Bőbeszédű és kissé szokatlan a szögletes zárójelek használatával. De a szintaxissal kapcsolatos vélemények csak ilyenek, vélemények. Arra gondoltam, hogy felsorolom ezt a pontot, mivel ez az egyik első dolog, ami felmerül, amikor megemlíti az Objective-C-t.

Egy dologgal azonban egyetértek, hogy a blokk szintaxisa frusztráló. Van még egy weboldal is, amely a C-objektív blokkjainak rejtelmeit dekódolja. Valójában gyakran használom ezt a weboldalt referenciaként.

Az Objective-C legnagyobb problémája jelenleg az a tény, hogy egy nap az Apple elhagyhatja az Objective-C támogatását a Cocoa és más iOS könyvtárak létrehozásához használt közös könyvtárakkal. Mivel az Objective-C-t elsősorban iOS-alkalmazások létrehozására használják, ez a nyelv halálos kimenetele lenne. Ez azt is jelenti, hogy az iOS közösség újoncai félnek elkötelezni magukat az Objective-C elsajátítása mellett, mivel ez a jövőben már nem használható.

Térjünk vissza magához a nyelvhez. A nyelv dinamikus jellege miatt hajlamos a problémák hibakeresésére. Az a képesség, hogy üzeneteket küldjön nullára, és ne essen össze a szigorú gépelés hiánya mellett, néhány példa azokra a dolgokra, amelyek ilyen nehezen debugálható problémákhoz vezetnek.

A C-objektív sem fogja meg a kezét, amikor ezekről a dolgokról van szó. Bár jó, hogy az alkalmazás nem fog összeomlani, amikor üzenetet küld a nullára, furcsa állapotba hozhatja az alkalmazást. Nagyon nehéz az ilyen kérdéseket hibakeresni. Az a tény, hogy a Swift szigorú gépeléssel rendelkezik, és a kibontási opciók használata megakadályozza ezeket a dolgokat a fordítás idején.

Tanulnom kell a Swift-et vagy az Objective-C-t?

A válasz a legtöbb ember számára Swift lesz. Az Apple egyértelműen a Swift-et választja iOS-alkalmazások fejlesztő közösségének választott nyelveként. A Swift csak akkor lesz teljesítőképesebb, ha bevezetik az ABI stabilitást, és a Swift magával az operációs rendszerrel lesz csomagolva.

Ha iOS-fejlesztőként szeretne elhelyezkedni, a Swift lesz a megtanulni kívánt nyelv. A legtöbb induló és középszintű vállalat iOS-alkalmazásait teljesen Swift-ben írják. Ez azt jelenti, hogy több állásra jelentkezhet és interjút készíthet, ha megtanulja a Swiftet.

Még nagyobb vállalatoknál is, ahol az Objective-C-t még mindig erősen használják, interjúkat továbbra is lehet Swift-ben készíteni. Tehát megtanulhatja az Objective-C-t, amint csatlakozik a vállalathoz, és ne aggódjon attól, hogy az interjú előtt több tanulnivalóval terhelje meg magát.

Akkor érdemes megtanulnia az Objective-C-t, ha már egy induló vagy középszintű vállalatnál dolgozik, és egy nagyobb vállalathoz szeretne ugrani. Az Objective-C készségek speciális ismereteket és előnyt nyújtanak az interjú többi jelöltjéhez képest.

Tetszett, amit olvastál? Vessen egy pillantást néhány további cikkemre:

Tippek az első technológiai interjúhoz.

Technikai karrier indítása a semmiből.

Számítástechnikai diplomát kell szereznie?