Синтаксис
Символы языка
| Символ | Значение |
|---|---|
~ | Комментарий до конца строки |
¤ | Объявление переменной |
§ | Определение функции |
λ | Анонимная функция / замыкание |
» | Печать |
⟦ ⟧ | Блок кода |
? / ¿ | Если / иначе |
@ | Пока (while) |
# | Для (for i = a .. b) |
⇶ | Для каждого (foreach) |
^ | Вернуть |
↤ | Отдать значение (генератор) |
‼ ⁇ ⌦ | try / catch / finally |
⊕ | Импорт модуля |
⊘ / ↻ | break / continue |
≡ | Assert |
☑ / ☐ / ∅ | true / false / null |
⟪ ⟫ | Словарь |
‡ | Класс |
⋔ | Метод класса |
⇢ | Создание экземпляра |
† | Наследование |
⚡ | Асинхронная функция |
⏸ | Await |
Переменные
yl
¤ x = 5
¤ имя = "Аня"
¤ флаг = ☑
¤ пусто = ∅
¤ числа = [1, 2, 3]
¤ человек = ⟪"имя": "Аня", "возраст": 25⟫С типами:
yl
¤ x :int = 5
¤ имя :str = "Аня"
¤ флаг :bool = ☑
¤ список :arr = [1, 2, 3]Типы: int, float, str, bool, arr, fn, obj, null, any.
Условия
yl
? x > 5 ⟦
» "больше пяти"
⟧ ¿ ⟦
» "не больше"
⟧Циклы
yl
~ while
@ i < 10 ⟦
» i
i = i + 1
⟧
~ for
# i = 0 .. 10 ⟦
» i
⟧
~ foreach
⇶ x = [1, 2, 3] ⟦
» x
⟧Функции
yl
§ add(a, b) ⟦
^ a + b
⟧
§ sqrt_newton(x :float) :float ⟦
? x <= 0 ⟦ ^ 0 ⟧
¤ g = x / 2
# i = 0 .. 10 ⟦
g = (g + x / g) / 2
⟧
^ g
⟧Замыкания
yl
¤ удвой = λ (x) ⟦ ^ x * 2 ⟧
» удвой(21) ~ 42Деструктуризация
yl
¤ [a, b, c] = [1, 2, 3]
¤ ⟪"x", "y"⟫ = ⟪"x": 10, "y": 20⟫Классы
yl
‡ Животное ⟦
⋔ init(имя :str) ⟦
this.имя = имя
⟧
⋔ голос() ⟦
^ "..."
⟧
⟧
‡ Собака † Животное ⟦
⋔ голос() ⟦ ^ "Гав!" ⟧
⟧
¤ р = ⇢ Собака("Рекс")
» р.имя + " → " + р.голос()Генераторы
yl
§ чётные(n) ⟦
# i = 0 .. n ⟦
? even(i) ⟦ ↤ i ⟧
⟧
⟧
⇶ x = чётные(10) ⟦
» "чётное:", x
⟧Генераторы реализованы на PHP Fibers.
Асинхронность
yl
⚡ § долго(x) ⟦
^ x * 2
⟧
¤ t = долго(21)
» ⏸ t ~ 42Обработка ошибок
yl
‼ ⟦
¤ r = 10 / 0
⟧ ⁇ e ⟦
» "Поймали:", e
⟧ ⌦ ⟦
» "finally выполнился"
⟧Ошибка выводит номер строки: Поймали: [строка 1] Деление на ноль.
Модули
yl
⊕ "std/math.yl" as m
» m.квадрат(6) ~ 36
» m.PI ~ 3.14159Комментарии и точки с запятой
yl
~ это комментарий
¤ x = 5; ~ точка с запятой допустима, но не нужна
¤ y = 10;