Внимание! Статья актуальна для Bay12 Proxima и её содержимое может быть использовано на сервере!

NTSL

Материал из Proxima Wiki
Версия от 16:21, 20 февраля 2023; Exapster (обсуждение | вклад) (В архив.)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигации Перейти к поиску

NT Scripting Language (NT Script, или NTSL) - это новая технология, разработанная техническим отделом NT для стандартизации программирования и связи всех электронных устройств Nanotrasen. Его синтаксис представляет собой смесь PHP, C ++ и JavaScript. Большинство реализаций NT Script не являются объектно-ориентированными и не позволяют определять классы, а вместо этого полагаются на систему управления памятью ROBUST(tm) для хранения объектов в динамическом дереве данных, однако NT Script допускает встроенное определение функций.

Важно отметить, что NT Скрипты не следует рассматривать как код BYOND. NTSL обрабатывает некоторые вещи иначе, чем BYOND.

Руководство по синтаксису[править | править код]

NT Script придерживается простого в использовании синтаксиса, разработанного для пользователей всех уровней опыта программирования. Пробелы игнорируются, используются точки с запятой и фигурные скобки.


Переменные[править | править код]

Переменные используются для временного хранения любых форм данных, к которым можно получить доступ где-либо еще в коде. Для простоты мы будем игнорировать тот факт, что вы можете использовать переменные только в дочерней области. Вот как вы создаете переменную:

myVariable = 5;

Также вы можете присвоить переменной текстовое значение или строку.

myVariable = "Hello world!";


Функции[править | править код]

Функции могут быть использованы и определены динамически. Существуют разные предопределенные функции для каждой реализации NTSL, однако основные из них остаются прежними. Функция используется так:


myVariable = getNumber();

В этом примере, myVariable присваивается любое значение, возвращаемое getNumber(). Каждая функция возвращает значение, даже если возвращаемое значение явно не определено. Вот еще несколько примеров использования функций:

print(myVariable);
print("Hello world!");
print("Griffing assistants in T-minus " + myVariable + " seconds.");


Также можно определять свои функции, используя ключевое слово def.

def getNumber() {
    return 5;
}


Блоки кода[править | править код]

Блоки кода вызываются, когда конкретный фрагмент кода сигнализирует о том, что он является представлением блока кода. Переменные, определенные в одном кодовом блоке, не могут быть применены или изменены в других несвязанных кодовых блоках; это известно как область. Например:

myGlobalVariable = getNumber();

while(myGlobalVariable != 0) {
    
   myLocalVariable = 0;
   myGlobalVariable = myLocalVariable;
}

myLocalVariable = 50; // myLocalVariable не существует в этой области

Когда интерпретатор читает закрывающую скобку, он уничтожает все определения переменных в области видимости, поэтому вы не можете использовать ни одну из переменных, которые существовали в этом конкретном блоке кода.


Ветвления[править | править код]

Цикл while () в предыдущем примере считается условным, поскольку он продолжает выполняться только тогда, когда условие между скобками выполняется. '! =' 'Известен как реляционный оператор, который возвращает истину интерпретатору, если myGlobalVariable не равен 0. Его можно прочитать как "пока myGlobalVariable не равен 0, выполнить следующий блок кода".


Вот список всех реляционных операторов:


== : Равно
!= : Не равно
< : Меньше чем
> : Больше чем
<= : Меньше или равно
>= : Больше или равно


Реляционные операторы могут использоваться в операторах if(), которые используются следующим образом:

if(myVariableNumber == 50) {
   // блок кода
}
else {   // условие не было выполнено
   // блок кода
}


Пространства имен NT Deluxe[править | править код]

Nanotrasen будет постоянно добавлять новые универсальные функции и возможности в NTSL, вот некоторые из них:


Векторное пространство имен[править | править код]

Векторы - это контейнеры данных изменяемого размера для хранения любых объектов внутри. Они очень полезны для использования в качестве списков; к их членам можно получить немедленный доступ, если у вас есть подходящая должность.

vector()[править | править код]

vector(запись1, запись2, ...)

Возвращает вектор с заданным количеством объектов. Вы можете добавить бесконечное количество записей или вообще никаких записей.

at()[править | править код]

at(вектор, позиция, значение)

NTSL-эквивалент массива[index]. Вектор NTSL начинается с индекса 1. По мере развития языка он, скорее всего, будет выгружен в оператор [].

copy()[править | править код]

copy(вектор, начало, конец)

Возвращает новый вектор только с содержимым указанного вектора в начальной позиции и конечной позиции.

push_back()[править | править код]

push_back(вектор, запись1, запись2, ...)

Добавляет указанные записи в указанный вектор. Примечание: оператор += перегружает эту функцию и может использоваться следующим образом:

vector += myName;

remove()[править | править код]

remove(вектор, запись1, запись2, ...)

Удалить определенные записи из указанного вектора.

cut()[править | править код]

cut(вектор, начало, конец)

Вырезает записи от начала до конца в указанном векторе.

swap()[править | править код]

swap(vector, index1, index2)

Меняет местами объекты в index1 и index2 в указанном векторе.

insert()[править | править код]

insert(vector, index, entry)

Вставляет запись в указанную позицию.

Строки[править | править код]

Строки - это одна из переменных, которую вы будете использовать чаще всего при манипулировании сообщениями, поскольку они представляют собой содержимое того, что вы хотите изменить. Они принимают форму серии символов, таких как «Hello there!»

explode()[править | править код]

explode(string, separator)

Возвращает строку, разбитую на вектор строк, разделенных между символами «seperator». Если «seperator» равен нулю, вместо этого разбивает строку на символы.

Другие определения[править | править код]

pick()[править | править код]

pick(entry1, entry2, entry3, ...)

Возвращает случайно выбранную запись из параметров. Примечание: векторные параметры добавят свои записи в «лотерею». Функция никогда не вернет вектор.

find()[править | править код]

find(container, element)

Ищет элемент или подстроку в векторе или строке. Возвращает ненулевое значение, если найдено.

prob()[править | править код]

prob(chance)

Возвращает ненулевое значение если вероятность успешна. Возвращает ноль, если вероятность не удалась.

length()[править | править код]

length(container)

Находит длину строки или вектора.

substr()[править | править код]

substr(string, start, end)

Возвращает строку/текст, скопированный из указанной строки, от начала до конца.


Константы[править | править код]

PI = 3.141592653;
E = 2.718281828;
SQURT2 = 1.414213562;
FALSE = 0; // true/false - это просто логические сокращения для 0 и 1
TRUE = 1;
NORTH/SOUTH/EAST/WEST = направления; // может быть любым кардинальным направлением