====== Базовые знания и понятия ====== //(Некоторый функционал в этом руководстве реализован в ещё не вышедшей версии интерпретатора)// Самое главное: одна строка - одна инструкция интерпретатору ===== Методы ===== Вызов функции (тут мы называем это методы, хоть язык и не ООП): 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" Обратите внимание на r_sayhello в примере выше: внутри сегментов своё название для returned-переменной - r_*названиеСегмента* Последний вызванный внутри сегмента метод return вернёт значение из сегмента: <> askname append, "Your name is: ", returned print, returned