Нужно ли вам учить Swift?

Swift — это язык про­грам­ми­ро­ва­ния, раз­ра­бо­тан­ный в ком­па­нии Apple. На нем мож­но писать при­ло­же­ния для деск­то­па, мобиль­ных при­ло­же­ний, сер­ве­ров. У него есть сре­да Playground, в кото­рой мож­но уви­деть резуль­тат про­грам­ми­ро­ва­ния на лету. Ну и вооб­ще — язык Apple. Дол­жен быть хоро­шим, раз­ве нет?

Раз­бе­рем­ся.

Немного матчасти

Во всех наших преды­ду­щих ста­тьях мы исполь­зо­ва­ли JavaScript, назы­вая его язы­ком про­грам­ми­ро­ва­ния. Тех­ни­че­ски это вер­но, но наста­ло вре­мя немно­го про­яс­нить, срав­нив со Swift.

Когда вы пише­те на JavaScript, ваш код испол­ня­ет­ся построч­но в бра­у­зе­ре, как буд­то актер на сцене чита­ет репли­ки по теле­суф­ле­ру. Поэто­му JavaScript при­ня­то назы­вать скрип­то­вым язы­ком.

Если вы откро­е­те чужую про­грам­му на JavaScript, вы смо­же­те залезть в код, поме­нять его, и про­грам­ма зара­бо­та­ет по-новому. Мож­но выдрать нуж­ную функ­цию или дан­ные пря­мо из кода, пото­му что про­грам­ма для JavaScript хра­нит­ся и испол­ня­ет­ся в понят­ном чело­ве­ку виде.

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

После ком­пи­ля­ции вы уже не може­те с лег­ко­стью загля­нуть в про­грам­му и что-то в ней поме­нять, там всё зашиф­ро­ва­но и сжа­то. Зато такую про­грам­му про­цес­сор испол­ня­ет гораз­до быст­рее, чем скрип­ты.

iOS, macOS и деньги

В Swift есть биб­лио­те­ки для раз­ра­бот­ки при­ло­же­ний для Маков, Айфо­нов и Айпа­дов. Это боль­шой и бога­тый рынок (все еще), а зар­пла­ты про­грам­ми­стов на Swift высо­ки.

Но важ­но пони­мать, что Swift пока что не язык мобиль­ной раз­ра­бот­ки, а имен­но язык эко­си­сте­мы Apple. Суще­ству­ют реше­ния, что­бы ком­пи­ли­ро­вать код Swift на Андро­ид, но они ско­рее костыль­ные.

Иде­аль­ный сце­на­рий для Swift — про­грам­ма для Мака, для Айфо­на и Айпа­да, напи­сан­ные в одной и той же логи­ке. Но не про­грам­ма для Айфо­на, Андро­и­да, Мака и Вин­до­уса — до тако­го Swift еще не дошел.

Производительность

Это имен­но то, чего хоте­ли добить­ся раз­ра­бот­чи­ки Swift — ско­рость рабо­ты про­грамм и выпол­не­ния кода. Как заяв­ля­ет Apple, Swift в 2,5 раза быст­рее Objective-C и в 8 раз быст­рее, чем Python 2.7.

Цель, к кото­рой стре­мят­ся раз­ра­бот­чи­ки язы­ка — сде­лать его быст­рее, чем С++, кото­рый часто при­зна­ёт­ся самым быст­рым язы­ком про­грам­ми­ро­ва­ния.

Надо ли вам, что­бы про­грам­ма была мол­ние­нос­ной? В иде­а­ле — да, но не все­гда ради это­го нуж­но пере­хо­дить на новый язык про­грам­ми­ро­ва­ния. Если про­грам­мой поль­зу­ет­ся неболь­шое чис­ло людей, а зада­ча некри­тич­ная, то повы­ше­ние ско­ро­сти может быть не так замет­но. А вот пере­пи­сы­ва­ние про­грам­мы на новом язы­ке может быть болез­нен­ным. Так что ско­рость — не все­гда само­цель.

Лаконичный синтаксис

Если брать за кри­те­рий коли­че­ство строк кода, кото­рые нуж­но напи­сать для реше­ния зада­чи, то Swift идёт в пер­вой десят­ке по мини­ма­лиз­му. Это лег­ко­чи­та­е­мый язык, так же как и Python, но с фигур­ны­ми скоб­ка­ми вме­сто отсту­пов.

Такой код лег­ко чита­ет­ся даже теми, кто не зна­ет Swift, но зна­ет любой дру­гой язык про­грам­ми­ро­ва­ния. В нём всё логич­но, струк­тур­но и понят­но.

Посмот­ри­те на при­мер кода на Swift:

    
language: Swift
let myPeople = ["Аня": 67, "Паша": 8, "Коля": 33, "Женя": 25]

for (name, money) in myPeople {

   print("\(name) получает \(money) тысяч в месяц.")

}


Ско­пи­ро­вать код
Код ско­пи­ро­ван

Вот так мож­но выби­рать одно из мно­же­ства зна­че­ний (при­мер из доку­мен­та­ции Swift):

    
language: Swift
let vegetable = "красный перец"

switch vegetable {

case "чеснок":

   let vegetableComment = "Подходит для любителей мескиканской кухни."

case "огурец", "салат":

   let vegetableComment = "Самое то для лёгкого перекуса."

case let x where x.hasSuffix("перец"):

   let vegetableComment = "А это острый \(x)?"

default:

   let vegetableComment = "Вкусное блюдо можно приготовить из любых продуктов."

}


Ско­пи­ро­вать код
Код ско­пи­ро­ван

Видимый результат

Для Swift есть спе­ци­аль­ный инстру­мент Playground — сво­е­го рода интер­ак­тив­ная песоч­ни­ца, где про­грам­мист сра­зу видит резуль­та­ты рабо­ты про­грам­мы. Ино­гда это в несколь­ко раз уве­ли­чи­ва­ет ско­рость раз­ра­бот­ки и помо­га­ет быст­ро разо­брать­ся с про­блем­ным участ­ком кода.

Безопасный код

Идео­ло­гия язы­ка такая: мень­ше уяз­ви­мо­стей и боль­ше без­опас­но­сти для само­го кода и систе­мы. Раз­ра­бот­чи­ки исхо­ди­ли из того, что про­грам­мист не дол­жен дер­жать всё в голо­ве и преду­смат­ри­вать каж­дую нештат­ную ситу­а­цию. Пусть за него это дела­ет ком­пью­тер. Напри­мер, не нуж­но спе­ци­аль­но сле­дить за досту­пом и утеч­кой памя­ти, пото­му что Swift берёт это на себя.

Ещё он защи­ща­ет от оши­бок, свя­зан­ных с непра­виль­ным управ­ле­ни­ем желе­зом и от несанк­ци­о­ни­ро­ван­но­го досту­па к участ­кам памя­ти, кото­рые не задей­ство­ва­ны в про­грам­ме. Штат­ные ошиб­ки Swift тоже обра­ба­ты­ва­ет эффек­тив­нее того же С++, где каж­дое исклю­че­ние нуж­но про­пи­сать вруч­ную.

Что учить сейчас?

Если вы уже про­грам­ми­ру­е­те на раз­ных язы­ках — опре­де­лен­но рас­смот­ри­те Swift. Ниче­го луч­ше для раз­ра­бот­ки под Apple сей­час нет.

Если Swift будет вашим пер­вым язы­ком, нач­ни­те луч­ше с Python. Он более уни­вер­саль­ный и раз­но­сто­рон­ний. Потом смо­же­те перей­ти на Swift и дру­гие язы­ки.

Если вам нужен быст­рый резуль­тат и сра­зу выка­ты­вать про­грам­мы на сайт или в интер­нет, луч­ше посмот­ри­те на JavaScript. У это­го язы­ка самый корот­кий путь от идеи до реа­ли­зо­ван­но­го про­дук­та на любом устрой­стве.