Swift против Objective-C: 10 причин почему будущее за Swift

Swift против Objective-C

Языки программирования не умирают быстро, а студии разработчики, которые цепляются за угасающие парадигмы, умирают. Если вы разрабатываете приложения для мобильных устройств и не изучали Swift, то знайте: Swift не только вытесняет Objective-C, когда речь идет о разработках приложений под OSX, iOS и WatchOS, но и в скором будущем заменит С для внутреннего программирования, для Apple платформ.

Благодаря нескольким ключевым особенностям, Swift имеет потенциал стать единственным предпочитаемым языком программирования, для создания захватывающих, гибких, потребительски-ориентрированных приложений или программ, на многие годы.

У Apple большие надежды на Swift. Компания настолько эффективно оптимизировала компилятор и сам язык принципе, что многие возможности еще только предстоит раскрыть. Можно сказать, что Swift «предназначен для взлета от "hello, world" до целой операционной системы» по документации Swift.

Вот 10 причин, почему нужно начать изучать Swift прямо сейчас:

1. Swift более читаемый язык, чем Objective-C

У Objective-C есть все болячки, которые могут быть у языка, построенного на С. Для дифференциации ключевых слов и типов от C типов, Objective-C вводит новые ключевые слова, используя символ @. Так как Swift не построен на С, то он может объединить все ключевые слова и удалить многочисленные символы @ перед каждым Objective-C типом или перед связанным с объектом ключевым словом.

Swift пересматривает общепринятые условия наследования. Таким образом, вам больше не нужно ставить запятую в конце строки или писать круглые скобки, чтобы окружить условные выражения внутри операторов if/else. Еще большое изменение в том, что вызовы метода не располагаются внутри друг друга и тем самым не создают скобочный ад! Прощайте [[[]]]. Метод и функции вызываются в Swift, используя стандартный разделенный запятыми список параметров в круглых скобках. Результатом является чистый, выразительный язык, с упрощенным синтаксисом и грамматикой.

Код в Swift очень напоминает естественный английский язык, в дополнение к другим современным популярным языкам программирования. Читаемость кода в Swift облегчает работу для программистов JavaScript, Java, Python, C #, C ++, в отличие от гадкого утенка, которым был Objective-C.

2. Swift легче поддерживать

Наследие удерживает Objective-C позади: язык не может развиваться без развития C. C требует от программистов поддержки 2 кодовых файлов для улучшения времени установки и эффективности создания приложения - требование, которое переносится на Objective-C.

Swift отменяет требование двух-файлов. Xcode и компилятор LLVM может выяснить зависимость и выполнить пошаговые изменения автоматически в Swift 1.2. В результате, повторяющаяся задача разделения оглавления (файл заголовка) от тела (файл реализации) становится делом прошлого. Свифт сочетает в себе заголовок Objective-C (.h) и файлы реализации (.m) в одном файле кода (.swift).

Двух файловая система Objective-C накладывает дополнительную работу на программистов - и это работа, которая отвлекает их от более важных задач. В Objective-C вы должны вручную синхронизировать имена методов и комментарии между файлами.

Xcode и компилятор LLVM могут работать незаметно для программиста, снижая его нагрузку. Используя Swift, программисты делают меньше вспомогательных действий и могут потратить больше времени на создание логики приложения. Swift отказывается от шаблонного труда и улучшает качество кода, поддерживаемых комментариев и функций.

3. Swift безопаснее

Одним из интересных моментов в Objective-C, можно считать способ обработки указателей, особенно nil (NULL). В Objective-C ничего не случится если вы попытаетесь вызвать метод с переменной указателя nil (неинициализированным). Выражение или строка кода становится невыполнимыми и может показаться, что выражение не упадет, но на самом деле будет полно багов. Невыполнимость приводит к непредсказуемому поведению, что является врагом программистов, пытающихся найти и исправить случайные сбои или остановить отклоняющееся от нормы поведение.

Опциональные типы дают возможность существования в Swift коде nil опционального значения, что говорит о возможности создания ошибки компилятора при написании плохого кода. Это создает короткий цикл обратной связи и позволяет программистам кодировать более уверено. Проблемы могут быть устранены при уже написанном коде, что значительно уменьшает количество времени и денег, которые вы тратите на исправление багов, что схоже с логикой указателя из Objective-C.

Традиционно в Objective-C, если значение было возвращено из метода, то программист был обязан зафиксировать поведение указателя возвращенной переменной (с использованием комментариев и наименования метода). В Swift опциональные типы и типы значений позволяют явно определить метод, если значение существует или, если оно может быть опциональным (то есть, значение может существовать или может быть nil).

Для обеспечения предсказуемого поведения, Swift вызывает ошибку при исполнении кода, если используется опциональная переменная nil. Эта ошибка обеспечивает согласованное поведение, которое облегчает процесс устранения багов, потому что заставляет программиста решить проблему сразу. Swift ошибка при исполнении кода произойдет на строке кода, где была использована опциональная переменная nil. Это означает, ошибка будет исправлена своевременно или ее получится избежать вовсе в коде Swift.

4. Унифицировано согласование Swift с управлением памятью

Swift унифицирован так, как никогда не был Objective-C . Поддержка автоматического подсчета ссылок (ARC) является полной по процедурным и объектно-ориентированным путям кода. В Objective-C, ARC поддерживается внутри Cocoa API и объектно-ориентированного кода; но он не доступен для C кода и API, например Core Graphics. Это означает, что программист будет должен взять на себя управление памятью при работе с Core Graphics APIs, и других более старых API, доступных на iOS. Огромные утечки памяти, которые программист может иметь в Objective-C, невозможны в Swift.

Программисту не приходится думать о памяти для каждого цифрового объекта, который он создает. Потому что ARC обрабатывает все управление памятью во время компиляции, и затраты, которые пошли бы на управление памятью, теперь могут быть сфокусированы на core app logic и новых возможностях. Это происходит потому, что ARC в Swift работает и на процессуально и на объектно-ориентированном коде, и теперь не нужно контекстных переходов для программистов, даже если они пишут код, который рассчитан на более старые API. Это является проблемой для текущей версии Objective-C.

Автоматическое и высокопроизводительное управление памятью было проблемой, которую Apple смогли решить и доказали, что это может повысить производительность. С другой стороны и в Objective-C, и в Swift нет зависимости от темпа работы Garbage Collector, который используется для очистки неиспользуемой памяти, как в Java, Go или C#. Это важный фактор для любого языка программирования, используемого для чувствительной графики и предоставления пользовательского входа, особенно на тактильных устройствах таких как: iPhone, Apple Watch или IPad (где задержка в работе воспринимается как разочарование и заставляет пользователя думать, что приложение не работает).

5. Swift требует меньшее количество кода

Swift уменьшает количество кода, необходимого для повторяющихся заявлений и строк. В Objective-C, работая с текстовыми строками, вам приходится быть многословным, и чтобы объединить две части информации, потребуется множество шагов. Swift принимает особенности современного языка, например добавление 2-х строк вместе с оператором «+», что отсутствует в Objective-C. Такая поддержка для объединенных символов и строк имеет основополагающее значение для любого языка программирования, который использует отображение текста для пользователя на экране.

Система типов в Swift снижает сложность в написании кода - так как компилятор может выяснять типы. В качестве примера: Objective-C требует, чтобы программисты запоминали специальные токены строк (%S, %d, %@) и использовали разделенный запятыми список переменных для замены каждого токена. Swift поддерживает интерполяцию строк, что устраняет необходимость запоминания токенов и позволяет программистам вставлять переменные, такие как название ярлыка или кнопки, непосредственно во встроенную пользовательскую строку. Тип вывода системы и строки интерполяции уменьшают количество ошибок, которые распространены в Objective-C.

В Objective-C, если вы нарушили порядок расположения или использовали неправильный токен строки, ваше приложение упадет. Swift же снова освобождает вас от дополнительной работы: вы пишите меньше кода (в следствие будет меньше ошибок) благодаря их встроенной поддержке для обработки текстовых строк и данных.

6. Swift быстрее

Удаление устаревших конвенций намного улучшило движок Swift. Тестирования производительности кода в Swift по-прежнему указывают на то, что Apple продолжает преданно улучшать скорость работы приложений на Swift.

В соответствии с данными Primate Labs, по показателям популярного теста GeekBench (кросс-платформенный эталонный тест для измерения быстродействия процессора и подсистемы памяти компьютера) Swift приблизился к эксплуатационным характеристикам C++ по ограничению скорости вычислений с использованием алгоритма Мандельброта в декабре 2014 года. В феврале 2015 года Primate Labs обнаружили, что Xcode 6.3 Beta улучшил производительность алгоритма GEMM в Swift (алгоритма ограниченной памяти последовательного доступа больших массивов (a memory-bound algorithm with sequential access of large arrays)) до коэффициента 1,4. Начальная имплементация FFT (алгоритма ограниченной памяти с рандомным доступом больших массивов) - улучшение производительности в 2,6 раза.

Swift показал и другие улучшенные показатели при дальнейшем тестировании: 8,5-кратное повышением для FFT алгоритма (оставив C++ только с приростом производительности в 1,1 раза). Также, Swift превосходит C++ для алгоритма Мандельброта, коэффициентом в 1,03.

Практически, Swift на одном уровне с C++ для FFT и алгоритма Мандельброта. В соответствии с данными Primate Labs алгоритм GEMM показал, что компилятор Swift не может векторизовать код так, как может компилятор C++. У C++ есть небольшое преимущество, но Apple обещают все исправить в следующих версиях Swift.

7. Меньше столкновений имен с проектами открытого исходного кода

Существует одна проблема, которая преследует коды Objective-C - это отсутствие формальной поддержки пространства имен (namespaces), которые были созданы как решение проблемы С++ для столкновений при названии файлов. Когда это столкновение происходит в Objective-C, это считается ошибкой линкера (редактора связей), и приложение не может работать. Обходные пути существуют, но они имеют потенциальные подводные камни. Существует общее соглашение на использование двух- или трехбуквенных префиксов, для отличия написанного кода Objective-C вами, и от такого же кода для Facebook.

Swift дает возможность использования неявных пространств имен, что позволяет одному и тому же файлу с кодом использоваться в многочисленных проектах, без рисков сбоя и требований наименований, таких как NSString (NextStep – компания Стива Джобса, после его увольнения из Apple) или CGPoint (Core Graphics). В конечном счете, эта функция в Swift способствует большей производительности для программистов и означает, что им не придется заниматься дополнительной работой, которая существует в Objective-C. Вы можете увидеть, что в Swift есть связь с простыми именами, такими как Array, Dictionary и String, вместо NSArray, NSDictionary, и NSString, которые родились из-за отсутствия пространства имен в Objective-C.

В Swift, пространства имен основаны на цели кода. Это означает, что программисты могут дифференцировать классы или значения, используя идентификатор пространства имен. Это просто огромное изменение в Swift. Оно значительно облегчает включение проектов с открытым исходным кодом, а также добавление рамок и библиотек в ваш код. Пространства имен позволяют различным программным компаниям создавать те же имена файлов, не беспокоясь о столкновениях при интеграции проектов с открытым исходным кодом. Теперь, и Facebook, и Apple могут использовать файл объектного кода FlyingCar.swift без каких-либо ошибок или рисков сбоя.

8. Swift поддерживает динамические библиотеки

Самое большое изменение в Swift, которое не получило достаточного внимания - это переход от статических библиотек, которые обновляются только при крупных обновлениях (iOS8, iOS7, и так далее), к динамическим библиотекам. Динамические библиотеки - это исполняемые куски кода, которые могут быть присоединены к приложению. Эта функция позволяет приложениям текущей версии Swift, связаться с более новыми версиями языка, в связи с его постоянным развитием.

Разработчик предоставляет приложение вместе с библиотеками, обе из которых подписаны электронной подписью и обладают сертификатом развития для обеспечения целостности  (hello, NSA). Это означает, что Swift может развиваться быстрее чем iOS, который в свою очередь выдвигает требования для современного языка программирования. Изменения в библиотеках включаются в последнее обновление, в приложение на App Store, и все просто работает.

Динамические библиотеки никогда не поддерживались iOS до запуска Swift и iOS8, хотя динамические библиотеки поддерживались Mac, в течение очень долгого времени. Динамические библиотеки являются внешними для исполнения приложениями, но включены в пакет приложения при загрузке с App Store. Это уменьшает первоначальный размер приложения, так как оно загружается в память, а внешний код добавляется только когда используется.

Возможность отложить загрузку в мобильном приложении или во встроенном приложении на Apple Watch, улучшит эффективность воспроизведения для пользователя. Это одно из отличий, которое делает экосистему IOS более гибкой. Apple была сосредоточена на загрузке только активов, ресурсов и теперь компилирует и связывает код на лету. Загрузка в ходе работы уменьшает начальное время ожидания, пока ресурс не будет отображен на экране.

Динамические библиотеки Swift, позволяют проводить изменения и улучшения проще, чем когда-либо прежде. Людям больше не нужно ждать IOS релизов, чтобы получить улучшения Apple для Swift.

9. Песочница Swift побуждает к интерактивному кодированию

Недавно представленные песочницы Swift являются благодатной почвой для опытных разработчиков. Организация песочниц была частично вдохновлена работой бывшего сотрудника Apple, Бреттом Виктором. Они позволяют программистам проверить новый алгоритм или графическую рутину, скажем, 5 до 20 строк кода, без необходимости создавать целое iPhone приложение.

Apple добавила встроенное исполнение кода во время его написания для песочниц, чтобы помочь программистам создавать куски кода или писать алгоритмы, по мере написания которых, они будут получать результат. Получение результата, сразу может улучшить скорость написания кода, потому что та модель, которая традиционно нужна программисту, может быть заменена визуализацией данных в песочнице. Программирование - повторяющийся процесс, и каждый strain может быть уменьшен или использован в дополнение к творческому процессу. Это сделает работу программистов более продуктивной и освободит их от лишней работы, которую добавляли программистам традиционные компиляторы.

На заметку: из моего опыта обучения начинающих программистов могу сказать, что песочницы не так значимы для новичков, как для опытных программистов. Например, на показе работы переменной в песочнице Swift, начинающему программисту трудно понять необходимость использования переменной Floating вместо переменной Integer. Необходимость становится очевидной, когда вы показывается в приложении, что скролл запоминает ваше последнее положение в новостях Facebook. Для начинающих программистов на вопрос «почему?», ответом будет результат работы: приложение iPhone.

10. Swift - это будущее, на которое вы можете повлиять

Objective-C никуда не денется, но и не будет претерпевать больших изменений, благодаря появлению Swift. Скорее всего, некоторые изменения перекочуют в Objective-C, но наследие Objective-C в С означает, что оно лишь будет все поглощать.

Swift дает возможность обществу повлиять на язык, который будет использоваться для написания приложений, встроенных систем (если Apple когда-то даст лицензии для встроенных фреймворков и чипов третьим лицам) и других девайсов, таких как Apple Watch.

Apple направлена на обеспечение наилучшего потребительского опыта и внедряет только те функции, которые считает достойными внимания. В Swift 1.2 и релизе Xcode 6.3, Apple уже устранила тысячи ошибок с помощью популярного Apple Bug Reporter utility. Команда поддержки развития и эволюции Swift очень заинтересована в том, чтобы язык был улучшен.

Swift - более доступный и полностью функциональный язык

Основная часть изменений, которые позволяют Swift подняться выше Objective-C - это отказ от наследия, на котором был построен Objective-C. Apple не уходит от Cocoa, которое является их API и от библиотек кода для создания чего-то эппловского (Apple-esque). Вместо этого, они представляют полнофункциональную, равноценную замену, и дают возможность легкого взаимодействия с новыми API, которые поддерживают такие функции, как Force Touch или Taptic Feedback.

Многие унаследованные решения были разработаны так, чтобы сделать дизайн компилятора легче. Swift делает упор на упрощение работы разработчика приложений, освобождая его от устаревших практик кодирования. Из-за улучшенной работы современных компиляторов, большое количество информации можно получить из меньшего количества кода.

В Swift, программистам нужна поддержка лишь половины кода, ручная нулевая синхронизация и гораздо меньше пунктуации — что даст вам больше времени на написание качественных строк кода. Код теперь самодокументируется в Swift, с добавлением дополнительных типов: механизм безопасного сохранения во время компиляции для возможности возвращения к значению или к no value - распространенная проблема с асинхронными операциями, сетевыми сбоями, неправильным вводом пользователя или ошибок подтверждения (validation) данных. ARC объединены в Swift between both procedural C-style code, а также объектно-ориентированного кода, используя фреймворки Cocoa Apple.

Разработчики поймут, что теперь им нужно писать меньше кода, а языковые особенности современного языка сделают их строки кода более читаемыми. Swift будет держать всю экосистему Apple на первых позициях программирования, поскольку она продолжает развиваться благодаря поддержке динамических библиотек на iOS и в Swift. Проекты с открытым исходным кодом, сторонние пакеты SDK, и фреймворки, которые интегрируются с домашней автоматикой, устройствами и социальными услугами, будет проще интегрировать без увеличения потраченного времени. Swift почти такой же быстрый как C ++ в некоторых алгоритмах, и последний релиз Xcode 6.3 и 1.2 и Swift 1.2 показал, что дополнительная необходимая оптимизация уже не за горами.

Добавьте к этому тот факт, что песочницы Swift внедрили новый способ программирования с визуальной обратной связью, что помогает развитию алгоритмов, использующих встроенные визуализации данных. Короче говоря, обратная связь и графические описания делают процесс повторяющегося кодирования еще проще для начинающих.

В конечном счете, Swift наиболее доступный полнофункциональный язык программирования, который позволит разработчикам не только создавать приложения, но и программировать встроенные системы, типа новой низко потребляемой Apple Watch, на многие годы вперед.