Выражения вместо инструкций
Каждая конструкция возвращает значение.
«Выражения вместо инструкций» — бесплатный урок 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 2if как выражение
Конструкция 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 — локальная установка не требуется.
Все уроки этого курса
- val и var
- Базовые типы и литералы
- Вывод типов
- Выражения вместо инструкций