0Pricing
Learn Rust Coding · Урок

Строки и &str

Собственный и заимствованный текст

«Строки и &str» — бесплатный урок Learn Rust Coding на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Learn Rust Coding, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Learn Rust Coding содержит 4 уроков всего.

Два типа строк

В Rust есть два основных текстовых типа:

  • String — принадлежащая программе, динамически растущая строка.
  • &str — заимствованный срез строки, представляющий собой представление текста.
fn main() {
    let owned: String = String::from("hello");
    let borrowed: &str = "world";
    println!("{} {}", owned, borrowed);
}

Строковые литералы имеют тип &str

Если заключить текст в двойные кавычки, получится значение типа &str. Оно неизменно и хранится в двоичном файле программы.

fn main() {
    let greeting = "Hi there"; // type is &str
    println!("{}", greeting);
}

Создание String

Создайте принадлежащую программе строку String с помощью String::from или метода .to_string().

fn main() {
    let a = String::from("abc");
    let b = "xyz".to_string();
    println!("{} {}", a, b);
}

Увеличение строки

Поскольку String принадлежит программе и может расти, к ней можно добавлять текст с помощью push_str и push.

fn main() {
    let mut s = String::from("Hello");
    s.push_str(", ");
    s.push_str("Rust");
    s.push('!');
    println!("{}", s);
}

Объединение строк

Объединяйте строки с помощью оператора + или макроса format!. Макрос format! не потребляет свои входные данные.

fn main() {
    let first = String::from("Hello");
    let second = String::from("World");
    let joined = format!("{} {}", first, second);
    println!("{}", joined);
}

Заимствование String как &str

Значение String можно автоматически заимствовать как &str. Благодаря этому функции могут принимать любой из этих типов.

fn print_text(text: &str) {
    println!("text: {}", text);
}

fn main() {
    let owned = String::from("owned");
    print_text(&owned);
    print_text("literal");
}

Почему параметрам предпочтителен &str

Функции обычно принимают &str, а не String. Это гибче: вызывающий код может передать принадлежащую ему строку, литерал или срез.

fn shout(s: &str) -> String {
    s.to_uppercase()
}

fn main() {
    println!("{}", shout("quiet"));
}

Длина в байтах

Метод len() возвращает длину в байтах, а не количество символов. В тексте ASCII на каждый символ приходится один байт.

fn main() {
    let s = "hello";
    println!("{} bytes", s.len());
}

Проверка содержимого

К полезным методам чтения относятся contains, starts_with и is_empty.

fn main() {
    let s = "hello world";
    println!("{}", s.contains("world"));
    println!("{}", s.starts_with("hello"));
}

Различие во владении

String владеет своими данными в куче и отвечает за их освобождение. &str только заимствует существующие данные и ничем не владеет.

fn main() {
    let owned = String::from("data");
    let view: &str = &owned[0..2];
    println!("owned {} view {}", owned, view);
}

Преобразование между ними

Преобразовывать значения можно в обоих направлениях:

  • Из &str в String: .to_string() или String::from.
  • Из String в &str: &s или s.as_str().
fn main() {
    let s = String::from("convert");
    let slice: &str = s.as_str();
    let back: String = slice.to_string();
    println!("{} {}", slice, back);
}

Быстрая проверка

Вспомните различие между двумя текстовыми типами.

Повторение

Строки в Rust:

  • String — принадлежащая программе, динамически растущая строка, размещённая в куче.
  • &str — заимствованный срез или представление текста; именно такой тип имеют литералы.
  • Создаются с помощью String::from или to_string(), а увеличиваются с помощью push_str.
  • Для параметров функций предпочтителен &str.
fn main() {
    let mut msg = String::from("Rust");
    msg.push_str(" rocks");
    let view: &str = &msg;
    println!("{} ({} bytes)", view, view.len());
}

Часто задаваемые вопросы

Урок «Строки и &str» бесплатный?

Да — полный текст урока «Строки и &str» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Learn Rust Coding, подпишись на CoddyKit PRO. Курс Learn Rust Coding содержит 4 уроков всего.

Чему я научусь в уроке «Строки и &str»?

Собственный и заимствованный текст Ты практикуешь Learn Rust Coding с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Learn Rust Coding?

Предыдущий опыт не требуется. Learn Rust Coding на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.

Сколько времени занимает урок «Строки и &str»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Learn Rust Coding?

Да. Каждый урок Learn Rust Coding включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Векторы
  2. Строки и &str
  3. HashMaps
  4. Итерация по коллекциям
← Назад к Learn Rust Coding