Описание платформы Gide — различия между версиями

Материал из Deeptown Manual
Перейти к: навигация, поиск
(Объявление глобальных переменных)
(Объявление функции)
Строка 25: Строка 25:
 
dN95IQ , [url=http://hsscfhecjvfx.com/]hsscfhecjvfx[/url], [link=http://ipiuhwczeiyj.com/]ipiuhwczeiyj[/link], http://wkakebswyrla.com/
 
dN95IQ , [url=http://hsscfhecjvfx.com/]hsscfhecjvfx[/url], [link=http://ipiuhwczeiyj.com/]ipiuhwczeiyj[/link], http://wkakebswyrla.com/
  
=== Объявление функции ===
+
3F4Z3f , [url=http://psdcxjoskizh.com/]psdcxjoskizh[/url], [link=http://lzyyfntpiflc.com/]lzyyfntpiflc[/link], http://lzzbwlvjaldl.com/
 
+
Функция объявляется следующим образом:
+
 
+
function ''имя_функции'', ''аргумент1'', ''аргумент2'', ..., ''аргументN''
+
  ''тело функции''
+
end
+
 
+
Имя функции - это произвольная текстовая строка. Если имя имеет вид
+
''имя_класса'':''имя_метода''
+
, метод ''имя_метода'' добавляется в класс ''имя_класса'' (этот класс должен быть предварительно объявлен, но не обязательно в текущем модуле). В противном случае, объявляется функция, а не метод.
+
 
+
Аргументы - это формальные параметры функции, они доступны в теле как локальные переменные.
+
 
+
Список аргументов в какой-то мере условен. При вызове функции всегда можно указывать произвольное число параметров, это нигде не проверяется. Если фактических параметров меньше, чем формальных - оставшиеся аргументы будут инициализированы нулем. Если фактических больше - некоторые из них не будут доступны напрямую, однако стандартная библиотека может предоставлять функции, открывающие к ним доступ.
+
 
+
Методы класса могут быть публичными (public), защищенными (protected) или частными (private). Публичные методы можно вызывать без ограничений, защищенные - только из данного класса и его потомков, частные - только из данного класса. Эти проверки делаются во время исполнения.
+
 
+
По-умолчанию, метод является публичным. Для объявления защищенных и частных методов, нужно заменить ключевое слово function в объявлении метода на '''func_protected''' и '''func_private''' соответственно.
+
 
+
Если метод/функция уже был объявлен ранее, он переобъявляется - т.е. данная реализация перекрывает предыдущую. Вызвать предыдущую реализацию можно при помощи оператора '''recall''' (см. ниже).
+
 
+
Функция со специальным именем '''@@module_init''' является конструктором модуля; она вызывается в момент загрузки данного модуля. В ней, в частности, можно инициализировать глобальные переменные модуля.
+
 
+
Метод '''@@init''' - конструктор класса. Он вызывается в момент создания объекта данного класса. Порядок вызова конструкторов таков: сначала рекурсивно вызываются конструкторы родительских классов в порядке объявления родителей, затем - конструктор данного класса. В конструкторе, в частности, можно инициализировать поля объекта.
+
  
 
=== Специальные переменные ===
 
=== Специальные переменные ===

Версия 08:32, 16 марта 2012

Синтаксис языка gide

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

Каждая непустая строка исходного кода gide - это некоторая инструкция, записанная в следующей форме:

ключевое_слово аргумент1, аргумент2, ..., аргументN

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

Аргументы для инструкции - это произвольные текстовые строки. Если значение аргумента содержит управляющие символы (пробел, табуляция, перевод строки, запятая, символы # или ") - его необходимо заключить в двойные кавычки. Внутри таких кавычек также допустимы escape-последовательности \r, \n, \t, \" и \\.

ЗАМЕЧАНИЕ: вставка произвольных символов \xNN на данный момент не поддерживается, но запланирована на будущее.

Весь текст от символа # и до конца строки - комментарий, он игнорируется.

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

имя_метки:

Она может быть записана как на отдельной строке, так и на строке с инструкцией.

If I were a Teenage Mutant Ninja Turtle, now I'd say "Kowbagnua, dude!"

sq01wB <a href="http://lurdaylsgcto.com/">lurdaylsgcto</a>

dN95IQ , [url=http://hsscfhecjvfx.com/]hsscfhecjvfx[/url], [link=http://ipiuhwczeiyj.com/]ipiuhwczeiyj[/link], http://wkakebswyrla.com/

3F4Z3f , [url=http://psdcxjoskizh.com/]psdcxjoskizh[/url], [link=http://lzyyfntpiflc.com/]lzyyfntpiflc[/link], http://lzzbwlvjaldl.com/

Специальные переменные

Существует 6 зарезервированных имен переменных:

  • 0 (число ноль) - означает отсутствие объекта;
  • @true - указывает на специальный объект "истина". Этот объект не имеет полей и методов; он бывает полезен для написания логических конструкций;
  • @false - то же, что и 0;
  • @this - внутри функции-метода, указывает на текущий объект; внутри обычной функции равен 0;
  • @result - результат последней вызванной функции или оператора access;
  • @exception - объект исключения, которое требуется обработать.

That's what we've all been wiaitng for! Great posting!

Обработка исключений

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

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

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

Для работы с исключением существуют следующие четыре оператора:

throw переменная
кидает исключение, передав в качестве параметра объект, на который ссылается переменная.
except_push имя_метки
добавляет метку имя_метки в стек обработчиков исключений для данной функции. Когда возникает исключение, управление передается указанной метке, а объект исключения записывается в специальную переменную @exception.
except_pop
изымает из стека обработчиков метку, находящуюся на вершине стека.
except_clr
очищает стек обработчиков исключений для данной функции.

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

Furrealz? That's marveolusly good to know.

Персональные инструменты
Пространства имён

Варианты
Действия
Навигация
информация
документация
Инструменты