Кортежи и массивы
Группируем значения: кортежи объединяют разные типы, массивы — фиксированный набор одного типа.
Кортеж (tuple) — упорядоченный набор значений, возможно разных типов, с фиксированной длиной.
Кортежи
Кортеж собирает несколько значений в одно составное. Типы элементов могут различаться, а длина задаётся при создании и не меняется.
fn main() {
let point = (3, 4.5, "метка"); // (i32, f64, &str)
// доступ по индексу через точку
println!("{} {} {}", point.0, point.1, point.2);
}Вывод:
3 4.5 метка
Кортеж удобно разбирать на отдельные переменные — это называется деструктуризацией. Часто так возвращают из функции несколько значений сразу.
fn min_max(data: &[i32]) -> (i32, i32) {
let mut lo = data[0];
let mut hi = data[0];
for &x in data {
if x < lo { lo = x; }
if x > hi { hi = x; }
}
(lo, hi) // возвращаем кортеж
}
fn main() {
let nums = [4, 1, 7, 3];
let (low, high) = min_max(&nums); // деструктуризация
println!("мин={low} макс={high}");
}Вывод:
мин=1 макс=7
Пустой кортеж () называется «unit» и означает «нет значимого значения» — его возвращают функции, которые ничего не возвращают по существу.
Массивы
Массив — набор элементов одного типа и фиксированной длины, известной на этапе компиляции. Тип массива записывается как [T; N], где N — длина.
fn main() {
let days: [&str; 3] = ["пн", "вт", "ср"];
let zeros = [0; 5]; // [0, 0, 0, 0, 0] — пять нулей
println!("{} дней, первый: {}", days.len(), days[0]);
println!("{:?}", zeros);
}Вывод:
3 дней, первый: пн [0, 0, 0, 0, 0]
Защита от выхода за границу
В C обращение за границу массива — источник уязвимостей. В Rust индексация проверяется: если индекс вне диапазона, программа аварийно завершится с понятной паникой, а не прочитает чужую память.
fn main() {
let a = [10, 20, 30];
let i = 5;
println!("{}", a[i]); // паника в рантайме: index out of bounds: the len is 3 but the index is 5
}Это безопасно: вместо тихого чтения постороннего участка памяти вы получаете явную ошибку. А чтобы вообще избегать паники, элементы достают через .get(i), который возвращает Option (об этом — в уроке про enum).
Когда что использовать
| Структура | Когда |
| Кортеж | несколько значений разных типов вместе, вернуть пару из функции |
Массив [T; N] | фиксированное число однотипных значений, размер известен заранее |
Вектор Vec<T> | список однотипных значений переменной длины (следующий урок) |
Итог
- Кортеж объединяет значения разных типов; доступ через
.0,.1и деструктуризацию. - Массив
[T; N]— фиксированная длина и один тип; индексация проверяется на выход за границу. - Для переменной длины используют вектор
Vec<T>— о нём дальше.