Вы посетили: basic

Базовые знания и понятия

Базовые знания и понятия

(Некоторый функционал в этом руководстве реализован в ещё не вышедшей версии интерпретатора)

Самое главное: одна строка - одна инструкция интерпретатору

Методы

Вызов функции (тут мы называем это методы, хоть язык и не ООП):

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

Существует четыре типа:

  1. unknown: это специальный тип, который означает, что введённой переменной не существует;
  2. int: целое число, его размер определяется автоматически;
  3. string: строка;
  4. 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

Более ненужный массив всё также можно удалить с помощь метода 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, 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