Scala for Backend Engineering & Functional Programming · Урок

Выражения вместо инструкций

Каждая конструкция возвращает значение.

Урок 4 из 413 шагов

«Выражения вместо инструкций» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.

Всё является выражением

Во многих языках if и блоки являются инструкциями: они выполняют действие, но не возвращают значение. В Scala это выражения, вычисляющие значение.

Это изменение лежит в основе функционального программирования на Scala.

val max = if (3 > 2) 3 else 2

if как выражение

Конструкция if/else в Scala возвращает значение выполненной ветви. Этот результат можно сразу присвоить val.

Изменяемая переменная, которую нужно присваивать внутри ветвей, не требуется.

object Main extends App {
  val temp = 18
  val label = if (temp > 20) "warm" else "cool"
  println(label)
}

Блоки возвращают свою последнюю строку

Блок { ... } сам является выражением. Его значение — это значение последнего выражения внутри него.

Здесь блок вычисляется в 30, которое становится значением result.

object Main extends App {
  val result = {
    val a = 10
    val b = 20
    a + b
  }
  println(result)
}

Явный return не требуется

Поскольку тело метода является выражением, его значение — это просто последнее вычисленное выражение. Ключевое слово return используется редко.

Оба приведённых ниже метода ведут себя одинаково, но в идиоматичном варианте return опущен.

def double(x: Int) = x * 2
// instead of: def double(x: Int) = { return x * 2 }

match тоже является выражением

Сопоставление с образцом с помощью match также возвращает значение, поэтому отлично подходит для преобразования входных данных в результаты.

Каждая ветвь case возвращает значение своей ветви.

object Main extends App {
  val day = 3
  val name = day match {
    case 1 => "Mon"
    case 3 => "Wed"
    case _ => "Other"
  }
  println(name)
}

Выражения можно комбинировать

Поскольку выражения возвращают значения, их можно свободно вкладывать и объединять.

if может быть аргументом функции или частью более крупного вычисления — временные переменные не нужны.

object Main extends App {
  val n = 7
  println("sign: " + (if (n >= 0) "+" else "-"))
}

Инструкции всё ещё существуют

Не всё возвращает полезное значение. Операции, выполняемые только ради побочных эффектов, например println или присваивание, вычисляются в Unit.

Это выражения Scala, похожие на инструкции.

val x: Unit = println("hello") // value is ()

Избегайте var при работе с выражениями

Стиль с выражениями позволяет заменить шаблоны с изменяемым var. Вместо объявления var и присваивания ему значения в ветвях присвойте всё выражение if переменной val.

object Main extends App {
  val score = 85
  val grade = if (score >= 90) "A" else if (score >= 80) "B" else "C"
  println(grade)
}

for возвращает значения

Конструкция for с yield является выражением, создающим новую коллекцию, а не просто выполняющим цикл ради побочных эффектов.

Так итерация превращается в преобразование, создающее значение.

object Main extends App {
  val squares = for (i <- 1 to 4) yield i * i
  println(squares)
}

Почему это важно для серверного кода

Код, ориентированный на выражения, обычно короче, содержит меньше подвижных частей и его проще тестировать.

  • Меньше изменяемых переменных — меньше ошибок.
  • Результаты естественным образом следуют из входных данных.
  • Он хорошо сочетается с функциональными библиотеками Scala.

Стиль инструкций и стиль выражений

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

Scala позволяет использовать оба подхода, но отдаёт предпочтение стилю выражений.

var s = ""            // statement style
if (true) s = "yes" else s = "no"

val e = if (true) "yes" else "no" // expression style

Быстрая проверка

Что вычисляется в результате if/else в Scala?

Итоги

Scala отдаёт предпочтение выражениям, возвращающим значения, а не инструкциям, которые только изменяют состояние.

  • if, match, блоки и for/yield возвращают значения.
  • Тела методов возвращают своё последнее выражение; return редко нужен.
  • Код с побочными эффектами возвращает Unit.
  • Такой стиль уменьшает использование var и количество ошибок.
Можно начать бесплатно

Изучай Scala с ИИ-репетитором — бесплатно

Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.

Курсы
39
Уроки
143

Часто задаваемые вопросы

Урок «Выражения вместо инструкций» бесплатный?

Да — полный текст урока «Выражения вместо инструкций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.

Чему я научусь в уроке «Выражения вместо инструкций»?

Каждая конструкция возвращает значение. Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?

Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.

Сколько времени занимает урок «Выражения вместо инструкций»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?

Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. val и var
  2. Базовые типы и литералы
  3. Вывод типов
  4. Выражения вместо инструкций
← Назад к Scala for Backend Engineering & Functional Programming