www.machinelearningmastery.ru

Машинное обучение, нейронные сети, искусственный интеллект
Header decor

Home

Скала против Котлина: практические рекомендации для прагматичного программиста

Дата публикации Sep 14, 2017

Ява не просто язык; это экосистема. Вы можете написать код для JVM без написания Java. Это дает вам возможность использовать более современный язык. Некоторые из недостатков Java очевидны. Это заставляет вас писать много шаблонного кода. Он поддерживает функциональное программирование только в качестве запоздалой мысли; лямбда-функция - это клудж. NullPointerException - проклятие каждого программиста Java.

В 2004 году группа во главе с Мартином Одерским выпустила обновленную версию языка под названиемScala(«Масштабируемый язык»). Он добавил такие функции, как объекты для всего, функции как назначаемые данные, вывод типа и сопоставление с образцом. Он компилируется в байт-коды Java и может быть смешан с кодом Java.

Другой язык, нацеленный на те же цели,Котлин, выпущенный JetBrains в 2012 году. Он основан на опыте людей со Scala. Распространенная жалоба со Scala - медленное время компиляции, и Kotlin предлагает скорости компиляции, сопоставимые с Java. Недавно он получил большой импульс от Google, который объявил егопервоклассный язык для разработки под Android,

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

Решение проблем разными способами

Kotlin и Scala, как и Java, имеют статическую типизацию. Какой бы тип переменной ни начинался, он сохранит ее на всю жизнь. Но оба они избавляют вас от усилий по объявлению каждой переменной. Вы можете неявно объявить тип с помощью инициализатора. На любом языке вы можете написать

var count = 1

Что делаетподсчитыватьцелое число Обратите внимание, что точка с запятой не требуется. Разница между языками заключается в том, что Scala идет гораздо дальше, позволяя неявные преобразования. Если вы используетеx.transmogrify (), а такжеИкспринадлежит к классу, который не имеет функции transmogrify, что не обязательно является ошибкой. Вы можете создатьнеявныйкласс, который имеетпревращатьметод, и компилятор выяснит, не заставляя вас выполнять приведение, может ли он вмешаться, чтобы выполнить работу.

Создатели Kotlin нашли это слишком бесполезным. Это позволяет вам определитьметоды расширенияна классе, добавив пользовательские функции. Вы можете сделать это даже на стандартных типах данных. (Помните, что все является объектом, поэтому каждый тип данных является классом. Упаковка простых типов данных больше не нужна.)

Нулевые значения - огромная головная боль в Java. Scala помогает облегчить это несколькими способами. Во-первых, переменные должны быть инициализированы. Вы можете инициализировать их значением по умолчанию (var a: Int = _), который часто является нулевым, но, по крайней мере, дает вам понять, что вы делаете это Во-вторых, класс Option помогает гарантировать нулевую безопасность параметров и возвращаемых значений. Это одна из более сложных особенностей языка для понимания, но она дает вам много контроля.

Котлин получает право на точку. По умолчанию он не позволяет переменным иметь значениезначение NULL, Вы можете объявить переменную обнуляемой, если вам действительно нужно, поставив знак вопроса после типа. Если вы работали со Swift, этот подход покажется вам знакомым. Если вы используете пустые значения, компилятор делает обширную проверку, чтобы убедиться, что вы не подвергаете их риску исключения NullPointerException, и выдает ошибку времени компиляции, если это так.

Java заставляет вас использовать обычный класс или перечисление, если вы просто хотите объединить некоторые данные в объекте. Скала и Котлин предлагают несколько лучших вариантов. Скала дает вамкейс-класс, который специализированный класс для объектов данных. Он автоматически определяет функции доступа (почему Java просто не делает это?). Экземпляры сравниваются по структуре, а не по ссылке.копияФункция автоматически предоставляется для мелкого копирования.

Котлин-хкласс данныхделает почти то же самое. Основное отличие заключается в том, что в Scala имеется мощная функция сопоставления с образцом, которую Котлин не заметил.совпадениеутверждение как бионически усиленноекейсзаявление. Шаблоны могут проверять не только литеральные значения, но и типы, списки и диапазоны. Scala может выполнять сопоставление для всех типов объектов, но эта функция особенно полезна для классов case.

Scala обеспечивает сильную поддержку XML. Вы можете поместить XML непосредственно в код Scala и назначить его объекту XML. Это создает осложнения, так как<Оператор, за которым не следует пробел, может быть прочитан как начало выражения XML. Kotlin использует более традиционный подход классов для обработки объектов XML.

Классы типов - это особенность Scala, которая не имеет эквивалента в Kotlin. Класс типов определяет набор операций, которые должны поддерживать классы-члены. Это не похоже на создание подклассов в Java; класс типов может быть добавлен к типам, которые уже существуют Это позволяет разработчику создавать новые виды полиморфизма с существующими типами. Функции расширения в Kotlin - это не одно и то же, но они позволяют вам добавлять точки соприкосновения к разным типам, поэтому они отвечают некоторым из тех же потребностей.

Чувство языка

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

Для некоторых людей разница в том, что Scala больше нацелена на изучение новых идей, а Kotlin больше нацелен на получение результатов. Акцент Котлина на быстрой компиляции и удалении некоторых из более эзотерических функций Scala отражает это. Scala просто позволяет вам делать много вещей. Имя оператора: +кажется законным, и, возможно, есть причина, по которой вы хотите его использовать. Котлин более строг. Кто-то скажет разумнее.

Если вы любите функциональное программирование, Scala имеет больше возможностей, чем Kotlin. Типы классов являются функциональной функцией программирования. В качестве другого примера, Scala поддерживает каррирование и частичное применение, которые являются способами разбивать функции, которые принимают несколько аргументов. Это обеспечивает дополнительную гибкость в использовании списков аргументов. Kotlin предлагает способы сделать то же самое, но они могут быть не такими математически элегантными.

Люди, которые изучили Scala, очень любят это. Это требует больше усилий, но позволяет разработчикам делать то, что они не могут делать в Kotlin. Сторонники Kotlin часто находят, что большая гибкость больше сбивает с толку, чем полезна.

Практические соображения

Иногда реальность того, что вы пытаетесь сделать, является основным фактором. Вам нужно выбрать язык, который позволит вам выполнять работу, даже если она вам не очень нравится. Если вы собираетесь заниматься разработкой для Android, Kotlin - единственный выбор. Android не использует Oracle JVM, поэтому вы не можете использовать любой старый совместимый с JVM язык. У Kotlin есть инструменты для компиляции, отладки и запуска программного обеспечения на Android. Этовстроенный в Android Studio, начиная с версии 3.0.

За пределами Android возможности Kotlin более ограничены. Вы преданы Eclipse для своей IDE? Вы можете использовать его для работы с обоими языками, вплоть до определенного момента.Scala IDE для Eclipseболее зрелый, чемКотлин плагин, что немного больно настраивать. Некоторые пользователи сообщают о проблемах, заставляя последний работать. Ситуация для NetBeans аналогична. С ростом популярности Kotlin ситуация может стать более равной через год или два. Если вам нравится работать из командной строки, ситуация с IDE не является проблемой, и у Kotlin есть все необходимые инструменты.

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

Оригинальная статья

Footer decor

© www.machinelearningmastery.ru | Ссылки на оригиналы и авторов сохранены. | map