Skip to content

Commit

Permalink
Merge pull request #1254 from rust-lang-ru/gitlocalize-26263
Browse files Browse the repository at this point in the history
Translate ch03-02-data-types.md via GitLocalize
  • Loading branch information
ava57r authored Sep 17, 2023
2 parents 2fb0455 + 2554c88 commit 1d36a2d
Showing 1 changed file with 6 additions and 7 deletions.
13 changes: 6 additions & 7 deletions rustbook-ru/src/ch03-02-data-types.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Типы данных
## Типы Данных

Каждое значение в Rust относится к определённому *типу данных*, который указывает на вид данных, что позволяет Rust знать, как работать с этими данными. Мы рассмотрим два подмножества типов данных: скалярные и составные.

Expand Down Expand Up @@ -28,10 +28,10 @@ let guess: u32 = "42".parse().expect("Not a number!");

Длина | Со знаком | Без знака
--- | --- | ---
8 бит | `i8` | `u8`
8-бит | `i8` | `u8`
16 бит | `i16` | `u16`
32 бит | `i32` | `u32`
64 бит | `i64` | `u64`
32 бита | `i32` | `u32`
64 бита | `i64` | `u64`
128 бит | `i128` | `u128`
архитектурно-зависимая | `isize` | `usize`

Expand All @@ -45,7 +45,7 @@ let guess: u32 = "42".parse().expect("Not a number!");

<span class="caption">Таблица 3-2: Целочисленные литералы в Rust</span>

Числовые литералы | Пример
Числовой литерал | Пример
--- | ---
Десятичный | `98_222`
Шестнадцатеричный | `0xff`
Expand All @@ -55,8 +55,7 @@ let guess: u32 = "42".parse().expect("Not a number!");

Как же узнать, какой тип целого числа использовать? Если вы не уверены, значения по умолчанию в Rust, как правило, подходят для начала: целочисленные типы по умолчанию `i32`. Основной случай, в котором вы должны использовать `isize` или `usize`, — это индексация какой-либо коллекции.

> <h>Целочисленное переполнение</h> Допустим, имеется переменная типа `u8`, которая может хранить значения от 0 до 255. Если попытаться изменить переменную на значение вне этого диапазона, например, 256, произойдёт *целочисленное переполнение*, что может привести к одному из двух вариантов поведения. Если выполняется компиляция в режиме отладки, Rust включает проверку на целочисленное переполнение, приводящую вашу программу к *панике* во время выполнения, когда возникает такое поведение. Rust использует термин *паника(panicking)*, когда программа завершается с ошибкой. Мы обсудим панику более подробно в разделе ["Неустранимые ошибки с `panic!`"] в главе 9. . При компиляции в режиме release с флагом `--release`, Rust *не* включает проверки на целочисленное переполнение, которое вызывает панику. Вместо этого, в случае переполнения, Rust выполняет *обёртывание второго дополнения*. Проще говоря, значения, превышающие максимальное значение, которое может хранить тип, "оборачиваются" к минимальному из значений, которые может хранить тип. В случае `u8` значение 256 становится 0, значение 257 становится 1, и так далее. Программа не запаникует, но переменная будет иметь значение, которое, вероятно, не будет соответствовать вашим ожиданиям. Полагаться на поведение обёртывания целочисленного переполнения считается ошибкой.
> Для явной обработки возможности переполнения существует семейство методов, предоставляемых стандартной библиотекой для примитивных числовых типов:
> <h>Целочисленное переполнение</h> Допустим, имеется переменная типа `u8`, которая может хранить значения от 0 до 255. Если попытаться изменить переменную на значение вне этого диапазона, например, 256, произойдёт *целочисленное переполнение*, что может привести к одному из двух вариантов поведения. Если выполняется компиляция в режиме отладки, Rust включает проверку на целочисленное переполнение, приводящую вашу программу к *панике* во время выполнения, когда возникает такое поведение. Rust использует термин *паника(panicking)*, когда программа завершается с ошибкой. Мы обсудим панику более подробно в разделе ["Неустранимые ошибки с `panic!`"] в главе 9. . При компиляции в режиме release с флагом `--release`, Rust *не* включает проверки на целочисленное переполнение, которое вызывает панику. Вместо этого, в случае переполнения, Rust выполняет *обёртывание второго дополнения*. Проще говоря, значения, превышающие максимальное значение, которое может хранить тип, "оборачиваются" к минимальному из значений, которые может хранить тип. В случае `u8` значение 256 становится 0, значение 257 становится 1, и так далее. Программа не запаникует, но переменная будет иметь значение, которое, вероятно, не будет соответствовать вашим ожиданиям. Полагаться на поведение обёртывания целочисленного переполнения считается ошибкой. Для явной обработки возможности переполнения существует семейство методов, предоставляемых стандартной библиотекой для примитивных числовых типов:
> - Обёртывание во всех режимах с помощью методов `wrapping_*`, таких как `wrapping_add`.
> - Возврат значения `None` при переполнении с помощью методов `checked_*`.
> - Возврат значения и логический индикатор, указывающий, произошло ли переполнение при использовании методов `overflowing_*`.
Expand Down

0 comments on commit 1d36a2d

Please sign in to comment.