[#] [Перевод] Сопоставление с образцом, изменения и перемещения в Rust
habrabot(difrex,1) — All
2015-04-29 16:00:02


Одной из основных целей проекта Rust является безопасное системное программирование. Эта область обычно подразумевает императивную парадигму, что означает присутствие побочных эффектов, необходимость думать о разделяемом состоянии, и т.д. Для того, чтобы в таких условиях можно было обеспечить безопасность, программы и типы данных на Rust должны быть структурированы таким образом, чтобы их можно было статически проверить. Элементы и ограничения языка Rust совместно облегчают написание программ, проходящих эти проверки и, таким образом, обеспечивают безопасность. Например, в Rust глубоко интегрирована концепция _владениям данными_. Выражение `match` — это специальная конструкция, в которой эти особенности и ограничения сочетаются интересным образом. `match`-выражение принимает входное значение, классифицирует его и затем передаёт выполнение коду, который обрабатывает соответствующий класс данных. В этой статье мы рассмотрим, как работает `match` в Rust. Вот основные элементы, которые `match` и его дополнение, `enum`, объединяют в единое целое:

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

Мы рассмотрим каждый из этих пунктов по отдельности ниже, но для начала нам следует заложить фундамент дальнейшего обсуждения — как `match` выглядит и работает? [Читать дальше →][1]

[1]: http://habrahabr.ru/post/256941/#habracut