Выражения match
Выполняйте ветвление по форме данных
«Выражения match» — бесплатный урок Scala for Backend Engineering & Functional Programming на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Scala for Backend Engineering & Functional Programming, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Что такое match?
match — мощная конструкция ветвления в Scala. Ей передаётся значение и последовательность шаблонов case, после чего выполняется первая ветвь, соответствующая шаблону.
Представляйте её как более функциональный вариант оператора switch, основанный на выражениях.
Базовый синтаксис
Запись выглядит так: value match { case pattern => result }. Каждый case определяет шаблон и код, который нужно выполнить при совпадении.
Поскольку match является выражением, вся конструкция возвращает значение.
object Main {
def main(args: Array[String]): Unit = {
val n = 2
val word = n match {
case 1 => "one"
case 2 => "two"
case 3 => "three"
}
println(word)
}
}Шаблон подстановки
Символ подчёркивания _ — это шаблон подстановки, соответствующий чему угодно. Используйте его в конце как вариант по умолчанию, перехватывающий все остальные случаи.
Без него значение, для которого не найдено совпадение, вызовет во время выполнения ошибку MatchError.
object Main {
def main(args: Array[String]): Unit = {
val n = 9
val word = n match {
case 1 => "one"
case 2 => "two"
case _ => "many"
}
println(word)
}
}Сопоставление строк
Шаблоны применимы не только к числам. Вы можете напрямую сопоставлять строковые литералы.
object Main {
def main(args: Array[String]): Unit = {
val cmd = "start"
val msg = cmd match {
case "start" => "Starting up"
case "stop" => "Shutting down"
case _ => "Unknown command"
}
println(msg)
}
}match возвращает значение
Поскольку каждая ветвь возвращает значение, результат match можно присвоить val или использовать непосредственно в выражении.
Это делает код более чистым и позволяет не использовать изменяемые переменные.
object Main {
def main(args: Array[String]): Unit = {
val light = "red"
println(s"Action: " + (light match {
case "red" => "stop"
case "green" => "go"
case _ => "caution"
}))
}
}Объединение вариантов
В одном варианте можно сопоставить несколько значений с помощью | (вертикальной черты). Все перечисленные значения ведут к одной и той же ветви.
object Main {
def main(args: Array[String]): Unit = {
val day = "Sat"
val kind = day match {
case "Sat" | "Sun" => "weekend"
case _ => "weekday"
}
println(kind)
}
}match в функции
Распространённый приём — сделать всё тело функции одним выражением match. Результат сопоставления становится возвращаемым значением.
object Main {
def describe(n: Int): String = n match {
case 0 => "zero"
case 1 => "one"
case _ => "other"
}
def main(args: Array[String]): Unit = {
println(describe(0))
println(describe(5))
}
}Привязка всего значения
В варианте с подстановкой можно привязать сопоставленное значение к имени с помощью case other =>. Затем в этой ветви можно использовать other.
object Main {
def main(args: Array[String]): Unit = {
val n = 42
val result = n match {
case 0 => "nothing"
case other => s"got $other"
}
println(result)
}
}Порядок имеет значение
Варианты проверяются сверху вниз, и выигрывает первое совпадение. Размещайте более специфичные шаблоны перед общими.
Слишком рано размещённый шаблон подстановки скроет расположенные ниже варианты.
object Main {
def main(args: Array[String]): Unit = {
val n = 1
val msg = n match {
case 1 => "specific one"
case _ => "anything else"
}
println(msg)
}
}Зачем использовать match?
Сопоставление с шаблоном занимает центральное место в Scala, потому что оно:
- Удобно читается при ветвлении на несколько вариантов
- Возвращает значение как выражение
- Масштабируется до типов, структур данных и условий
- Может проверяться компилятором на полноту
Собираем всё вместе
Перед Вами небольшой классификатор, использующий литералы, объединённый вариант и вариант по умолчанию.
object Main {
def grade(score: Int): String = score match {
case 10 | 9 => "excellent"
case 8 | 7 => "good"
case _ => "keep trying"
}
def main(args: Array[String]): Unit = {
println(grade(9))
println(grade(7))
println(grade(3))
}
}Быстрая проверка
Проверьте своё понимание выражений match.
Итоги
Вы изучили основы match:
- Синтаксис:
value match { case pattern => result } _— шаблон подстановки, перехватывающий остальные случаи- Объединение значений с помощью
| match— выражение, возвращающее значение- Варианты проверяются сверху вниз; выигрывает первое совпадение
Часто задаваемые вопросы
Урок «Выражения match» бесплатный?
Да — полный текст урока «Выражения match» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Scala for Backend Engineering & Functional Programming, подпишись на CoddyKit PRO. Курс Scala for Backend Engineering & Functional Programming содержит 4 уроков всего.
Чему я научусь в уроке «Выражения match»?
Выполняйте ветвление по форме данных Ты практикуешь Scala for Backend Engineering & Functional Programming с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Scala for Backend Engineering & Functional Programming?
Предыдущий опыт не требуется. Scala for Backend Engineering & Functional Programming на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.
Сколько времени занимает урок «Выражения match»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Scala for Backend Engineering & Functional Programming?
Да. Каждый урок Scala for Backend Engineering & Functional Programming включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.