Рядки

Тепер ми можемо зрозуміти два типи рядків у Rust:

  • &str is a slice of UTF-8 encoded bytes, similar to &[u8].
  • String is an owned buffer of UTF-8 encoded bytes, similar to Vec<T>.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Speaker Notes

This slide should take about 10 minutes.
  • &str представляє зріз рядка, який є незмінним посиланням на дані рядка в кодуванні UTF-8, що зберігаються в блоці пам’яті. Рядкові літерали ("Hello") зберігаються у бінарному файлі програми.

  • Тип String в Rust — це оболонка навколо вектора байтів. Як і у випадку з Vec<T>, він знаходиться у володінні.

  • Як і у багатьох інших типів, String::from() створює рядок із рядкового літералу; String::new() створює новий порожній рядок, до якого дані рядка можна додати за допомогою методів push() і push_str().

  • Макрос format!() є зручним способом створення рядка, яким володіють, з динамічних значень. Він приймає таку саму специфікацію формату, як і println!().

  • Ви можете запозичувати зрізки &str з String за допомогою & і, за бажанням, вибору діапазону. Якщо ви виберете діапазон байт, який не вирівняно за межами символів, вираз запанікує. Ітератор chars перебирає символи, і йому надається перевага перед спробами вирівняти межі символів.

  • Для програмістів на C++: думайте про &str як про std::string_view з C++, але такий, що завжди вказує на дійсний рядок у пам’яті. Rust String є приблизним еквівалентом std::string з C++ (головна відмінність: він може містити лише байти у кодуванні UTF-8 і ніколи не використовує оптимізацію малих рядків)..

  • Літерали байтових рядків дозволяють створювати значення &[u8] безпосередньо:

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
  • Необроблені рядки дозволяють створювати значення &str з відключеним екрануванням: r"\n" == "\\n". Ви можете вставити подвійні лапки, використовуючи однакову кількість # з обох боків лапок:

    XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX