Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Translate ch03-01-variables-and-mutability.md via GitLocalize #1259

Merged
merged 6 commits into from
Sep 22, 2023
6 changes: 3 additions & 3 deletions rustbook-ru/src/ch03-01-variables-and-mutability.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
## Переменные и изменяемость

Как упоминалось в разделе ["Хранение значений с помощью переменных"], по умолчанию переменные неизменяемы. Это один из многих стимулов Rust, позволяющий писать код с использованием преимущества безопасности и удобной конкурентности (concurrency), предоставляемых Rust. Тем не менее, существует возможность сделать переменные изменяемыми. Давайте рассмотрим, как и почему Rust побуждает предпочесть неизменяемость и почему иногда можно отказаться от этого.
Как упоминалось в разделе ["Хранение значений с помощью переменных"](ch02-00-guessing-game-tutorial.html#%D0%A5%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5-%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9-%D1%81-%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E-%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85), по умолчанию переменные неизменяемы. Это один из многих стимулов Rust, позволяющий писать код с использованием преимущества безопасности и удобной конкурентности (concurrency), предоставляемых Rust. Тем не менее, существует возможность сделать переменные изменяемыми. Давайте рассмотрим, как и почему Rust побуждает предпочесть неизменяемость и почему иногда можно отказаться от этого.

Если переменная является неизменяемой, то после привязки значения к имени изменить его будет нельзя. Чтобы показать это, создайте новый проект под названием *variables* в каталоге *projects* с помощью команды `cargo new variables`.

Expand Down Expand Up @@ -29,7 +29,7 @@ error[E0384]: cannot assign twice to immutable variable `x` --> src/main.rs:4:5

Важно, чтобы при попытке изменить значение, объявленное неизменяемым, выдавались ошибки времени компиляции, так как подобная ситуация может привести к сбоям. Если одна часть нашего кода функционирует исходя из уверенности в неизменяемости значения, а другая часть изменяет это значение, то велика вероятность , что первая часть не выполнит своего предназначения. Причину такой ошибки бывает трудно отследить, особенно если вторая часть кода изменяет значение лишь *изредка*. Компилятор Rust предоставляет гарантию, что если объявить значение неизменяемым, то оно действительно не изменится, а значит, не нужно следить за этим самим. Таким образом, ваш код становится проще для понимания.

Однако изменяемость может быть очень полезной и может сделать код более удобным для написания. Хотя переменные по умолчанию неизменяемы, их можно сделать изменяемыми, добавив `mut` перед именем переменной, как это было сделано в [Главе 2](ch02-00-guessing-game-tutorial.html#storing-values-with-variables). Добавление `mut` также передаёт будущим читателям кода намерение, обозначая, что другие части кода будут изменять значение этой переменной.
Однако изменяемость может быть очень полезной и может сделать код более удобным для написания. Хотя переменные по умолчанию неизменяемы, их можно сделать изменяемыми, добавив `mut` перед именем переменной, как это было сделано в [Главе 2]. Добавление `mut` также передаёт будущим читателям кода намерение, обозначая, что другие части кода будут изменять значение этой переменной.

Например, изменим *src/main.rs* на следующий код:

Expand Down Expand Up @@ -109,5 +109,5 @@ const THREE_HOURS_IN_SECONDS: u32 = 60 * 60 * 3;


[«Типы данных».]: ch03-02-data-types.html#data-types
["Хранение значений с помощью переменных"]: ch02-00-guessing-game-tutorial.html#storing-values-with-variables
[Главе 2]: ch02-00-guessing-game-tutorial.html#storing-values-with-variables
[Раздел справки Rust по вычислениям констант]: ../reference/const_eval.html
Loading