xTalk


Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

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

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

 на  MouseUp  перейти  к  на  третью  карту ,  если  последнее слово из в первой линии от карты поля 1 содержит «привет» , то говорит : «Хорошо» повторять , пока мышь находится до гудка конца повторить конец MouseUp                          

языки xTalk

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

языки, вдохновленные 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команда для повторного удаления свойств из объекта.

Смотрите также

использованная литература

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

внешние ссылки