XTalk - Википедия - xTalk

xTalk слабо определенная семья языки сценариев. Мать всех языков xTalk - это HyperTalk, язык, используемый Apple HyperCard среда. Для этих языков характерны простые Англоязычный синтаксис, используя реальные метафоры поверх изображения в стиле Smalltalk и устройства отправки сообщений, с границами блоков в стиле Паскаля, но менее жесткой структурой.

Пример сценария

    на mouseUp      идти к то в третьих карта      если то последний слово из то первый линия из карта поле 1 содержит "Привет" тогда сказать "Хорошо"      повторение пока то мышь является вверх        писк      конец повторение    конец mouseUp

языки xTalk

Языки xTalk имеют общий набор базовых структур данных и команд, а также общую объектную модель, что обеспечивает относительную переносимость между собой:

xTalk

языки, вдохновленные xTalk

Некоторые языки программирования имеют внешнее сходство с HyperTalk и были им вдохновлены. Однако у них есть объектные модели, которые настолько различаются, что перенос кода с другого xTalk требует полной переписывания:

Языковые конструкции

Все языки 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 , которая эквивалентна оператору put в контейнер с именем it.

   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    конец если    набор моя собственность из мне к "Все, что я хочу"

Также есть неопределить команда для повторного удаления свойств из объекта.

Рекомендации

  1. ^ Стек ссылок HyperTalk, карточки «Что такое сообщения?», «Обработка сообщений» и «Порядок передачи сообщений»
  2. ^ Справочный стек HyperTalk, карта «Использование переменных параметров», «paramCount» и «param»
  3. ^ Справочный стек HyperTalk, глава «Операторы и константы»

внешняя ссылка