Jump to content

SenseTalk

SenseTalk
Парадигма Человеко-ориентированное программирование , Мультипарадигмальность , Объектно-ориентированное
Семья Язык сценариев
Разработано Дуглас Саймонс
Разработчик Баклажан (программное обеспечение)
Впервые появился 1992 год ; 32 года назад ( 1992 )
Стабильная версия
2.18 / июнь 2024 г .; 2 месяца назад ( 2024-06 )
Дисциплина набора текста Утка
Лицензия Собственный
Расширения имен файлов
  • .script
  • .st
Веб-сайт www .senstalk
Под влиянием
xTalk , ГиперТок

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

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

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

Отличительные характеристики

[ редактировать ]

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

Регистронезависимый

[ редактировать ]

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

Поместите   12   в   яблоки  поместите   5   в   бананы  PUT   «Всего фруктов: »   и   яблоки  +  бананы   --> отобразится «Всего фруктов: 17» 

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

Поместите   {  Name  :  "Green"  ,   HexCode  :  "#00FF00"  цвета   --   >  отобразит   Green  "  в AColor вставьте имя   "  поместите   HEXкод   }   цвета   --   > отобразит "#00FF00" 

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

Установить   имя   на   «McMaster»  put   имя   содержит   «master»   --> отображает True (регистр игнорируется)  put   имя   содержит   «master»   с учетом  регистра   --> отображает 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 равна: »   &   пи   *   5   в квадрате. 

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

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

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

Поставьте   5   ярдов   +   2   фута   --> отобразится 17 футов. 

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

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

Также поддерживаются более сложные единицы измерения, такие как скорость (мили в час или метры в секунду) или ускорение (м/с^2).


SenseTalk распознает дату и время в самых разных форматах и ​​поддерживает вычисления даты и времени.

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

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

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


Выражения фрагментов

[ редактировать ]

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

Поместите   символы   с 7   по   11   из   «Румпельштильцхена»   -> отображает «ходулю». 
Поместите   первые   .   3   символа   слова   второго   «   каталог   »   »  книг   кот  --   > отобразится « 

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

Вставьте   «Румпельштильцхен»   в   смешное имя.  Вставьте   «  бамп  »   в   символы   с 7   по   12   Вставьте   смешного имени.  смешное   имя   --> отобразит «Румпельбампкин». 


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

Поместите   файл   «/tmp/addressList.txt»   в   адреса.  Поместите   «Miriam, 219 Sparrow Ln, Freeburgh, MA»   и   вернитесь   после   адресов.  Поместите   адреса   в   файл   «/tmp/addressList.txt». 

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

Поместите   return   &   «Earlybird, 12 Elm St, Vista, NM»   после   строки   1   файла   .   «/tmp/addressList.txt» 

Базы данных

[ редактировать ]

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

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


Язык шаблонов

[ редактировать ]

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

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

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

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


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

установите   изолированногоSSN   для   значение <  ssnPattern,   не   предшествует   которому   цифра  ,   не   следует   цифра   и  > 


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

  • каждое выражение (аналогично «пониманию списков» на других языках) в версии 1.26 (2007 г.)
  • древовидные структуры данных (встроенная поддержка XML) в версии 1.30 (2008 г.)
  • итераторы в версии 1.36 (2008 г.)
  • диапазоны в версии 1.38 (2009 г.)
  • прямая поддержка HTTP и XML-RPC в версии 1.53 (2012 г.)
  • Базы данных SQL в версии 1.63 (2013 г.)
  • юниты в V1.67 (в 2014 г.)
  • язык шаблонов SenseTalk (читаемые регулярные выражения) в версии 1.81 (2018 г.)
  • форматы даты с читаемыми токенами в версии 1.91 (2019 г.)
  • операторы if с несколькими регистрами в версии 2.00 (2020 г.)
  • каждое выражение; использование каждого выражения для контейнеров в версии 2.04 (2021 г.)
  1. ^ «Математические операторы SenseTalk» .
  2. ^ «Проверка делимости в Python» .
  3. ^ «Человеческо-ориентированное программирование» .
  4. ^ «Язык шаблонов SenseTalk» .
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: dfa1ea2347d7a48dd8fd0218178bc0e6__1722268740
URL1:https://arc.ask3.ru/arc/aa/df/e6/dfa1ea2347d7a48dd8fd0218178bc0e6.html
Заголовок, (Title) документа по адресу, URL1:
SenseTalk - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)