Скала что за программа

Встречали в вакансиях позицию разработчика на Scala? Это редкий зверь, но платят нормально. Разберёмся, что это такое и зачем нужно.

Разработчик языка рассчитывал, что Scala станет преемником Java: он наследует многое хорошее из Java, работает по схожим принципам и добавляет что-то своё. И хотя Scala не стал таким же распространённым, всё равно стоит понять, из чего он сделан.

Плюсы Scala

Scala, как и Java, работает под JVM — виртуальной машиной Java (Java Virtual Machine). JVM — это такая прослойка между программой и железом. Благодаря этой прослойке один и тот же код можно исполнить на чём угодно, для чего есть JVM: и на компьютере, и на терминале оплаты, и на умном холодильнике. Не нужно каждый раз думать: «А какие там драйверы экрана?» или «С какой скоростью работает сетевой шлюз?» — всё это берёт на себя JVM, а мы пишем только логику и интерфейс.

Что это нам даёт.

  • Scala совместим с Java-командами, поэтому если вы знаете Java, то сможете перейти и на Scala.
  • Scala может работать с любым кодом на Java, независимо от его сложности.
  • Чистейшая, незамутнённая объектно-ориентированность: даже сама программа — это один большой объект.
  • Сильные механизмы абстракции позволяют одинаково просто программировать большие и маленькие системы и легко масштабировать их.
  • Объединены объектно-ориентированный и функциональный подходы — в теории это должно способствовать распространению языка.

Минусы Scala

Но если всё было бы так просто, про Java все давно бы забыли, но этого не произошло. Более того, сейчас не так много Scala-вакансий на рынке, чтобы говорить о популярности этого языка. На это есть несколько причин:

30 ДНЕЙ ПОДРЯД ПО ПРОГРАММЕ ДУЭЙНА ДЖОНСОНА, ВОТ ЧТО ВЫШЛО! THE ROCK WORKOUT

  • писать на Scala сложнее, чем на Java, потому что из-за влияния объектно-ориентированного подхода многое приходится делать через объекты, а это не всегда удобно;
  • читать Scala-код сложнее, чем ту же самую программу на Java;
  • медленная компиляция — критичное место для больших проектов, когда постоянно нужно тестировать новые версии;
  • Scala-программирование требует совершенно другого подхода к архитектуре и логике построения кода, но не все хотят тратить на это время, если можно взять уже готовое Java-решение.

Синтаксис

С точки зрения кода в Scala всё то же самое, что и в Java-языках, кроме некоторых ООП-особенностей, поэтому начнём с привычных деталей, а потом перейдём к отличиям.

Основы . Каждая команда заканчивается точкой с запятой, а присваивание и математические операторы такие же, как в Java и JavaScript.

Типов данных — много, как в любом типизированном языке. Как и в Ruby, каждый тип — это объект, который можно менять, добавлять в него новые методы.

Переменные. Объявляются с помощью служебных слов val и var, но разница между ними в Scala настолько размытая и непрозрачная, что иногда даже опытным разработчикам сложно понять, какое слово будет уместнее в каждой ситуации.

Читайте также:
Что за программа ravbg64

СКАЛА ДЖОНСОН ОБЪЯСНЯЕТ — ОТКУДА МЕМ?

Условные операторы и циклы. Всё привычно — for, while и do-while, но с одним отличием: в цикле for применяется упрощённая запись для организации переменной цикла. Обратите внимание на код ниже — сколько танцев с бубном ради одного цикла, который сам занимает три строки (не считая комментария):

// создаём объект, потому что это Scala
object ForLoopDemo // определяем функцию main
def main(args: Array[String]) // делаем цикл от нуля до 5 включительно, переменная цикла — counter
for (counter <- 0 to 5)// выводим переменную цикла на экран
println(counter);
>
>

Кто и для чего использует Scala

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

Второе преимущество — возможность запустить код в любом JVM-окружении, поэтому Scala выбирают те, кому нравится объектный подход, но не нравится то, как это сделано в Java.

Основные популярные фреймворки — Play и Lift, и их используют в основном СМИ и новостные сайты:

  • BBC,
  • Coursera,
  • Guardian,
  • The Huffington Post,
  • LinkedIn,
  • The New York Times,
  • Foursquare.

С чего начать

Если хотите изучить основы Scala и попробовать свои силы в объектно-ориентированном программировании в мире Java, то вот с чего можно начать.

Большая статья в RSDN Magazine — « Обзор языка программирования Scala ». Хороший и понятный материал, но подан в сухом академическом стиле.

« Scala в примерах » в Викиучебнике — написано попроще, но без введения для новичков.

« Руководство по Scala » в Записках задумчивого программиста — просто, понятно, но иногда автор не даёт подробных объяснений тому, что происходит в коде.

Источник: dzen.ru

Плюсы и минусы Scala

Когда Scala создавался, разработчики предполагали, что он станет преемником языка Java, для чего были предпосылки. И правда — Scala наследует довольно много плюсов Java, а еще и работает по схожим принципам, ну и, разумеется, добавляет нечто свое. Однако по ряду причин преемником Java язык Scala не стал. Чтобы разобраться почему, давайте рассмотрим, каковы достоинства и недостатки этого языка.

1_1801_4f11cf_1-1801-244974.png

Преимущества

Как и Java, язык программирования Scala работает под виртуальной машиной JVM — прослойкой между железом и ПО. Благодаря наличию JVM вы можете исполнить тот же самый код на разных устройствах: компьютере, терминале оплаты и т. п. Таким образом, разработчик пишет лишь интерфейс и логику. Из вышесказанного вытекают следующие плюсы:

  1. Scala совместим с командами Java. Знаете Java? Вы относительно быстро сможете перейти на Scala.
  2. Scala способен работать с любым Java-кодом вне зависимости от его сложности.
  3. Язык характеризуется чистой объектно-ориентированностью — даже сама программа является одним большим объектом.
  4. Существуют мощные механизмы абстракции, позволяющие относительно просто разрабатывать как большие, так и маленькие системы, плюс еще и масштабировать их.
  5. В языке объединяются 2 подхода: объектно-ориентированный и функциональный.

1-1801-9b6617.png

Недостатки

Естественно, не так уж все идеально, иначе про язык Java уже давно бы забыли. Скажем так, вакансий по Java на рынке труда заметно больше, чем по Scala. И это неспроста:

  • считается, то разрабатывать на Scala несколько сложнее, если сравнивать с Java — все из-за существенного влияния ООП (очень многое надо делать через объекты, что не всегда достаточно удобно);
  • сложнее не только писать на Scala, но и читать Scala-код;
  • компиляция является более медленной, что плохо в случае больших проектов;
  • разработка на Scala потребует от вас несколько иного подхода к логике и архитектуре построения программного кода.
Читайте также:
Что за программа selector

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

Источник: otus.ru

Scala

История

В начале 2000-х Одерски работал над языком Pizza, который был создан как площадка для экспериментов над языком Java. В Pizza Одерски сделал параметрический полиморфизм, функции-объекты первого класса, паттерн-матчинг и прочую функциональщину. Однако только дженерики в итоге перекочевали в Джаву, а от остального отказались. Дабы не пропадать добру, Одерски решил взять свои наработки и создал в 2003 году первый компилятор языка Scala, который как и Java, компилируется в байт-код JVM.

Java++

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

Ходят слухи [1], что Scala для Java есть ни что иное как C++ для C. Но никто (даже труп страуса) в совершенстве не знает C++. Каждая C++ команда изобретает свой C++ диалект и презирает другие команды, которые пишут на «другом C++». Такая же участь может постигнуть и Scala. Однако есть и противоположное мнение [2], что «в отличие от C++, Scala становится тем проще, чем дальше её изучаешь».

В любом случае, факт остается фактом, что одну и ту же задачу на Scala можно решить многими способами, даже если это простой «Hello World», и этот аргумент явно не в пользу Scala.

ООП + ФП

Ниша Scala

Scala — это ООП + ФП. То есть можно писать и ООП, можно и ФП. А некоторые скалолазы умудряются даже неплохо совмещать.

ООП в Скале отличается от ООП в жабе/C#: в Скале есть множественное наследование. Но множественное наследование это правильное, не как в плюсах — реализуется через trait’ы (они же примеси — интерфейсы, у которых можно реализовывать методы), причем важен порядок наследования от примесей. Гуглить на тему stackable modifications, если интересно.

ФП в Скале также отличается от ФП в ML, Haskell, F# и других чисто функциональных (без ООП) языках со статической типизацией. Главное отличие — отсутствие type union’ов (которое, хотя, легко имитируется через наследование и case-классы). Второе — это отсутствие полного вывода типов, из-за чего программы на Scala получаются зачастую более громоздкими, чем например в Хаскеле, потому что часто приходится явно указывать типы параметризованных классов.

Читайте также:
Текстовый процессор что за программа

Фичи языка

  • Функции ничем не хуже, чем другие типы данных. Функции могут быть объявлены внутри других функций, могут возвращаться из функций и приниматься в качестве их аргументов.
  • Вменяемые обобщенные типы

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

class Tree[Type] var node: Type = _ var left : Tree[Type] = _ var right : Tree[Type] = _ >

А вот класс Tree, который принимает в качестве параметра типа только числовые типы, то есть

любой из числовых типов Scala и их потомков

class NumericTree[Type AnyVal] var node : Type = _ var left : Tree[Type] = _ var right : Tree[Type] = _ >

. Соответсвенно, можно указать и ограничение на типы предков и даже оба ограничения: и на предков и на потомков параметра обобщённого типа.

  • case-классы и паттерн-матчинг:

sealed trait Tree case class Leaf(val v: Int) extends Tree case class Node(val left: Tree, val right: Tree) extends Tree /** Посчитать сумму дерева */ def sum(tree: Tree): Int = tree match case Leaf(v) => v case Node(left, right) => sum(left) + sum(right) >

Аналогичный жабакод занял бы в 10 раз больше места.

Признак sealed означает, что иерархия закрыта и никакой анонимус не сможет отнаследоваться от trait’а Tree . Оператор case означает, что Scala-компайлер нагенерит для классов Leaf и Node кучу шаблонных методов типа equals , hashCode (чтобы сравнивать) и apply (чтобы не писать каждый раз new).

Особенно крутая вещь — можно матчиться по вложенным паттернам (например, Node(Leaf(5), Leaf(v)) ).

  • object — встроенный в язык правильный синглтон (без всей этой вашей double checked locking и другой громоздкой хуиты)
  • lazy — инициализация происходит в момент первого использования, что в некоторых задачах экономит память
  • for-компрехеншены. Например, найти названия всех книг, среди авторов которых есть тот, чья фамилия начинается со слова Gosling:

for b books; a b.authors if a startsWith «Gosling» > yield b.title

  • В Scala есть implicit’ы, с помощью которых можно неявно привести что угодно к чему угодно. При чрезмерном использовании делает код абсолютно нечитаемым.
  • Могучая иерархия коллекций с кучей методов. В одном только интерфейсе Iterable over 104 метода. Пример использования:

Создаем список из чисел от 1 до 20 и делим его на два списка: с чётными и нечётными элементами

val (odd, even) = (1 to 20).toList.partition(f => f % 2 == 0)

, а затем считаем их суммы: можно так

val sumEven = even.fold(0)(_ + _) val sumOdd = odd.fold(0)(_ + _)

, а можно и так

val sumEven = even.sum; val sumOdd = odd.sum;

Анонимусу может быть интересно, каким образом работает odd.sum . Ответ прост: есть implicit из Int в специальный класс Numeric , а метод sum принимает на вход этот самый Numeric (неявно).

Где используется

Ви таки будете смеяться, но — в банках. То есть там же, где и сракле.

Источник: neolurk.org

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru