String

String — це розширюваний рядок у кодуванні UTF-8:

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

String реалізує Deref<Target = str>, що означає, що ви можете викликати усі методи str у String.

Speaker Notes

This slide should take about 5 minutes.
  • String::new повертає новий порожній рядок. Використовуйте String::with_capacity, якщо ви знаєте, скільки даних ви хочете передати в рядок.
  • String::len повертає розмір String у байтах (який може відрізнятися від його довжини в символах).
  • String::chars повертає ітератор поверх фактичних символів. Зауважте, що char може відрізнятися від того, що людина вважатиме “символом” через кластери графем.
  • Коли люди посилаються на рядки, вони можуть говорити про &str або String.
  • Коли тип реалізує Deref<Target = T>, компілятор дозволить вам прозоро викликати методи з T.
    • Ми ще не обговорювали трейт Deref, тому на даний момент це здебільшого пояснює структуру бокової панелі у документації.
    • String реалізує Deref<Target = str>, що прозоро надає йому доступ до методів str.
    • Напишіть і порівняйте let s3 = s1.deref(); and let s3 = &*s1;
  • String реалізовано як оболонку навколо вектора байтів, багато операцій, які ви бачите, що підтримуються над векторами, також підтримуються String, але з деякими додатковими гарантіями.
  • Порівняйте різні способи індексування String:
    • До символу за допомогою s3.chars().nth(i).unwrap(), де i є в межі, поза межами.
    • До підрядка за допомогою s3[0..4], де цей фрагмент знаходиться на межах символів чи ні.
  • Багато типів можна перетворити у рядок за допомогою методу to_string. Цей трейт автоматично реалізується для всіх типів, що реалізують Display, тому все, що може бути відформатовано, також може бути перетворено у рядок.