Оглавление

Глобальные декларации

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

Функции

Глобальные функции описываются аналогично C/C++.

Для параметров, передаваемых по ссылке, используйте & и при необходимости указывайте направление данных с помощью in, out, inout, например &out. По умолчанию компилятор ставит inout. in предназначен для передачи значения в функцию, out для возвращения значения из функции.

Также параметры могут быть объявлены как const, для запрета изменения передаваемого значения. Обьявление параметров константными увеличивает читабельность кода и уменьшает число копирований данных.

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

int MyFunction(int a, int b)
{
  return a + b;
}

Переменные

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

Глобальные переменные доступны всем функциям, если переменная содержит часть памяти, например строку, то данная память будет очищена при перезагрузке модуля или движка.

int MyValue = 0;
const uint Flag1 = 0x01;

Переменные примитивных типов инициализируются до не-примитивных. Это позволяет конструкторам классов использовать глобальные переменные в качестве начальных значений. Исключение - когда глобальная переменная не примитивного типа, в данном случае не гарантируется что она инициализируется до класса.

Классы

Классы AngelScript похожи по синтаксису на C++ или Java.

С помошью классов скриптер может создавать новые типы данных с переменными и методами, и манипулировать ими. Классы поддерживают наследование и полиморфизм.

// Описание класса
class MyClass
{
  // Конструктор
  MyClass()
  {
    a = 0;
  }
  // Метод
  void DoSomething()
  {
    a *= 2;
  }
  // Свойство
  int a;
}

Интерфейсы

Классы - интерфейсы обьявляют методы и гарантируют их реализацию. Это позволяет использоать полиморфизм, функции могут вызывать методы интерфейса без представления к какому точно типу обьекту они относятся.
// Обьявление интерфейса
interface MyInterface
{
  void DoSomething();
}
// Класс, реализующий методы интерфейса
class MyClass : MyInterface
{
  void DoSomething()
  {
    // что-то делаем
  }
}

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

Импорты

Иногда бывает полезно загружать скриптовые модули динамически без перекомпиляции основного скрипта. Для этого скрипты могут импортировать функции из другого модуля, с помошью декларации import, указанной перед описанием функции.

это позволяет скрипту компилироваться используя данные функции без связывания с ними, связывание произойдет в процессе выполнения.

Если скрипт вызывает функцию, которая еще не связана со скриптом, выполнение скрипта прервется с ошибкой.

import void MyFunction(int a, int b) from "Another module";

Enums

Enums - удобный способ регистрации группы констант, которые будут использоваться во всем скрипте. Использование их улучшает читабельность кода.

Стоит отметить, что значение в переменной данного типа может отличатся от обьявленных.

Значения обьявляются перечислением, без указания специального значения, по умолчанию присваивается значение предудущего + 1, а первое значение будет содержать 0.

enum MyEnum
{
  eValue0,
  eValue2 = 2,
  eValue3,
  eValue200 = eValue2 * 100
}

Typedefs

Typedefs используются для создания псевдонимов для других типов.

На данный момент их можно использовать только для примитивных типов.

typedef float  real32;
typedef double real64;

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник./small>