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

Выражения 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 — локальная установка не требуется.

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

  1. Выражения match
  2. Сопоставление типов и значений
  3. Защитные условия и привязка
  4. Деструктуризация
← Назад к Scala for Backend Engineering & Functional Programming