Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Встроенные методы

Методы вызываются через точку и составляются в цепочки. Каждая сигнатура ниже сверена с реализацией, а не переписана по памяти.

String

МетодРезультатПримечания
upper() / lower()String"auth".upper() → "AUTH"
len()Intсчитает символы: "héllo".len() → 5
trim()Stringубирает пробельные символы по краям
split(sep)List"a,b".split(",") → ["a", "b"]
replace(from, to)Stringвсе вхождения
starts_with(prefix) / ends_with(suffix)Bool
contains(substr)Bool"hello".contains("ell") → true
to_int() / to_float()Int / Floatнекорректное число — ошибка, а не null
slice(start, end)Stringподстрока по индексу символа, end не включается, индексы зажимаются
to_str()Stringтождество, чтобы не разрывать цепочку
parse_json() / parse_yaml() / parse_toml()Objectцелые становятся Int; сбой — E0314
↳ точностьпорядок ключей — как в документе; YAML << применяется; дата TOML становится String
parse_duration()Int (секунды)"1h30m" → 5400; единицы d/h/m/s; E0319
parse_datetime()Int (epoch UTC)RFC 3339 или YYYY-MM-DD; смещения ±HH:MM; E0320
sha256()Stringhex-дайджест в нижнем регистре
base64() / base64_decode()Stringстандартный алфавит с дополнением; неверный вход — E0321

Int

МетодРезультатПримечания
abs()Int
to_float()Floatрасширение; Float.to_int() нет — ему пришлось бы округлять
to_str()String
format_duration()String5400 → "1h30m"; 0 → "0s"
format_datetime()StringRFC 3339 UTC: 946684800 → "2000-01-01T00:00:00Z"

Float

МетодРезультат
abs()Float
round(digits)Float
to_str()String

Bool

МетодРезультат
to_str()String

List

МетодРезультатПримечания
len()Int
first() / last()элементпустой список — E0317
get(i) / get(i, default)элементпромах даёт null или указанный default
contains(item)Boolструктурное равенство
compact()Listубирает null
uniq()Listдедупликация, порядок первых вхождений
map (x, i) -> ... endListколбэк получает элемент и его индекс
filter (x, i) -> Bool endListне-Bool из колбэка — E0306
join(sep)Stringтолько скаляры; контейнеры — E0307
sort()List
reverse()List
sum()Int
min() / max()элемент
flatten()Listна один уровень: [[1], [2, 3]] → [1, 2, 3]
to_object()Objectсобирает объект из пар { key, value }; повтор ключа — E0323
reduce(init) (acc, e) -> … endAnyлевая свёртка; начальное значение обязательно
any (e, i) -> Bool endBoolхотя бы один подходит; для пустого списка — false
all (e, i) -> Bool endBoolподходят все; для пустого списка — true
find(default) (e, i) -> Bool endAnyпервое совпадение или default
index_of(value, default)Intиндекс первого равного элемента или default; default обязан быть Int
group_by (e, i) -> key endObjectэлементы по ключу-строке, ключи в порядке первого появления (D39)
sort_by (e, i) -> key endListпо возрастанию и устойчиво; ключи как у sort() (D39)
flat_map (e, i) -> [...] endListmap, затем списки склеиваются на один уровень; не-список из лямбды - E0306 (D39)
zip(other)Listпары { left, right }; списки разной длины - E0327 (D39)
slice(start, end)Listend не включается: [1, 2, 3].slice(1, 3) → [2, 3]
to_json() / to_yaml() / to_toml()Stringкомпактная форма, для встраивания; to_toml на списке — E0603
to_json_pretty() / to_yaml_pretty() / to_toml_pretty()Stringформа для человека, для файла, который попадает в diff

Object

МетодРезультатПримечания
len()Int
keys() / values()Listпорядок объявления
contains(key)Bool
get(key, default)значениепромах даёт default
entries()Listобъекты { key, value } в порядке объявления; обратное к to_object()
merge(other)Objectключи правой стороны побеждают
to_json() / to_yaml() / to_toml()Stringкомпактная форма, для встраивания
to_json_pretty() / to_yaml_pretty() / to_toml_pretty()Stringформа для человека, для файла, который попадает в diff

Операторы, которые строят значения

Почти все операторы числовые. Два — нет, и только у них результат может быть больше того, что пришло на вход.

ВыражениеРезультатПримечания
"a" + "b"Stringсклеивает две строки; интерполяция "#{a}#{b}" делает то же самое
[1] + [2, 3]Listсклеивает два списка; операнды не меняются

+ никогда не преобразует. "port " + 8080 — это E0306, и диагностика называет сторону, на которой нужно вызвать .to_str(). Склейка ограничена 1 000 000 элементов списка и 16 МиБ строки, сообщается как E0322.

Глобальные функции

ФункцияТребуемое правоПоведение
range(n)—[0, 1, … n-1]
env(name, default)--allow-envпеременная окружения; отсутствует → default
read_file(path)--allow-readсодержимое файла строкой; относительный путь - от папки манифеста (D37)
fail(message)—останавливает выполнение с E0531 и вашим сообщением

Вызов метода имеет приоритет над одноимённым полем объекта, в котором лежит функция. Экспортированные функции пакета вызываются тем же синтаксисом: pkg.fn(...).