Выражения вместо инструкций
Всё является выражением
«Выражения вместо инструкций» — бесплатный урок 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 — локальная установка не требуется.
Все уроки этого курса
- Использование REPL
- val, var и типы
- Выражения вместо инструкций
- Интерполяция строк