2 3 Строки

Сроки являются шаблоном и мета объектом, который содержит последовательности символов.

Общее представление строк.

let const stringName : str = "hello";

Строки в общем представлении могут: * Общая итерация и получение одного символа * Сложение строк * Поиск и взятие подстроки * Получение длинны строки * Замена части строки * Очистка строки * Удаление части строки * Вставка * Разбить строки на подстроки в массиве * Объединение массива строк в одну * Число в строку и строка из числа * Возможное приведение других типов к строке и форматирование вывода

Конкретные типы будут подставлены автоматически.

Есть некоторые специальные метафункции для получения представления. Например: * type(str)::char вернёт тип символа строки * type(str) вернёт тип строки

let mut commonString : str = "Hello";
let const t : type(commonString)::char = commonString[2];
print(t); // l

let mut commonString : str = "Hello";
let const t : type::auto = commonString[2];
print(t); // l

Более подробно про оператор type() см в 2 6 Операторы над типами

Приведение типов между строками

// C-style строка
// Такая строка в c/c++ является const char*
let s1 : str::cstr = "Hello";

// Строки обёрнутые в '' это символы
// символы могут приводиться к строкам и наоборот
let s2 : str::cstr = ['H','e','l','l','o','\0'];

// 

Мета строки

Класс мета строк может оптимизировать формирование строк.

let mut aStr : str::meta #= "Hello ";
aStr #+= "world ";
aStr #+= str(10);
print(aStr);

Данный код скомпилируется в следующий:

print(format("{}{}{}","Hello ", "world ", str(10)));
// Hello world 10

Как мы видим с точки зрения вычислений данный код тратит меньше ресурсов при том сохраняя свободной логику формирования строки.

Изменения объекта будут накапливаться до определённого момента, когда придёт время вычислить их в автоматическом или ручном виде.