Зачем нужен Scala?

Встре­ча­ли в вакан­си­ях пози­цию раз­ра­бот­чи­ка на 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-вакансий на рын­ке, что­бы гово­рить о попу­ляр­но­сти это­го язы­ка. На это есть несколь­ко причин:

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

Синтаксис

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

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

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

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

Услов­ные опе­ра­то­ры и цик­лы. Всё при­выч­но — 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» в Запис­ках задум­чи­во­го про­грам­ми­ста — про­сто, понят­но, но ино­гда автор не даёт подроб­ных объ­яс­не­ний тому, что про­ис­хо­дит в коде.