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

SenseTalk является высоким уровнем английского, как язык сценариев в XTALK семье, который поддерживает как процедурные и объектно-ориентированные парадигмы. Скрипты SenseTalk предназначены для чтения обычными людьми, в том числе людьми, практически не обученными программированию.

С этой целью SenseTalk включает ряд языковых элементов, которые обеспечивают функциональность, ориентированную на человеческие задачи, а не на базовое поведение машины. Например, чтобы проверить, делится ли количество на 3, сценарий может использовать выражение « » или « » с упором на удобочитаемость и акцент на человеческое понятие делимости. [1] Сравните это с более традиционными языками программирования (C, Java, Python и т. Д.), Где тот же тест обычно записывается как « », с акцентом на машинные операции, необходимые для определения результата. [2]if quantity is divisible by 3 if quantity is a multiple of 3 if (quantity % 3) == 0

Этот сдвиг акцента с лежащих в основе машинных вычислений в сторону англоязычного описания поведения в человеческих терминах приводит к описанию SenseTalk как «языка программирования, ориентированного на людей». [3]

Отличительные характеристики [ править ]

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

Без учета регистра [ править ]

Ключевые слова SenseTalk и имена переменных не чувствительны к регистру. Это позволяет людям непоследовательно использовать заглавные буквы без каких-либо изменений в поведении.

Put  12  В  поместить 5 в B PUT + б -> дисплеи 17     

Это также верно для имен свойств в списке свойств (имя SenseTalk для словаря или хеш-таблицы).

Помещенный  { Name : "Зеленый" ,  HexCode : "# 00FF00" }  в  AColor поставил  aColor «s имя  -> отображается "Зеленый" поставил  в  HEXcode  из  acolor  -> отображает "# 00FF00"

Кроме того, текстовые операции, включая сравнения, поиск и т. Д., По умолчанию нечувствительны к регистру, хотя при необходимости их можно сделать чувствительными к регистру.

Установить  имя  на  «МакМастер» путы  имя  содержит  «мастер»  -> отображается Истинным (регистр игнорируется) положить  имя  содержит  «мастер»  рассматривает случай  -> отображается значение False


Переменные [ править ]

Помимо того, что имена переменных в SenseTalk нечувствительны к регистру, они необычны в некоторых других отношениях.

Переменные не нужно объявлять, они не имеют типа. Переменная возникает при первом использовании, и ее тип зависит от типа значения, которое в ней хранится.

Типы жидкостей [ править ]

Эта гибкость выходит за рамки «утиного ввода», встречающегося в других языках, в которых данная переменная имеет тип, который устанавливается, когда переменной присваивается значение. В SenseTalk переменная считается «контейнером», который может содержать любой тип значения. Тип значения, которое содержит переменная, может измениться во время выполнения сценария, поэтому одна и та же переменная может сначала содержать число, затем строку, а затем список значений. Эта «плавность типов» позволяет людям работать очень гибко, манипулируя значениями по своему желанию и обрабатывая каждое значение в соответствии с тем, как оно используется в данной точке сценария.

Одним из следствий безтиповых переменных SenseTalk является отсутствие «перегруженных» операторов, то есть операторов, выполняющих различные операции в зависимости от типа переменной, с которой они работают. Например, в некоторых языках оператор «+» будет выполнять сложение, когда он используется с числовыми операндами, и будет выполнять конкатенацию строк, когда он используется со строковыми операндами. В SenseTalk все операнды являются гибкими, поэтому необходимо иметь один оператор для выполнения сложения («+», который будет обрабатывать его операнды как числа), и другой оператор для конкатенации строк («&», который будет обрабатывать свои операнды как струны).

Поместите  1  +  2  и  3  +  4  -> отображает 37

В этом примере оператор + имеет более высокий приоритет, чем оператор &, поэтому выражение эквивалентно '(1 + 2) & (3 + 4)' или '3 & 7', дающему "37". Если бы сначала использовались круглые скобки для выполнения оператора &, то «1 + (2 & 3) + 4» превратилось бы в 1 + «23» + 4, что дало бы результат 28.

Предопределенные переменные [ править ]

SenseTalk включает сотни «предопределенных переменных». Это имена переменных, которые можно использовать как обычные переменные, но которые начинаются с предопределенного значения, если они используются без предварительного сохранения в них значения. Некоторые из предопределенных значений представляют собой числа, например пи или ноль. Многие из них являются специальными символами или символами, такими как euroSign , copyrightSign или hotBeverage . А у некоторых есть другие типы значений, такие как jsonListFormat , который представляет собой список свойств, содержащий несколько пар ключ / значение, которые можно использовать для установки глобального свойства listFormat.

Укажите «Площадь круга с радиусом 5 составляет:» & pi * 5 в квадрате.

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

Поместите  CookieCount  -> отображает "CookieCount". Добавьте  3  дюжины  в  CookieCount  -> обрабатывается как пустой, или 0 поместите  CookieCount  -> отображает 36.

Единицы [ править ]

SenseTalk позволяет числовым значениям иметь связанные единицы. Значения единиц конвертируются по мере необходимости при выполнении арифметических операций.

Поместите  5  ярдов  +  2  фута  -> показывает 17 футов

Переменные могут содержать значения с единицами измерения. Единицы переносятся вместе со стоимостью и применяются в последующих расчетах.

Поместите  5  ярдов  в  длину оной  2  фута  в  длину  - значение длиной преобразуются в совместимый блок для выполнения дополнения пут  длины  -> отображает 17 футов поставили  42  дюймов  в  ширину заданной  области ,  чтобы  длина  *  ширина положить  площадь  -> отображает 59,5 квадратных футов

Также поддерживаются более сложные единицы.


Даты [ править ]

SenseTalk распознает дату и время в большом количестве форматов и поддерживает вычисления даты и времени.

Ставим  «8:22»  -  «8:15»  -> отображает 420 секунд

Значения даты / времени могут храниться в переменных, а форматы поддерживаются посредством вычислений.

Ставьте  «3 марта»  +  34  дня  -> отображает «6 апреля»
Поместите  "2021-03-04"  в  nextDateДобавить  4  недели  к  nextDate поставить  nextDate  -> отображает "2021-04-01"Добавить  4  месяца  к  nextDate поставить  nextDate  -> отображается «2021-08-01»


Выражения фрагментов [ править ]

Выражения фрагментов SenseTalk происходят от его наследия как члена семейства языков XTalk, унаследованных от HyperTalk . Выражения фрагментов позволяют работать с фрагментами текста, используя знакомые английские термины: символы, слова, элементы, строки. SenseTalk расширяет исходный синтаксис фрагментов и расширяет их использование за пределами текста, включая элементы в списке и байты в двоичных данных.

Поместите  символы  7  до  11  из  «Rumpelstiltskin»  -> отображается «ходулях»
Помещенный  в  первые  3  символах  из  на  второе  слове  из  « книги  каталога »  -> дисплеев «кошка»

Выражения фрагментов также можно использовать для изменения значений. В терминологии языка Xtalk фрагмент контейнера (например, переменная) также является контейнером, поэтому любая команда, изменяющая значение контейнера, также может использоваться для изменения фрагмента.

Поместите  "Румпельштильцхен"  в  funnyNameПоместите  « удар »  в  символы с  7  по  12  в  funnyNameпоставить  funnyName  -> отобразить «Румпельбампкин»


Файлы [ править ]

SenseTalk включает команды для открытия, чтения и записи файлов, но они используются редко. Текстовый файл можно рассматривать как контейнер (например, переменную), поэтому содержимое файла можно прочитать, просто поместив файл в переменную. Точно так же запись файла может быть выполнена путем помещения в файл переменной или другого выражения.

Поместите  файл  « / tmp / addressList . txt »  в  адресаПомещенный  « Мириам , 219  воробей  Ln , Freeburgh , MA »  &  возвращение  после  адресаПоместите  адреса  в  файл  « / tmp / addressList . txt »

Поскольку файл является контейнером, любую команду, изменяющую контейнер, можно использовать непосредственно с файлом.

Помещенный  возвращение  и  « Ранний , 12  Elm  St , Vista , , NM »  после  строки  1  из  файла  « / TMP / Addresslist . txt »


Базы данных [ править ]

Доступ к записям в базе данных более сложен, чем чтение файла, но SenseTalk применяет и здесь концепцию контейнеров. Это позволяет подключиться к базе данных и обновить поле в конкретной записи с очень небольшим кодом.

Поместите  { type : ODBC ,  DSN : customers ,  user : admin ,  password : sEcrEt }  в  custDBПомещенный  стол  « подписка »  на  custDB  в  сабвуфер  - делает подключение к таблице БДДобавить  12  месяцев  до  expDate  из  в  записи  из  подлодки ,  где  CustNum  является  « 83946 - г »  - обновляет значение в конкретной записи


Язык шаблона [ править ]

«Язык шаблонов» SenseTalk [4] реализует регулярные выражения с использованием читаемого синтаксиса, похожего на английский. В следующем примере создается шаблон для идентификации номера американского социального страхования (например, «999-99-9999»):

Установите  ssnPattern  на  < 3  цифры,  затем  прочерк,  затем  2  цифры,  затем  дефис,  затем  4  цифры >

Узоры можно использовать по-разному.

если  userEntry  соответствует  ssnPattern,  тогда  установите для  validSSN  значение  true
поместить  каждое  вхождение  в  ssnPattern  в  файле  « USERDATA »  в  ssnList
если  clientInfo  Безразлично ' т  содержат  ssnPattern  затем  поместить   < ПЛА  отсутствует >  после того, как  clientInfo


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

Набор  isolatedSSN  к  < ssnPattern  не  предшествует  по  цифре ,  не  следует  по  цифре >


История [ править ]

Язык SenseTalk впервые появился в 1992 году как язык сценариев в HyperSense, приложении для создания мультимедиа для платформы NeXTSTEP , созданном по образцу HyperCard . В то время этот язык был не более чем копией языка HyperCard HyperTalk . Более амбициозное переосмысление и редизайн языка привели к возникновению настоящего языка, с выпуском версии 0.02 в качестве языка сценариев в Eggplant V1.0 в 2002 году. Язык продолжал расти и развиваться с такими улучшениями, как добавление Поддержка для:

  • каждое выражение (аналогично «понимание списков» в других языках) в V1.26 (2007)
  • древовидные структуры данных (встроенная поддержка XML) в V1.30 (2008)
  • итераторы в V1.36 (2008)
  • диапазоны в V1.38 (2009)
  • прямая поддержка HTTP и XML-RPC в V1.53 (2012)
  • Базы данных SQL в V1.63 (2013)
  • единиц в версии 1.67 (в 2014 г.)
  • язык шаблонов SenseTalk (читаемые регулярные выражения) в версии 1.81 (2018)
  • форматы даты с читаемыми токенами в версии 1.91 (2019)
  • операторы if с несколькими регистрами в версии 2.00 (2020)

Ссылки [ править ]

  1. ^ «Математические операторы SenseTalk» .
  2. ^ «Проверить делимость в Python» .
  3. ^ "Программирование, ориентированное на людей" .
  4. ^ "Язык шаблонов SenseTalk" .

Внешние ссылки [ править ]

  • SenseTalk - Программирование, ориентированное на людей
  • SenseTalk - интуитивное программирование
  • Документация SenseTalk
  • Примеры SenseTalk на RosettaCode
  • Eggplant Software, владельцы SenseTalk