====== Базовые знания и понятия ======
//(Некоторый функционал в этом руководстве реализован в ещё не вышедшей версии интерпретатора)//
Самое главное: одна строка - одна инструкция интерпретатору
===== Методы =====
Вызов функции (тут мы называем это методы, хоть язык и не ООП):
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
Также математика работает внутри строк:
print, "2+2"
# => 4
==== Комментарии ====
Выше можно наблюдать использование комментария: здесь комментарий занимает целую строку с самого её начала, и его нельзя начать где-то ещё.
Сработает:
# Комментарий
Не сработает:
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]
# => Hello
Математика внутри индексов массивов не работает:
array int arr[2]
# Не сработает:
arr[0+1] = 1
# Сработает:
i = 0+1
arr[i] = 1
Более ненужный массив всё также можно удалить с помощь метода //[[functions:free|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 является основной для создания циклов и повторных сегментов кода.
**Осторожно!** jump не работает внутри многоуровневых блоков if-else.
===== Сегменты =====
**Осторожно!** Это очень экспериментальный функционал. В сегментах не поддерживаются прыжки и if-else блоки.
Сегмент создаётся с помощью << и >>, и у него могут быть аргументы:
<>
# Вызываем сегмент
sayhello, "Yakov"
Последний вызванный внутри сегмента метод return вернёт значение из сегмента:
<>
askname
append, "Your name is: ", returned
print, returned