Пора переходити на Swift?

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


— Розкажіть, будь ласка, в двох словах про себе і свій досвід роботи з Swift.

— На даний момент я працюю в компанії Avito розробником мобільних додатків для iOS. В розробці мобільного я близько 5 років, а до неї займався різними напрямками, зокрема, веб-сайтами, бэкэндом та desktop-додатками.
Swift ми почали використовувати в Avito більше півроку тому, коли вийшла друга версія мови, накопичилася зворотній зв'язок від спільноти розробників. Раніше в роботі ми використовували Objective-C, але тепер весь новий код пишемо Swift.

— Деякі розробники відгукуються про Swift, як про досить «сирому» мові, не відповідним поки для великих проектів. Чи Можете ви підтвердити або спростувати цю думку?

— У Swift, безумовно, є недоліки, зокрема, пов'язані із середовищем розробки. Xcode час від часу падає, вимикається підсвічування синтаксису або компілятор відмовляється компілювати код. Згадані недоліки не можна назвати причиною відмови від розробки великих проектів на Swift. Стикаючись з проблемами — ми знаходили рішення. І ми вже відправили в продакшн досить об'ємний проект, написаний на цій мові.

— Що ж спонукало вас, незважаючи на ці складності, перейти на Swift?

— У першу чергу ми розуміємо, що Apple розвиває і буде розвивати Swift, тоді як Objective-C вже давно не отримував істотних змін (не будемо враховувати зміни, пов'язані із сумісністю Swift ). Перехід на Swift зараз — це в якійсь мірі крок у майбутнє.
Ми в Avito, в якості експерименту, вирішили використовувати Swift для одного з наших проектів. І в цілому не зіткнулися з непереборними труднощами. Все стало виходити. Код читається і пишеться легше ніж на Objective-C. А головне, виходить типізованих і безпечним, у тому числі, за рахунок застосування дженериків.

— до Речі, чи можна дженерики назвати одним з аргументів на користь переходу на Swift?

— Загалом так.
Але тут дуже багато залежить від бізнес-завдань. По-перше, розробників з багатим досвідом роботи з Swift не так багато. По-друге, є безліч проектів, написаних раніше на Objective-C, їх потрібно підтримувати. А щоб добре писати на Swift, його потрібно вивчати, витрачати на це ресурси. І ці фактори для бізнесу набагато важливіше. Відповідно, дженерики — це не якийсь однозначний аргумент, який зумовлює міграцію Swift. Це просто зручний інструмент.

— Наскільки активно вам доводиться використовувати дженерики у своїй роботі, і які основні переваги цієї концепції?

— Ми використовуємо дженерики дуже активно. Ця концепція допомагає нам писати якісний, суворо типізований, передбачуваний код. Ми бачимо, що впливають наші зміни, а це для нас важливо, оскільки ми пишемо однією командою відразу кілька проектів, і у нас безліч переиспользуемых компонентів. Звичайно, ми стежимо за версионированием, але коли в компонент вносяться чергові зміни, ми хочемо знати, на чому вони відіб'ються. Коли ми використовуємо дженерики, у нас немає динамічного приведення типів; ми бачимо, що змінилася якась модель, якісь вимоги до моделі, помінялися протоколи. А можливі проблеми з типізацією випливають одразу у вигляді помилок. Це дуже зручно.
Тому дженерики використовуються повсюдно, враховуючи, що концепція може застосовуватися в самих різних сферах: і в роботі з мережею, і з моделями даних, і навіть з UI.

— Концепція дженериків — не нова. Давним-давно з'явилися аналоги в інших мовах, так і ідеї узагальненого програмування існують десятки років. Чому ж, на ваш погляд, розробники далеко не завжди (коли це можливо) до них звертаються?

— Дійсно, дженерики в тому чи іншому вигляді присутні в безлічі мов програмування вже десятки років. І, так, розробники далеко не завжди до них звертаються.
У контексті мови Swift, без дженериків в принципі можна обійтися: ми можемо писати на Swift і не використовувати дженерики хоча б тому, що раніше роками використовували Objective-C, де немає подібних конструкцій, а тепер намагаємося на Swift проектувати свій старий досвід. На мій погляд, у цьому і криється основна причина — коли ти бачиш нову для себе технологію (якої не було в Objective-C), ти підходиш до неї акуратно, і часом, враховуючи досвід, обходиш її стороною. Однак якщо в неї зануритися, буде набагато легше писати код. Та й сам код буде набагато якісніше.

— Для яких завдань, на ваш погляд, найоптимальніше використовувати дженерики (саме в рамках Swift)?

— Таких завдань досить багато. Дженерики добре допомагають там, де є такий алгоритм, який може бути переиспользован за рахунок роботи з різними типами даних. Очевидні приклади — сортування речових та цілих чисел за допомогою одного алгоритму (без простого копіювання коду).
Є й більш цікаві приклади, зокрема, робота з мережею або таблицями в iOS. Але без наочних схем і конкретних прикладів коду такі завдання розбирати досить складно. Ці приклади я якраз буду розбирати в рамках мого виступу на Мобиусе. Я розповім, у яких місцях подібні конструкції дуже ефективно застосовувати, і де вони можуть істотно скоротити обсяг коду.
Найбільш цікавий випадок, на мій погляд, — це контрол для роботи з таблицями UITableView. При використанні таблиць, доводиться займатися тайп-кастингом, але в доповіді я спробую показати, як все це може працювати за допомогою дженериків. Більш того, в даному контексті дженерики допомагають в рази скоротити обсяг коду.

— Не породжує активне використання дженериків які-небудь проблеми додатки (з безпекою тощо)?

— Ми з такими проблемами не стикалися.
Які тут можуть бути проблеми? Використовуючи дженерики доводиться ретельніше продумувати архітектуру, приймати рішення, де використання дженериків виправдано, а де ні. Не варто намагатися використовувати дану технологію там, де від неї не буде вигоди. Але це не проблема конкретно дженериків. Це справедливо для будь-якої технології.

— чи Стикалися ви у роботі з недоречним використанням дженериків?

— Наприклад, у разі якщо функція повинна працювати тільки з одним типом даних, а її оформляють як дженерик, це дещо ускладнює і заплутує код.
Але в більшості випадків у нас швидше було навпаки — ми писали код, не використовуючи дженериків, а потім усвідомлювали, що тут дуже класно було б використовувати дженерики.

— чи Є якісь обмеження використання дженериків саме в Swift?

— Основним обмеженням я б назвав сумісність Objective-C і Swift: написаний на Swift дженерик-код не можна буде використовувати в Objective-C.



Дякуємо за розмову!

Як було зазначено вище, Максим Соколов підніме практичні питання ефективності використання інструментарію, запропонованого розробниками мови Swift (а саме, дженериків), для побудови більш передбачуваного та безпечного коду в рамках свого доповіді на конференції Mobius. Захід відбудеться 4 червня в Санкт-Петербурзі.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.