Парадигма | Программирование , ориентированное на людей , мультипарадигма , объектно-ориентированное |
---|---|
Семья | Язык сценариев |
Разработано | Дуглас Саймонс |
Разработчик | Баклажан (программное обеспечение) |
Впервые появился | 1992 |
Стабильный выпуск | 2.03 / январь 2021 г . |
Печатная дисциплина | Утка |
Лицензия | Проприетарный |
Расширения имени файла |
|
Веб-сайт | www |
Под влиянием | |
xTalk , HyperTalk |
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)
Ссылки [ править ]
- ^ «Математические операторы SenseTalk» .
- ^ «Проверить делимость в Python» .
- ^ "Программирование, ориентированное на людей" .
- ^ "Язык шаблонов SenseTalk" .
Внешние ссылки [ править ]
- SenseTalk - Программирование, ориентированное на людей
- SenseTalk - интуитивное программирование
- Документация SenseTalk
- Примеры SenseTalk на RosettaCode
- Eggplant Software, владельцы SenseTalk