Суифт срещу Цел-С: Набиращите тенденция срещу динозавъра

Кратка история на Суифт

Спомням си колко ключово беше, когато Swift беше представен на WWDC на Apple 2014 (Worldwide Developers Conference). Говореше се за града и всички разработчици, с които работех, нямаха търпение да го изпробват. Общността на iOS жужеше и имаше много вълнение около новия език.

Той е разработен, за да продължи някои концепции, които видяхме в Objective-C, като разширяемо програмиране. Но това доведе до различен подход към кодирането с протоколно ориентиран дизайн и повишена безопасност със статично писане.

Това беше огромен хит и през годините след въвеждането му се появи небесната му ракета. Това беше най-обичаният език за програмиране през 2015 г., вторият най-обичан през 2016 г., 11-ият най-популярен език за програмиране през 2017 г., побеждавайки Objective-C, а също така победи Objective-C през 2018 г.

Swift също е залог от Apple за спечелване на начинаещи, за да станат разработчици на iOS. Надеждата е, че новите разработчици ще научат езика и ще го използват за създаване на приложения за iOS. Това след това увеличава екосистемата на магазина за приложения. Тъй като Swift е оптимизиран за работа с приложения за iOS, това гарантира, че приложенията, които се записват, са с високо качество.

Популярността на Swifts продължава да нараства, особено за по-малките приложения и стартиращите компании. Разликата между Swift и Objective-C само ще продължи да нараства. Бъдещето е светло за този млад език.

Кратка история на Objective-C

Objective-C е обектно-ориентиран език за програмиране, който е надмножество на C, както може да разкрие името на езика. Това означава, че всяка валидна програма C ще се компилира с компилатор Objective-C. Той извлича целия си обектно-ориентиран синтаксис от C и обектно-ориентирания синтаксис от SmallTalk. Той е разработен през 1984 г., така че е имал време да узрее като език и е много по-стабилен от Суифт.

Повечето хора познават Objective-C като езика, който се използва за разработване на приложения за iPhone, но историята отива много по-дълбоко от това. Бих препоръчал да прочетете тази статия за по-задълбочен поглед.

Силните страни на Суифт

Суифт е нараснал неимоверно популярно поради няколко ключови причини. Първо, има много страхотни инструменти за разработка, които Apple е предоставила, за да работи съвместно със Swift. Един от личните ми фаворити е Playground, който е съвместим само със Swift. Apple представи Playgrounds през 2016 г. Те бяха представени като начин да се науча как да кодирам, но аз ги обичах по друга причина.

Мобилното развитие винаги е имало повече препятствия от уеб разработката. Имате нужда от симулатор, обикновено се нуждаете от собствена интегрирана среда за разработка (IDE) и трябва да настроите цял проект, само за да тествате някакъв малък прототип. В случая на Apple ви е необходим и акаунт на програмист. Хубавото на Playgrounds е, че заобикаляте част от това. Нуждаете се от Xcode или приложението Playgrounds, но това е всичко. И можете веднага да започнете с кодирането и компилирането на вашия код.

И все пак, друго огромно предимство на Swift е фактът, че е с отворен код. Ако някога сте се чудили как езикът за програмиране работи под капака, тогава можете да се убедите сами! Това е чудесен начин да разберете езика за програмиране, с който работите ежедневно, на по-дълбоко ниво.

Почетно споменаване е хубава помощна програма, достъпна само за Swift, мениджърът на пакети Swift. Swift Package Manager е просто мениджър на зависимости, който е интегриран със системата за изграждане на Swift. Това по никакъв начин не е игра за смяна на играта, тъй като CocoaPods и Carthage отдавна са вършили тази работа, но при нужда е друго решение.

Много доказателства тук подкрепят факта, че Apple прави много, за да направи Swift по-желана като предпочитан език за програмиране за разработчици на iOS. Те създават приятни помощни програми и помощни програми, за да примами хората да започнат да използват езика. Това показва, че Apple настоява за Swift с пълна сила.

Езикови характеристики

Нека да влезем в някои детайли на самия език. Swift е по-безопасен поради статичното си писане и използването на опции. В Swift, ако вашият код изисква низ, характеристиките на Swift ще гарантират, че вашият код получава низ, а не друг тип, като например int. Това разбира се зависи от това дали използвате езика, както е замислен, и не насилствено да разгъвате всичко.

Друга чудесна характеристика на Swift е неговият синтаксис. Особено в сравнение с Objective-C. Най-добрата дума за описване на синтаксиса би била „кратко“. Няма нужда от точка и запетая, извиквания към себе си или скоби наоколо, ако твърдения. Усещането е, че прескачате много неща, които така или иначе всъщност не ви трябват. Това може да направи процеса на въвеждане на много код „поток“ по-добър.

Някои хора казват, че това води до подобряване на скоростта на развитие, но аз самият не бих казал точно това. Постоянната необходимост от разгъване на обекти, за да се съобразят с безопасността на типа Swifts, компенсира печалбите от развитието, които идват с лаконичността.

Swift също има много страхотни опции за контрол на потока с предпазител, ако е позволено, усъвършенствани команди за превключване, повтаряне и отлагане. Харесвам всички различни опции, защото позволява на хората да контролират потока на своя код по начин, който има смисъл за тях. Много хора мразят отлагащите, но обичат пазачите и обратно. Всъщност няма значение какво харесвате или не, но опциите са налице и можете да кодирате по начина, който се чувства най-добре за вас.

Не мога да забравя всички функционални функции за програмиране като филтър, карта и намаляване. Това е чудесно за работа с колекции и е полезно доста често.

Слабите страни

Суифт е млад език и с това идва и промяна. Миграциите между версиите са просто болка. В малка компания инструментът за мигриране, предоставен от Apple, може да бъде полезен и да обхване повечето случаи. Колкото повече код имате, толкова по-малко полезно става. Още по-лошо е, ако вашата кодова база съдържа както Objective-C, така и Swift код, които си взаимодействат.

В последната ми компания усилията за миграция отнеха цяла една седмица на специална група. Трябваше да го направят през уикенда, за да не се сблъскат с конфликти на сливания от други разработчици, натискащи кода. Това беше невероятно болезнено за всички замесени.

Причина за тези миграции е фактът, че Swift не е ABI стабилен. Това означава, че по-новите версии на Swift не могат да работят със старите версии на Swift. Това също означава, че езикът не може да бъде пакетиран с операционната система. Това е голяма работа за компании с големи приложения, които активно се борят с размера на приложението, защото Swift се свързва с приложението и увеличава размера му.

Друг е въпросът, че Swift не играе добре с Xcode. Xcode се чувства много раздразнен, когато работите с Swift и автоматичното довършване просто не работи понякога. Това е странно, като се има предвид колко силно Apple натиска Swift. Бихте си помислили, че биха искали да направят удоволствието от използването на Swift с Xcode.

Swift също има проблеми с обработката на низове, вижте примера на кода по-горе. Това е тромаво по дяволите. Във всеки ден това не е лошо. Това, което най-много влиза в игра, е по време на интервюта. За съжаление на разработчиците на Swift, интервюиращите обичат да задават въпроси, които включват манипулация на струни. Това се усложнява от факта, че начинът на обработка на низовете се е променил между версиите на Swift.

Силните страни на Objective-C

Objective-C е силно динамичен, обектно ориентиран език. Той е динамичен до такава степен, че можете да разменяте извикванията на методи по време на изпълнение, използвайки техники като Swizzling. Той е в състояние да прави такива неща поради своята парадигма за изпращане на съобщения. Това позволява на обектите да изпращат съобщения до други обекти по време на изпълнение, за да определят извикването на извикания метод.

На практика какво означава това? Е, едно голямо предимство е адаптивността по време на изпълнение. Това означава достъп до частни приложни програмни интерфейси (API) или извършване на неща като подигравки на обекти по време на изпълнение стават възможни. Това може да бъде особено полезно, когато става въпрос за модулно тестване. Библиотеки като OCMock правят това още по-лесно и позволяват много сложни тестови настройки. Наличието на добри модулни тестове ще направи приложението ви по-стабилно и надеждно.

Говорейки за стабилност, Objective-C съществува отдавна, което го прави много стабилен език. С Swift ще срещнете грешки, които са доста изненадващи и биха нарушили стабилността на приложението ви. В примера, който свързах по-горе, този срив би бил причинен от действителния език, който използвате, за да кодирате приложението си, а не поради грешка, създадена от кода, който сте написали. Това може да бъде разочароващо.

Последната точка, която е по-важна за определени компании, е съвместимостта с библиотеките C и C ++. Тъй като Objective-C е надмножество на C, лесно е да използвате C и C ++ код с Objective-C. Можете дори да използвате Objective-C ++, ако се чувствате толкова склонни. Това е важно, ако сте зависими от библиотеки C и C ++ на трети страни.

Слабите страни

Първото основно оплакване, което чувам за Objective-C, е синтаксисът. Започнах професионалната си кариера с помощта на Objective-C, така че нямам проблеми с него. Това е многословно и малко нестандартно с използването на квадратни скоби. Но мненията за синтаксиса са точно това, мнения. Реших, че ще изброя тази точка, тъй като това е едно от първите неща, които се появяват, когато споменете Objective-C.

Едно нещо, с което обаче се съгласявам, е, че синтаксисът на блока е разочароващ. Има дори уебсайт, посветен на декодирането на загадките на блоковете в Objective-C. Всъщност използвам този уебсайт доста често като справка.

Най-големият проблем, с който се сблъсква Objective-C в момента, е фактът, че един ден Apple може да откаже поддръжката на Objective-C с какао и други общи библиотеки, използвани за създаване на приложения за iOS. Тъй като Objective-C се използва предимно за създаване на приложения за iOS, това би било смъртно звън за езика. Това също така означава, че новодошлите в общността на iOS се страхуват да се ангажират да научат Objective-C точно сега, тъй като той може вече да не се използва в бъдеще.

Да се ​​върнем към самия език. Склонен е към трудно отстраняване на грешки поради динамичния характер на езика. Възможността да се изпращат съобщения до нула и да не се срива на върха на липсата на стриктно въвеждане са някои примери за неща, които водят до тези трудно отстраними грешки.

Objective-C също не държи ръката ви, когато става въпрос за тези неща. Въпреки че е хубаво, че приложението не се срива, когато изпратите съобщение до нула, това може да постави приложението ви в странно състояние. Много е трудно да се отстраняват грешки като тези. Фактът, че Swift има строго писане и използването на опции за разопаковане, предотвратява тези неща по време на компилация.

Трябва ли да науча Swift или Objective-C?

Отговорът за повечето хора ще бъде Суифт. Apple очевидно прокарва Swift като език на избор за своята общност за разработка на приложения за iOS. Swift ще продължи да става по-ефективен само с въвеждането на стабилността на ABI и Swift се пакетира със самата операционна система.

Ако търсите работа като разработчик на iOS, Swift ще бъде езикът, който искате да научите. Повечето стартиращи компании от средно ниво ще имат своите приложения за iOS, написани изцяло на Swift. Това означава, че ще можете да кандидатствате и да интервюирате за повече работни места, ако научите Swift.

Дори в по-големи компании, където Objective-C все още се използва интензивно, интервюта все още могат да се правят в Swift. Така че можете да научите Objective-C, след като се присъедините към компанията и да не се притеснявате да се натоварвате с повече неща, които да научите преди интервюто.

Ще искате да научите Objective-C, ако вече работите в стартираща или средно ниво компания и искате да преминете към по-голяма компания. Уменията с Objective-C ще ви дадат специализирани знания и предимство пред останалите кандидати за интервю.

Хареса ми четеното? Разгледайте някои от другите ми статии:

Съвети за първото ви техническо интервю.

Започване на технологична кариера от нищо.

Трябва ли да получите степен по компютърни науки?