Это старая версия документа!
Базовые знания и понятия
(Некоторый функционал в этом руководстве реализован в ещё не вышедшей версии интерпретатора)
Самое главное: одна строка - одна инструкция интерпретатору
Методы
Вызов функции (тут мы называем это методы, хоть язык и не ООП):
print, "Hello, World!"
Опускание запятых
В версии языка 2024 года добавлена возможность опустить запятую после названия метода, например:
append "Hello, ", "World!" print returned
Модули (классы)
Если функция находится в модуле (тут это называется классы, хоть опять же, это не ООП):
fs:open, "myname.txt"
Но предварительно, надо класс импортировать:
use, "fs"
Возвращаемые значения
Если метод что-то возвращает, он записывается в переменную returned:
fs:open, "myname.txt" file = returned
Но если функция вызывается из сегмента, то возвращаемое значение записывается в r_*названиеСегмента*.
Математика
Математика в языке базовая, доступны операция сложения, вычитания, умножения и деления. Если на одной строке несколько математических операций, то выполняются они по порядку слева-направо (правила математики не работают):
return, 2+2*2 # => 8
Комментарии
Выше можно наблюдать использование комментария: здесь комментарий занимает целую строку с самого её начала, и его нельзя начать где-то ещё.
Сработает:
# Комментарий
Не сработает:
hello:hello # Комментарий
Переменные
В языке динамическая строгая система типизации, переменные определяются так:
myvar = "My Text" myint = 124
Значение переменной изменяется таким же методом, но это не выйдет, если значение отличного от типа текущего значения. Если нужно задать значение с другим типом, предварительно можно назвать переменную по другому или её удалить:
free, myvar
Существует четыре типа:
- unknown: это специальный тип, который означает, что введённой переменной не существует;
- int: целое число, его размер определяется автоматически;
- string: строка;
- float64: 64-битное число с плавающей точкой.
Некоторые методы могут попросить у вас ввести на входе несуществующую переменную, куда в дальнейшем запишут данные. Пример:
fs:read, file, data # data до вызова метода это unknown typeof, data # => string
Или же в документации по методу он может написать any. В этом случае, аргумент принимает любой тип данных.
Объединение строк
Соединить строки можно с помощью встроенного метода append:
name = "Yakov" append, "Hello, ", name print, returned
Массивы
Массив создаётся специальной инструкцией:
array string arr[24]
В случае выше - string это тип данных у элементов массива, arr - его название, и число в скобках - размер.
array string arr[2] arr[0] = "Hello" arr[1] = "World" print, arr[0]
Можно применять математику в индексах массивов, но нельзя считать два элемента массива:
# Сработает: return, arr[1+1] # Не сработает: return, arr[0]+arr[1]
Если требуется посчитать элементы массива, то предварительно надо их скопировать в обычные переменные, а затем их удалить:
a = arr[0] b = arr[1] return, a+b free, a free, b
Более ненужный массив всё также можно удалить с помощь метода free.
Сравнения
В одном заголовке блока if-else можно использовать только одно сравнение:
if 1 == 1 print, "Yes!" elif 1 == 2 print, "Maybe" else print, "No!" end # end в конце блоков if-else обязательно
Но внутри if-else можно вкладывать сколько угодно if-else!
x = 5 y = 5 if x == y print, "Yes" if x == y print, "Hey!" if 5 == 4 print, "What the..?" elif 5 == 5 print, "Oh yeah" else print, "phew.." end end elif x != y print, "No" end
В сравнениях поддерживаются такие операции:
- Для int и float64: ==, !=, >, >=, <, ⇐
- Для string: ==, !=
- Сравнивать массивы нельзя.
jump-метки
В коде можно прыгать между строками. Для этого внутри кода можно ставить jump-метки:
print, "test:" ::test print, "Test" print, "jumping..." jump, "test"
Также для jump можно указать конкретный номер строки, но это неудобно, так как код постоянно движется.
jump является основной для создания циклов и повторных сегментов кода.
Сегменты
Осторожно! Это очень экспериментальный функционал. В сегментах не поддерживаются прыжки и if-else блоки.
Сегмент создаётся с помощью « и », и у него могут быть аргументы:
<<sayhello, name append, "Hello, ", name print, r_sayhello >> # Вызываем сегмент sayhello, "Yakov"
Обратите внимание на r_sayhello в примере выше: внутри сегментов своё название для returned-переменной - r_*названиеСегмента*
Последний вызванный внутри сегмента метод return вернёт значение из сегмента:
<<askname printc, "Say you name: " readline return, r_askname >> askname append, "Your name is: ", returned print, returned