Перейти к основному содержимому
  1. Rust/

Создание и использование констант (const) и static в Rust

·564 слова·3 минуты· loading · loading · · ·Rust-basic
О Rust - Эта статья часть цикла.
Статей прочитано 0/38
0%
📚 Введение и дополнительные материалы
🟢 Начальный уровень (Rust-basic)
16 Создание и использование констант (const) и static в Rust (текущая)
Не прочитана
Не прочитана
🔵 Средний уровень (Rust-middle)

Введение
#

Константы const — один из базовых инструментов в Rust который как и переменные позволяет сохранять какие-либо данные в памяти. На первый взгляд они могут показаться похожими на переменные. Но есть несколько ключевых отличий, которые делают их полезными в определённых ситуациях. Давайте разберёмся, как их использовать, зачем они нужны и какие подводные камни могут нам встретиться.

Отличие констант от переменных
#

Начнём с главного: константы неизменяемы. В отличие от let, которое хоть и может создавать неизменяемые переменные let x = 5 но их всегда можно перезаписать через затенение let x = 6

С константами такой трюк не пройдёт: значение констант фиксировано в момент компиляции и не может быть изменено.

Два важных момента:

  1. Область видимости
    • Обычные переменные живут только внутри своего блока {} скоупа
    • Константы можно объявлять на уровне файла. Они будут доступны на протяжении всего кода в файле
  2. Когда вычисляется значение
    • Переменные могут “принимать” значения во время выполнения let user_input = read_line()
    • Константы должны быть известны при компиляции - нельзя присвоить им результат вычислений в рантайме

Как объявить константу?
#

Синтаксис объявления констант чрезвычайно прост, но имеет важные отличия от переменных.

Работа с константами в Rust
Шаг 1/2
1const MAX_CONNECTIONS: u32 = 100;
2const SECONDS_IN_HOUR: u64 = 60 * 60; // Компилятор вычислит это выражение заранее!
3
4fn main() {
5    println!("Max: {}, Seconds: {}", MAX_CONNECTIONS, SECONDS_IN_HOUR);
6}

Объявление констант

  • Константы const объявляются с явным указанием типа.
  • Значение константы вычисляется на этапе компиляции.

🔥 Важные правила:

  1. Старайтесь придерживаться именования SCREAMING_SNAKE_CASE (заглавные буквы и подчёркивание).
  2. Нельзя изменять значение константы.
  3. Нельзя затенять константу с помощью let.
  4. Нужно обязательно указать тип после двоеточия (компилятор не выводит типы констант автоматически).

Зачем же так строго? Компилятор Rust следует принципу “явное лучше неявного”. Если бы константы можно было затенять - код становился бы менее предсказуемым и проще было бы допустить ошибку.

Где используют константы?
#

Знаменитые “магические числа”
#

Вместо:

if users.len() > 100 { ... }

Лучше написать:

const MAX_USERS: usize = 100;
if users.len() > MAX_USERS { ... }

Глобальные настройки
#

Например, лимиты или таймауты, коды ошибок:

const REQUEST_TIMEOUT: u64 = 5000; // 5 секунд

Константные вычисления
#

Rust позволяет делать простые вычисления в const:

const SECONDS_IN_HOUR: u64 = 60 * 60; // Компилятор вычислит это заранее

⚠️ Что нельзя делать с константами
#

  1. Нельзя брать значение из рантайма например из пользовательского ввода
let user_input = get_user_input();  
const INPUT: &str = user_input; // Ошибка!

Для таких случаев лучше использовать обычные переменные.

  1. Нельзя изменять элементы внутри массива/коллекции

Если массив или коллекция объявлены как const их содержимое неизменяемо:

const NUMBERS: [i32; 3] = [1, 2, 3];
NUMBERS[0] = 5; // Ошибка!

Итоги
#

Константы в Rust отлично подходят:

  • Для неизменяемых значений известных заранее
  • Для замены “магических чисел” в коде
  • Для глобальных параметров которые не меняются

Не забывайте что:

  • Нельзя изменять или затенять константы
  • Значение должно вычисляться на этапе компиляции
  • SCREAMING_SNAKE_CASE- правило наименования для констант

На последок совет: если не можете придумать название константы, подумайте к какой предметной области относится ее значение, а также читайте чужой код. Лучше если это будут исходники больших документированных проектов. Так вы получите насмотренность и зафиксируете для себя правильные наименования.

История обновлений

  • Добавил примеры с кодом для демонстрации работы с константами (const).
Статья прочитана
Пожалуйста, оцените насколько статья была вам полезна и понятна
Цикл статей
О Rust - Эта статья часть цикла.
Статей прочитано 0/38
0%
📚 Введение и дополнительные материалы
🟢 Начальный уровень (Rust-basic)
16 Создание и использование констант (const) и static в Rust (текущая)
Не прочитана
Не прочитана
🔵 Средний уровень (Rust-middle)

Связанные статьи