XTalk - Википедия - xTalk
xTalk слабо определенная семья языки сценариев. Мать всех языков xTalk - это HyperTalk, язык, используемый Apple HyperCard среда. Для этих языков характерны простые Англоязычный синтаксис, используя реальные метафоры поверх изображения в стиле Smalltalk и устройства отправки сообщений, с границами блоков в стиле Паскаля, но менее жесткой структурой.
Пример сценария
на mouseUp идти к то в третьих карта если то последний слово из то первый линия из карта поле 1 содержит "Привет" тогда сказать "Хорошо" повторение пока то мышь является вверх писк конец повторение конец mouseUp
языки xTalk
Языки xTalk имеют общий набор базовых структур данных и команд, а также общую объектную модель, что обеспечивает относительную переносимость между собой:
- HyperTalk
- SuperTalk
- SenseTalk
- Стенограмма
- LiveCode скрипт ранее назывался RevTalk или MetaTalk
xTalk
языки, вдохновленные xTalk
Некоторые языки программирования имеют внешнее сходство с HyperTalk и были им вдохновлены. Однако у них есть объектные модели, которые настолько различаются, что перенос кода с другого xTalk требует полной переписывания:
- Lingo (со старым синтаксисом)
- ActionScript
- AppleScript
- JavaScript и ECMAScript
Языковые конструкции
Все языки xTalk имеют следующие основные конструкции:
Сообщения и обработчики
xTalk имеет обмен сообщениями, подобный Smalltalk.[1] Чтобы отправить сообщение, напишите вызов команды или функции:
commandName 1,2,3
положить functionName(1,2,3) в результат
как в Паскале. Это сообщение и его параметры не требуют деклараций, они разрешаются во время выполнения в правильный обработчик. Обработчик выглядит как
на commandName param1,param2,param3 - делай что-нибудь здесь конец commandName функция functionName param1,param2,param3 - делай что-нибудь здесь конец functionName
и ведет себя почти так же, как и эквивалент Pascal, за исключением того, что его список параметров является вариативным.[2] Если обработчику передается меньше параметров, чем он объявляет в своей первой строке, оставшиеся переменные заполняются пустыми строками. Если передано больше, они незаметно игнорируются. Вместо объявления параметров в виде списка после имени обработчика к ним также можно получить доступ с помощью paramCount ()
и param ()
functions, который также дает доступ к игнорируемым параметрам.
Скрипты xTalk часто прикрепляются к объектам (HyperTalk, SuperTalk, MediaTalk, LiveCode), но не всегда (например, CompileIt !, SenseTalk). Если сценарий не содержит обработчика для конкретного сообщения, которое он использует, сообщение передается в сценарий объекта-владельца для обработки. Сценарии также могут вручную передавать сообщение родителю, используя проходить
команда.
Центральные команды
Все xTalks поддерживают следующие основные команды:
поместите <значение> в <контейнер>
Это основной оператор присваивания. Большинство xTalks также поддерживают после
или же перед
для префикса / суффикса значений друг к другу. Они также поддерживают команду get
return <значение>
Как и в Паскале, обработчик передает данные обратно отправителю сообщения. Это также действует в обработчиках команд, где возвращаемое значение будет храниться во встроенной переменной. результат
.
набор [то] <свойство> [из [<классифицировать> из] <объект>] к <ценить>
Измените свойство объекта (или диапазон текста в его текстовом содержимом) на заданное значение. Это используется как для изменения переменных экземпляра объектов, так и для применения стилей текста к текстовым полям. Если объект не указан, предполагается глобальное свойство самого ведущего приложения.
Структуры управления
Все xTalks поддерживают условные операторы следующей формы:
если <условие> тогда команды еще команды конец если
Если разрыв строки после если
заявления тогда
или же еще
токен опущен, может следовать только одна команда, а конец, если
заявление может быть опущено. Это позволяет писать весь оператор if-then-else в одной строке и связывать условные выражения как цепочки if-then-else-if-then-else. Кроме того, весь еще
блок может быть опущен. В тогда
токен может быть перенесен на следующую строку.
Операторы цикла не имеют такой произвольной формы:
повторение [за] <считать> [раз] команды конец повторение повторение с <variableName> = <startNumber> [вниз] к <endNumber> команды конец повторение повторение пока <условие> команды конец повторение повторение до того как <условие> команды конец повторение
Многие диалекты добавляют дополнительный синтаксис цикла для таких вещей, как цикл по фрагментам.
Выражения и операторы
xTalks поддерживает обычные математические выражения.[3] Помимо обычных +
, -
, *
и /
операторов, они также поддерживают div
(целочисленное деление), ^
(показатель степени), мод
(остаток от целочисленного деления), =
или же является
(равенство), <>
, ≠
или же не является
(неравенство), <
, >
, <=
, >=
, ≤
, ≥
(сравнение чисел / порядок сортировки строк), содержит
, в
, не в
(соответствие подстроки), внутри
, не внутри
(координаты точки лежат внутри координат прямоугольника), нет
(логическое отрицание), и
(логическое И для логических значений), или же
(логическое ИЛИ для логических значений), &
(конкатенация строк), &&
(конкатенация строк с пробелом между ними), это
и является
(определение типа), Существует
, существует
, здесь нет
, это не
(определить наличие файла / объекта).
Переменные
Переменные в xTalks не нужно объявлять, они достаточно прозрачно создаются, когда в них впервые вводится значение. Если используется имя переменной, в которое еще ничего не было помещено, оно рассматривается как строковый литерал без кавычек и вычисляется по его имени (таким образом имитируя поведение построчного интерпретатора). Переменные в xTalks являются вариантами, то есть они концептуально представляют собой все строки, которые внутренне интерпретируются как тип данных для текущей операции, выполняемой с ними. Однако они могут иметь следующие типы: строка, целое число, число, точка, прямоугольник, дата или логический (также известный как логическое значение), где все они равны их строковым представлениям, которые в случае прямоугольников и точек представляют собой списки разделенных запятыми числа (h, v соответственно. слева, сверху, справа, снизу), логические значения - «истина» или «ложь». Совершенно верно выполнять строковые операции с числами, а затем сразу же выполнять математические операции.
Глобальные переменные нужно объявлять с помощью специального ключевого слова (чаще всего Глобальный
, но в некоторых xTalks слово универсальный
вместо этого используется), чтобы импортировать их в область текущего обработчика.
Выражения фрагментов
Все xTalks поддерживают выражения фрагментов, которые представляют собой операции среднего уровня для извлечения и изменения диапазонов подстрок переменной. Эти выражения могут быть как значением, так и контейнером и обычно имеют форму:
<chunkType> <startOffset> [to <endOffset>] of <value>
Поддерживаемые типы фрагментов - это обычно char (acter), item, word или line (хотя некоторые диалекты добавляют поддержку байтов и других единиц фрагментов). Большинство xTalks поддерживают изменение разделителя для элементов (по умолчанию запятую) с помощью itemDelimiter
свойство и сбрасывать его позже (хотя SuperTalk сбрасывает его до запятой в конце каждого обработчика, а HyperTalk сбрасывает его только во время простоя, то есть между системными событиями).
Есть также математические команды, такие как добавить <значение> в <контейнер>
и Т. Д.
Несовместимость диалектов
Большинство xTalks основано на архитектуре уровня HyperCard 1.2. Поскольку HyperCard 1.2 не поддерживает несколько окон, меню, фильмов или веб-браузеров, многие xTalks реализуют эти аспекты по-разному. Например. SuperTalk реализует несколько окон, заменяя уровень «стека» иерархии объектов на «проект» (контейнер сценария, представляющий файл) и «окно» (фактически то, что раньше было стеком, но их может быть несколько в одном проекте. файл), тогда как HyperCard 2.0 и LiveCode сохранили уровень «стека» и вместо этого предоставили новые (но разные) команды, которые позволяют запрашивать открытие второго стека в его собственном окне вместо замены текущего стека на экране. HyperSense сохранил аналогичный подход, но переименовал «карточку» в «страницу».
Всплывающие кнопки и меню - это полностью собственные постоянные объекты в образе файла проекта со сценариями в SuperTalk, и на них ссылаются как на «элемент« копия »меню« редактировать »и т.п., тогда как в HyperTalk они являются временными объектами, которые добавляются в глобальная строка меню, совместно используемая всеми стеками с использованием команды 'create menu', упоминается 'menuItem "copy" меню "edit"' и может иметь только однострочное 'menuMessage', которое они отправляют при выборе.
Точно так же типы и стили объектов, помещенных на карту, сильно различаются между xTalks в точке расхождения HyperCard 1.2.x. Большинство из них имеют кнопки и поля, но SuperCard не позволяет фоновым полям иметь одинаковое содержимое на разных картах (вместо этого требуется использовать рисование текстовой графики для меток, чего у HyperCard не было). И составной термин HyperCard 2.x «часть» для обозначения кнопок, полей и т. Д. На карте также не поддерживается всеми xTalks.
Поздние дополнения к языку
Хотя HyperCard никогда не предоставляла эту функцию, в большинстве xTalks сегодня реализована функция «свойств пользователя», впервые представленная SuperCard. Он позволяет добавлять пользовательские переменные экземпляра к существующим объектам ведущего приложения, которые затем можно использовать так же, как встроенные свойства, для хранения любых данных любого типа. Пример использования свойства пользователя:
если ",моя собственность," не является в "," & то userProperties из мне & "," тогда определять моя собственность из CD кстати 1 конец если набор моя собственность из мне к "Все, что я хочу"
Также есть неопределить
команда для повторного удаления свойств из объекта.