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

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

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

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

Выражения и инструкции

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

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

if — это выражение

Во многих языках if является инструкцией. В Scala конструкция if/else возвращает значение, поэтому её можно напрямую присвоить val.

Не нужно создавать отдельную переменную и присваивать ей значение в каждой ветви.

object Main {
  def main(args: Array[String]): Unit = {
    val temp = 30
    val label = if (temp > 25) "hot" else "mild"
    println(label)
  }
}

Блоки — это выражения

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

Поэтому можно вычислить промежуточные значения, а затем завершить блок результатом.

object Main {
  def main(args: Array[String]): Unit = {
    val result = {
      val a = 2
      val b = 3
      a * b
    }
    println(result)
  }
}

match — это выражение

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

object Main {
  def main(args: Array[String]): Unit = {
    val day = 3
    val name = day match {
      case 1 => "Mon"
      case 2 => "Tue"
      case 3 => "Wed"
      case _ => "Other"
    }
    println(name)
  }
}

Тип Unit

Некоторые выражения существуют только ради побочного эффекта, например println. Они возвращают Unit, записываемый как ().

Unit похож на void в других языках, но при этом является настоящим значением.

object Main {
  def main(args: Array[String]): Unit = {
    val nothing: Unit = println("side effect")
    println(nothing)
  }
}

Возврат из функций

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

В этом примере тело функции состоит из одного выражения.

object Main {
  def max(a: Int, b: Int): Int = if (a > b) a else b
  def main(args: Array[String]): Unit = {
    println(max(7, 4))
  }
}

Функции, ориентированные на выражения

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

object Main {
  def discount(price: Double): Double = {
    val rate = if (price > 100) 0.2 else 0.1
    price * (1 - rate)
  }
  def main(args: Array[String]): Unit = {
    println(discount(150.0))
  }
}

Изменение не требуется

Поскольку if и match являются выражениями, их результат можно присвоить val, не изменяя var.

Так код становится чище и более функциональным.

object Main {
  def main(args: Array[String]): Unit = {
    val score = 85
    val grade = if (score >= 90) "A"
      else if (score >= 80) "B"
      else "C"
    println(grade)
  }
}

Композиция выражений

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

Именно эта возможность композиции во многом объясняет выразительность Scala.

object Main {
  def main(args: Array[String]): Unit = {
    val n = 7
    val message = "n is " + (if (n % 2 == 0) "even" else "odd")
    println(message)
  }
}

Почему это важно

Код, ориентированный на выражения:

  • уменьшает потребность в изменяемых переменных
  • явно показывает поток значений
  • естественно объединяется в более крупные программы
  • идеально сочетается с неизменяемостью

Всё вместе

Здесь блочное выражение содержит выражение if, и всё присваивается одному неизменяемому результату.

object Main {
  def main(args: Array[String]): Unit = {
    val total = {
      val items = 3
      val each = 12
      val raw = items * each
      if (raw > 30) raw - 5 else raw
    }
    println(total)
  }
}

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

Проверьте, насколько хорошо Вы понимаете выражения.

Итоги

Вы узнали, что в Scala почти всё является выражением:

  • if/else, match и блоки возвращают значения
  • Значение блока — это его последнее выражение
  • Выражения с побочным эффектом возвращают Unit (())
  • Последнее выражение функции является её возвращаемым значением
  • Это уменьшает количество изменений и улучшает возможность композиции

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

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

Да — полный текст урока «Выражения вместо инструкций» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 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 структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

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

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

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

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

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

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