xTalk - это свободно определенное семейство языков сценариев . Мать всех языков xTalk - это HyperTalk , язык, используемый в среде Apple HyperCard . Эти языки характеризуются простым синтаксисом , похожим на английский , с использованием реальных метафор поверх изображения в стиле Smalltalk и устройства отправки сообщений, с границами блоков в стиле Паскаля, но с менее жесткой структурой.
на MouseUp перейти к на третью карту , если последнее слово из в первой линии от карты поля 1 содержит «привет» , то говорит : «Хорошо» повторять , пока мышь находится до гудка конца повторить конец MouseUp
Языки xTalk имеют общий набор базовых структур данных и команд, а также общую объектную модель и, таким образом, обеспечивают относительную переносимость между собой:
Несколько языков программирования имеют внешнее сходство с HyperTalk и были им вдохновлены. Однако у них есть объектные модели, которые настолько сильно различаются, что перенос кода с другого xTalk требует полной переписывания:
Все языки xTalk имеют следующие основные конструкции:
xTalk имеет обмен сообщениями, подобный Smalltalk. [1] Чтобы отправить сообщение, напишите вызов команды или функции:
commandName 1,2,3
поместите functionName ( 1 , 2 , 3 ) в результат
как в Паскале. Это сообщение и его параметры не требуют деклараций, они разрешаются во время выполнения в правильный обработчик. Обработчик выглядит как
on commandName param1 , param2 , param3 - что-то делать здесь end commandName function functionName param1 , param2 , param3 - что делать здесь end functionName
и ведет себя почти так же, как эквивалент Паскаля, за исключением того, что его список параметров является вариативным. [2] Если обработчику передается меньше параметров, чем он объявляет в своей первой строке, остальные переменные заполняются пустыми строками. Если передано больше, они незаметно игнорируются. Вместо того , чтобы объявить параметры в виде списка после имени обработчика, они также могут быть доступны с помощью paramCount()
и param()
функций, которые также предоставляет доступ к неучтенным параметрам.
Скрипты xTalk часто прикрепляются к объектам (HyperTalk, SuperTalk, MediaTalk, LiveCode), но не всегда (например, CompileIt !, SenseTalk). Если сценарий не содержит обработчика для конкретного сообщения, которое он использует, сообщение передается в сценарий объекта-владельца для обработки. Сценарии также могут вручную передать сообщение родителю с помощью pass
команды.
Все xTalks поддерживают следующие основные команды:
поместите <значение> в <контейнер>
Это основной оператор присваивания. Большинство xTalks также поддерживает after
или before
для префиксов / суффикса значений друг к другу. Они также поддерживают команду 'get <value>', которая эквивалентна оператору put в контейнер с именем 'it'.
return <значение>
Как и в Паскале, обработчик передает данные обратно отправителю сообщения. Это также верно в обработчиках команд, где возвращаемое значение будет храниться во встроенной переменной the result
.
множество [ ] < Свойство > [ из [ < диапазон > из ] < объект > ] для < значение >
Измените свойство объекта (или диапазон текста в его текстовом содержимом) на заданное значение. Это используется как для изменения переменных экземпляра объектов, так и для применения стилей текста к текстовым полям. Если объект не указан, предполагается глобальное свойство самого ведущего приложения.
Все xTalks поддерживают условные операторы следующей формы:
if < условие > тогда команды else команды завершаются, если
Если разрыв строки после if
оператора then
или else
токена опущен, может следовать только одна команда, а end if
оператор может быть опущен. Это позволяет писать весь оператор if-then-else в одной строке и связывать условные выражения как цепочки if-then-else-if-then-else. Также else
может быть опущен весь блок. then
Маркер может быть обернут на следующую строку.
Операторы цикла не имеют такой произвольной формы:
repeat [ for ] < count > [ раз ] команды end repeat повторить с < variableName > = < startNumber > [ вниз ] до < endNumber > команды конец повторения Повторяю , пока < условие > команды конечного повтора повторять до тех пор, пока < условие > команды не закончатся повторять
Многие диалекты добавляют дополнительный синтаксис цикла для таких вещей, как цикл по фрагментам.
xTalks поддерживает обычные математические выражения. [3] Помимо обычных +
, -
, *
и /
операторов, они также поддерживают div
(целочисленное деление), ^
(показатель степени), mod
(остаток от целочисленного деления), =
или is
(равенство), <>
, ≠
или is not
(неравноправие), <
, >
, <=
, >=
, ≤
, ≥
(сравнение номера / строка порядок сортировка), contains
, is in
, is not in
(подстроки соответствия), is within
, is not within
(координаты точек лежат внутри координату прямоугольника), not
(логическое отрицание), and
(логический И для булевых), or
(логического ИЛИ для булевых), &
(конкатенация),&&
(конкатенации с пространством между ними), is a
и is an
(определение типа), there is a
, there is an
, there is no
, there is not a
(определить файл / объект существования).
Переменные в xTalks не нужно объявлять, они достаточно прозрачно создаются, когда в них впервые вводится значение. Если используется имя переменной, в которое еще ничего не было помещено, оно рассматривается как строковый литерал без кавычек и оценивается по его имени (таким образом имитируя поведение построчного интерпретатора). Переменные в xTalks - это варианты, то есть они концептуально представляют собой все строки, которые внутренне интерпретируются как тип данных для текущей операции, выполняемой с ними. Однако они могут иметь следующие типы: строка, целое число, число, точка, прямоугольник, дата или логический (также известный как логическое значение), где все они равны их строковым представлениям, которые в случае прямоугольников и точек представляют собой списки разделенных запятыми числа (h, v, соответственно, слева, сверху, справа, снизу), логические значения - «истина» или «ложь».Совершенно верно выполнять строковые операции с числами, а затем сразу же выполнять математические операции.
Глобальные переменные необходимо объявлять с использованием специального ключевого слова (чаще всего global
, но в некоторых xTalks universal
вместо него используется слово ), чтобы импортировать их в область текущего обработчика.
Все xTalks поддерживают выражения фрагментов, которые представляют собой операции среднего уровня для извлечения и изменения диапазонов подстрок переменной. Эти выражения могут быть как значением, так и контейнером и обычно имеют форму:
<chunkType> <startOffset> [до <endOffset>] из <value>
Поддерживаемые типы фрагментов - это обычно char (acter), item, word или line (хотя в некоторых диалектах добавлена поддержка байтов и других единиц фрагментов). Большинство xTalks поддерживают изменение разделителя, используемого для элементов (по умолчанию запятая) с помощью itemDelimiter
свойства, и сбрасывают его позже (хотя SuperTalk сбрасывает его до запятой в конце каждого обработчика, тогда как HyperTalk сбрасывает его только во время простоя. , т.е. между системными событиями).
Есть также математические команды, такие как add <value> to <container>
и т. Д.
Большинство 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. Он позволяет добавлять пользовательские переменные экземпляра к существующим объектам ведущего приложения, которые затем можно использовать так же, как встроенные свойства, для хранения любых данных любого типа. Пример использования свойства пользователя:
если «MyProperty,» не в «» и в userProperties от меня и «» а затем определить MyProperty из кд BTN 1 конец , если множество MyProperty от меня к „Все , что я хочу“
Также есть undefine
команда для повторного удаления свойств из объекта.