Сопоставление с образцом, изменения и перемещения в Rust
Одной из основных целей проекта Rust является безопасное системное программирование. Эта область обычно подразумевает императивную парадигму, что означает присутствие побочных эффектов, необходимость думать о разделяемом состоянии, и т.д. Для того, чтобы в таких условиях можно было обеспечить безопасность, программы и типы данных на Rust должны быть структурированы таким образом, чтобы их можно было статически проверить. Элементы и ограничения языка Rust совместно облегчают написание программ, проходящих эти проверки и, таким образом, обеспечивают безопасность. Например, в Rust глубоко интегрирована концепция владениям данными.
Выражение match — это специальная конструкция, в которой эти особенности и ограничения сочетаются интересным образом. match-выражение принимает входное значение, классифицирует его и затем передаёт выполнение коду, который обрабатывает соответствующий класс данных.
В этой статье мы рассмотрим, как работает match в Rust. Вот основные элементы, которые match и его дополнение, enum, объединяют в единое целое:
- Структурное сопоставление с образцом: анализ вариантов и удобство использования гораздо лучше, чем при использовании
switchв C или Java. - Исчерпывающий анализ:
matchгарантирует, что ни один вариант не пропущен. matchподдерживает и императивный, и функциональный стили: вы можете и дальше использовать операторbreak, присваивания и прочее, и вам совершенно не нужно переучиваться на стиль, основанный на выражениях;matchумеет как «заимствовать», так и «перемещать»: Rust поощряет программиста думать о владении и заимствовании данных. Выражениеmatchспроектировано в том числе с возможностью только заимствования части структуры вместо её перемещения. Это нужно для того, чтобы не передать право владения какими-либо данными раньше, чем нужно.
Мы рассмотрим каждый из этих пунктов по отдельности ниже, но для начала нам следует заложить фундамент дальнейшего обсуждения — как match выглядит и работает?


Организация Mozilla вышла на финишную прямую в подготовке языка программирования Rust 1.0. Разработчики 