Котлин против Свифта: Android и iOS движутся к созданию универсального языка?

Автор оригинала: ScienceSoft
  • Перевод


Друзья, всем привет. На связи Дмитрий Кожевин — преподаватель базового курса «Android-разработчик» в OTUS. Специально для читателей нашего блога я подготовил перевод вот такой отчасти провокационной статьи. Очень интересно ваше мнение, поэтому после прочтения приглашаю всех в комментарии к данной публикации.



Как только Kotlin получил поддержку Google, явное волнение фанатов Kotlin стало не единственной реакцией. Те, кто не знаком с Kotlin, были весьма обеспокоены его уровнем совместимости с Java, средним временем, необходимым для его освоения, а также преимуществами использования Kotlin в целом.

В своих попытках объяснить и представить язык максимально коротким и ясным способом многие разработчики Kotlin ссылались на трехлетнюю параллель между Kotlin и вторым официальным языком iOS — Swift. Называя Kotlin «Swift of Android», все упростило задачу и помогло создать образ для языка. Тем не менее, это изображение также вызвало споры в сообществе iOS, так как некоторые разработчики iOS не сочли сравнение лестным и увидели в Kotlin просто подражателя.

По крайней мере, следует отметить, что хотя Swift появился в 2013 году, Kotlin появился еще в 2011 году. Следовательно, даже если сравнение Kotlin и Swift (в этом точном порядке) может быть удобным из-за более раннего знакомства Swift с широкой аудиторией, любое утверждение, что Котлин подражает — не оправдано.

Тем не менее, стоит ли сравнивать? Если да, то насколько сильно простирается сходство? И намекает ли его существование на тот факт, что выпуск приложений для iOS и Android изначально может стать проще и быстрее в будущем? Огромный опыт ScienceSoft в услугах по разработке мобильных приложений позволяет спекулировать на этом этапе. Давайте посмотрим на это.

Синтаксис


Синтаксис Swift не просто напоминает синтаксис Kotlin — в небольших кусках кода может быть до 77% сходства строк.

Основные различия могут быть сведены к таблице ниже:

Kotlin Swift
fun func
val let
null nil
trait protocol
constructor init
: ->
Any AnyObject
!! !

Основы, классы и функции имеют очень похожие способы выражения. В отличие от Objective-C, вызовы методов Swift похожи на вызовы Java и Kotlin, с их системой пространств имен и стилем точечной нотации. Например, вот как выглядит вызов функции на двух языках:

Kotlin Swift
fun forecast(day: String, weather: String): String { func forecast(_ day: String, _ weather: String) -> String {
return «Today is $day, it's $weather.» return «Today is \(day), it's \(weather).»
} }
forecast(«Monday», «Raining») forecast(«Monday», «Raining»)

И вот как классы объявлены в обоих:

Kotlin Swift
class Residence { class Residence {
var numberOfRooms = 0 var numberOfRooms = 0
fun Description() = func Description() -> String {
«A house with $numberOfRooms.» return «A house with \(numberOfRooms).»
} }
}

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

Security


Хотя Swift и Kotlin сильны и статичны с точки зрения типизирования, они также позволяют работать с динамическими типами. Таким образом, языки остаются краткими и гибкими, позволяя заблаговременно устранять ошибки и несоответствия. Поэтому они считаются очень безопасными и особенно надежными для больших проектов.
Кроме того, эти два языка сочетают в себе подходы к обработке необязательных значений и null/nil безопасности с помощью оператора безопасной навигации "?" или типы опций. Меры предосторожности со знаком "?" выражены почти одинаково как в Kotlin, так и в Swift:

Kotlin Swift
val example: String? = null var example: String? = nil

Особенности


Помимо null (nil) безопасности, функций и классов, Kotlin и Swift обладают множеством схожих функций, включая constants, variables, generics, protocols/traits (trait заменено на interface, прим. переводчика ), enumerated types, any (anyobject), обработку ошибок и другие. Некоторые функции, реализованные на двух языках, разделяют подход, но называются по-разному из-за оригинального языка, к которому эти функции возвращаются.

Например, в Kotlin можно найти лямбда-выражения Java. В Swift это блоки или замыкания, термины из Objective-C. То, как оба выражения вызываются в код, аналогично тому, как они работают.
Kotlin Swift
{ { _in
println(«Lambda Expression») print(«Closure Expression»)
} }

Функция, известная как вычисляемые свойства в Swift, которая является определенным объявлением свойства с вызовом get, также включена в Kotlin:

Kotlin Swift
class Animal( class Animal {
var Genus: String, var Genus: String
var Species: String) { var Species: String
val binomialName: String var binomialName: String {
get() = "$Genus $Species" get {
} return "\(Genus) \(Species)"
}
}
}

Параметры имени (или именованные аргументы) также используются на обоих языках:
Kotlin Swift
fun daysoff(vacation: Int, weekends: Int): Int = vacation + weekends func daysoff(vacation: Int, weekends: Int) -> Int {
return vacation + weekends
}
daysoff(5, weekends = 8) daysoff(vacation: 5, weekends: 8)

На самом деле, вместо перечисления функций, которые существуют на обоих языках, было бы проще перечислить те, которые не имеют. А именно, только Kotlin поддерживает:

  • импорт классов
  • первичные конструкторы и классы данных
  • @annotations

В то же время, в отличие от Котлина, Swift имеет:

  • кортежи
  • typealias
  • guard statement

Значение сходства


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

Более того, сильное сходство двух языков может помочь в разработке собственных приложений для iOS и Android. Разумеется, нельзя сказать, что приложения на обеих платформах могут совместно использовать один код, поскольку языки и библиотеки для конкретных ОС не идентичны. Тем не менее, подходы к логике и функциональности приложения могут быть очень похожими, благодаря синтаксическому и функциональному сходству между Swift и Kotlin. Это может сделать разработку, тестирование и обслуживание быстрее и проще.

Универсальный язык для iOS и Android?


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

Однако такой шаг также был бы неразумным, и не только из-за конкурентоспособности бизнеса. Хотя Свифт и Котлин похожи, больше всего они похожи на своих предшественников. Другими словами, Свифт и Котлин преодолевают разрыв между Objective-C и Java. Однако переход с Java на Kotlin все же более естественный и плавный, чем переход с Java на Swift.

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

Прощальная мысль


Поскольку мобильная разработка постоянно развивается, развиваются и технологии. Вот почему через 5-10 лет и Котлин, и Свифт могут стать чем-то совершенно другим. Пока неизвестно, будут ли языки продолжать устранять разрыв между собой. Тем не менее, поскольку iOS и Android ищут наиболее удобный, безопасный и быстрый инструмент для мобильной разработки, они смогут в конечном итоге говорить на одном языке в один прекрасный день.
  • +10
  • 5,7k
  • 8
OTUS. Онлайн-образование
617,23
Цифровые навыки от ведущих экспертов
Поделиться публикацией

Комментарии 8

    0

    А поддерживается ли Kotlin в Google Fuchsia? Swift — да. Насколько я понимаю, они по понятным причинам хотят уйти от Java в native code. Swift, C++, Rust и Go для этого как раз подходят.

      +1
      А поддерживается ли Kotlin в Google Fuchsia?

      Возможно в будущем kotlin native, почему бы нет
      они по понятным причинам хотят уйти от Java в native code

      На андроиде это уже успешно сделали. Как таковой jvm уже нет
        0
        kotlin native

        Не уверен, что язык, изначально написанный под VM, будет удобен для native кода. Со Scala Native как-то не получилось.


        jvm уже нет

        Но своя VM там всё-же есть.

      0
      Серьёзно, trait-ы в Kotlin в 2019 году?
      Trait-ов в Kotline уже давно нет.
      Вы Kotlin знаете или только английский?
        0
        Я писал примечание переводчика об этом в статье.
        0
        С тем же успехом вместо Swift можно приписать TypeScript, и написать подобный бред про объединение андроид и веба/универсальные языки под все нужды.
          0

          Статья двухлетней давности. Изменилось, конечно, немногое, но, как минимум, в kotlin теперь нет ключевого слова "trait", а typealias'ы уже есть.

            0
            Я писал примечание переводчика о trait в статье.
            По поводу typealias(они в Котлине с 1.1, если не ошибаюсь) — были оставлены преднамеренно, как дополнительно доказательство того, что языки становятся всё более схожи со временем.

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое