String и &str
Часть раздела Logic & Flow путешествия по Rust на Coddy — урок 54 из 66.
В Rust есть два основных строковых типа, которые служат для разных целей: String и &str. Понимание разницы между ними крайне важно для эффективной работы с текстом в Rust.
String — это владеемая строка, размещенная в куче, которую вы можете изменять. Когда вы создаете String, ваша программа владеет этими данными и несет ответственность за управление их памятью. Вы можете увеличивать её, уменьшать и изменять её содержимое, так как она является изменяемой, если объявлена с помощью mut.
let mut my_string = String::from("Hello");
my_string.push_str(" World"); // Это работает, так как String является владеемым и изменяемымВ отличие от этого, &str (произносится как «string slice») — это заимствованное неизменяемое представление строковых данных. Оно не владеет данными, на которые указывает — это просто ссылка на некоторое строковое содержимое, которое существует в другом месте. Строковые литералы, такие как "Hello", на самом деле имеют тип &str.
let my_slice: &str = "Hello World"; // Это строковый срезПредставьте, что String — это владение книгой, в которой вы можете писать и которую можете изменять, в то время как &str — это как если бы вы одолжили чужую книгу: вы можете её читать, но не можете изменять. Это различие является основополагающим для системы владения Rust и помогает обеспечить безопасность работы с памятью.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Шпаргалка
В Rust есть два основных строковых типа:
String— владеемая, размещаемая в куче, изменяемая строка&str— заимствованный, неизменяемый строковый срез (ссылка на строковые данные)
Создание String:
let mut my_string = String::from("Hello");
my_string.push_str(" World");Строковые литералы имеют тип &str:
let my_slice: &str = "Hello World";String владеет своими данными и может быть изменён, в то время как &str является ссылкой, которую нельзя изменить.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Logic & Flow
1Продвинутое управление потоком выполнения
Выражение 'match'Сопоставление нескольких значенийСопоставление диапазоновВыражение 'if let'Циклы как выраженияИтоги — Простой парсер команд4Группировка данных с помощью структур
Что такое структура?Обзор структурДоступ к полям структурыИзменяемые структурыСтруктуры как параметры функцийКортежные структурыИтоги: создание структуры Book7Обработка ошибок с помощью 'Result'
Что такое 'Result'?Использование 'match' с 'Result'is_ok() и is_err()Сокращения: unwrap и expectОператор вопросительного знака '?'Парсинг строк в числаИтоги: функция безопасного деления10Замыкания и анонимные функции
Что такое замыкание?Определение простого замыканияЗамыкания с параметрамиЗахват окруженияИтоги: Простое замыкание-сумматор2Введение в векторы
Что такое вектор?Создание вектораДобавление элементов с помощью pushДоступ к элементам вектораИтерация по векторуИзменяемая итерацияУдаление элементовИтоги — Простой счетчик очков5Пары «ключ-значение» в Hash Map
Что такое Hash Map?Создание Hash MapВставка пар «ключ-значение»Доступ к значениямИтерация по Hash MapОбновление значенияУдаление парыИтоги — Счетчик слов8Проект: Простой инвентарь товаров
Настройка проектаДобавление товараПроверка наличияПродажа товараСобираем всё воедино3Список дел в командной строке
Настройка проектаДобавление задачиПросмотр всех задачУдаление задачиИтоговый код6Обработка отсутствия значения с 'Option'
Что такое 'Option'?Использование 'match' с 'Option'is_some() и is_none()Распаковка 'Option'Метод expectЗначение по умолчанию: unwrap_orИтоги: поиск элемента9Срезы строк и не только
String и &strСоздание срезов строкСрезы как параметры функцийДругие срезыИтоги: поиск первого слова