Свіфт проти Objective-C: тенденція до зростання та динозавр

Коротка історія Свіфта

Я пам’ятаю, наскільки ключовим було це, коли компанія Swift була представлена ​​на Apple WWDC 2014 (Всесвітня конференція розробників). Це була розмова міста, і всі розробники, з якими я працював, не могли зачекати, щоб спробувати. Спільнота 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, як може розкриватися назва мови. Це означає, що будь-яка діюча програма на С компілюється за допомогою компілятора Objective-C. Він отримує весь свій необ’єктно-орієнтований синтаксис із C, а об’єктно-орієнтований синтаксис із SmallTalk. Він був розроблений в 1984 році, тому він встиг дозріти як мова і набагато стабільніший, ніж Свіфт.

Більшість людей знають Objective-C як мову, яка використовується для розробки програм для iPhone, але історія набагато глибша. Я рекомендую прочитати цю статтю для більш поглибленого вивчення.

Сильні сторони Свіфта

Свіфт надзвичайно зросла популярність з кількох основних причин. По-перше, існує безліч чудових інструментів розробки, які Apple надала для роботи спільно зі Swift. Одним з моїх особистих улюблених є дитячий майданчик, який сумісний лише з Swift. Apple представила Playgrounds у 2016 році. Вони були представлені як спосіб навчитися кодувати, але я любив їх з іншої причини.

Мобільна розробка завжди мала більше перешкод, ніж веб-розробка. Вам потрібен симулятор, зазвичай вам потрібне власне інтегроване середовище розробки (IDE), і вам потрібно створити цілий проект, щоб протестувати якийсь невеликий прототип. У випадку з Apple вам також потрібен обліковий запис розробника. Приємна річ ігрових майданчиків - це те, що ви обійдете все це. Вам потрібен Xcode або додаток Playgrounds, але це все. І ви можете розпочати кодування та компіляцію коду відразу.

Однак ще однією величезною перевагою Swift є той факт, що він є відкритим. Якщо ви коли-небудь замислювались, як працювала мова програмування під капотом, то можете піти переконатися самі! Це чудовий спосіб глибше зрозуміти мову програмування, з якою ви працюєте щодня.

Почесна згадка стосується приємної утиліти, доступної лише Swift, менеджеру пакетів Swift. Менеджер пакетів Swift - це просто менеджер залежностей, інтегрований із системою побудови Swift. Це ніяк не змінює гру, оскільки CocoaPods і Carthage давно виконували цю роботу, але це інше рішення, доступне за необхідності.

Багато доказів підтверджує той факт, що Apple робить багато для того, щоб зробити Swift більш бажаним як вибрану мову програмування розробників iOS. Вони створюють приємні утиліти та допоміжні засоби, щоб спонукати людей почати користуватися мовою. Це показує, що Apple наполягає на Swift на повну силу.

Мовні особливості

Давайте розберемося з деякими деталями самої мови. Swift безпечніший завдяки статичному набору тексту та використанню додаткових засобів. У Swift, якщо для вашого коду потрібен рядок, функції Swift гарантують, що ваш код отримує рядок, а не інший тип, наприклад int. Це, звичайно, залежить від того, якщо ви використовуєте мову, як вона задумана, і не змушуєте розгортати все.

Ще однією чудовою особливістю Swift є його синтаксис. Особливо в порівнянні з Objective-C. Найкращим словом для опису синтаксису було б “стислий”. Немає потреби у крапках з комою, викликах до себе або дужках навколо операторів if. Таке враження, що ви пропускаєте багато речей, які вам і так не потрібні. Це може покращити процес набору великої кількості коду.

Деякі люди кажуть, що це призводить до поліпшення швидкості розвитку, але я б точно цього не сказав. Постійна потреба розгортати предмети, щоб відповідати безпеці типу Swifts, компенсує досягнення, пов'язані з лаконічністю.

Swift також має безліч чудових опцій керування потоком із захистом, якщо дозволено, вдосконаленими операторами перемикання, повторенням часу та відстрочкою. Мені подобаються всі різні варіанти, оскільки це дозволяє людям контролювати потік свого коду таким чином, щоб він мав для них сенс. Багато людей ненавидять затримки, але люблять охоронців і навпаки. Насправді не має значення, що вам подобається чи не подобається, але варіанти є, і ви можете кодувати так, як вам найбільше подобається.

Я не можу забути всі функції функціонального програмування, такі як фільтр, карта та зменшення. Це чудово підходить для роботи з колекціями і дуже часто стає в нагоді.

Слабкі сторони

Свіфт - молода мова, і разом із цим виникає певна зміна. Міграції між версіями - це просто біль. У невеликій компанії інструмент міграції, який надає Apple, може бути корисним та охоплювати більшість випадків. Це стає менш корисним, чим більше у вас коду. Ще гірше, якщо ваша кодова база містить і Objective-C, і код Swift, які взаємодіють.

У моїй останній компанії міграційні зусилля зайняли цілу групу цілих вихідних. Вони повинні були зробити це у вихідні, щоб не натрапити на конфлікти злиття від інших розробників, що штовхають код. Це було неймовірно болісно для всіх причетних.

Причиною цих міграцій є той факт, що Swift не є стабільним ABI. Це означає, що новіші версії Swift не можуть працювати зі старими версіями Swift. Це також означає, що мова не може бути упакована до ОС. Це велика справа для компаній з великими додатками, які активно борються з їх розміром, оскільки Swift входить до комплекту додатків і збільшує його розмір.

Інше питання полягає в тому, що Swift погано грає з Xcode. Xcode відчуває себе дуже нестабільним при роботі з Swift, а автозаповнення просто не спрацьовує іноді. Це дивно, враховуючи, наскільки сильно Apple штовхає Свіфта. Можна подумати, що вони хотіли б, щоб досвід використання Swift із Xcode був у захваті.

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 з Cocoa та іншими поширеними бібліотеками, що використовуються для створення додатків для 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 дадуть вам спеціальні знання та перевагу перед іншими кандидатами на співбесіду.

Сподобалось прочитане? Погляньте на деякі інші мої статті:

Поради для першого технічного інтерв’ю.

Починати технологічну кар’єру з нічого.

Чи повинні ви отримати ступінь інформатики?