SenseTalk es un lenguaje de scripting similar al inglés de alto nivel de la familia XTalk , que admite paradigmas tanto procedimentales como orientados a objetos. Los scripts de SenseTalk están pensados para que la gente común pueda leerlos en gran medida, incluidos aquellos con poca o ninguna formación en programación.
Paradigma | Programación orientada a las personas , multiparadigma , orientada a objetos |
---|---|
Familia | Lenguaje de escritura |
Diseñada por | Douglas Simons |
Desarrollador | Berenjena (software) |
Apareció por primera vez | 1992 |
Lanzamiento estable | 2.03 / enero de 2021 |
Disciplina de mecanografía | Pato |
Licencia | Propiedad |
Extensiones de nombre de archivo |
|
Sitio web | www |
Influenciado por | |
xTalk , HyperTalk |
Con este fin, SenseTalk incluye una serie de elementos del lenguaje que proporcionan una funcionalidad orientada hacia las tareas humanas en lugar del comportamiento subyacente de la máquina. Por ejemplo, para verificar si una cantidad es divisible por 3, el guión podría usar la expresión “ ” o “ ”, con énfasis en la legibilidad y un enfoque en el concepto humano de divisibilidad. [1] Compare esto con lenguajes de programación más tradicionales (C, Java, Python, etc.) donde la misma prueba normalmente se escribiría como “ ”, con el foco en las operaciones de la máquina necesarias para determinar el resultado. [2]if quantity is divisible by 3 …
if quantity is a multiple of 3 …
if (quantity % 3) == 0 …
Este cambio de enfoque desde la computación subyacente de la máquina hacia una descripción similar al inglés del comportamiento en términos humanos conduce a la descripción de SenseTalk como un "lenguaje de programación orientado a las personas". [3]
Caracteristicas distintivas
Como un lenguaje autodenominado de “programación orientada a las personas”, ciertos aspectos del diseño de SenseTalk lo distinguen de otros lenguajes de programación y le dan un sabor distintivo. Estos van desde características mundanas como la insensibilidad a mayúsculas y minúsculas, a elementos sintácticos que mejoran la legibilidad, a características más sutiles como tipos de variables fluidas.
No distingue entre mayúsculas y minúsculas
Las palabras clave de SenseTalk y los nombres de las variables no distinguen entre mayúsculas y minúsculas. Esto permite que las personas sean inconsistentes en el uso de las mayúsculas sin ningún cambio de comportamiento.
Ponga 12 en A ponga 5 en B PUT a + b -> muestra 17
Esto también es cierto para los nombres de propiedades en una lista de propiedades (el nombre de SenseTalk para un diccionario o tabla hash).
Ponga { Name : "Green" , HexCode : "# 00FF00" } en AColor ponga un nombre de color -> muestra "Green" ponga el código HEX de un color -> muestra "# 00FF00"
Además, las operaciones de texto, incluidas las comparaciones, las búsquedas, etc., no distinguen entre mayúsculas y minúsculas de forma predeterminada, aunque pueden distinguirse entre mayúsculas y minúsculas cuando sea necesario.
Establecer el nombre en "McMaster" poner el nombre contiene "maestro" -> muestra Verdadero (se ignoran las mayúsculas y minúsculas) poner el nombre contiene "maestro" considerando el caso -> muestra Falso
Variables
Además de tener nombres que no distinguen entre mayúsculas y minúsculas, las variables en SenseTalk son inusuales en algunos otros aspectos.
Las variables no necesitan declararse y no tienen tipo. Una variable surge cuando se usa por primera vez y su tipo depende del tipo de valor que se almacena en ella.
Tipos de fluidos
Esta flexibilidad va más allá de la “escritura de pato” que se encuentra en otros lenguajes, en los que una determinada variable tiene un tipo que se establece cuando se asigna un valor a la variable. En SenseTalk, una variable se considera un "contenedor" que puede contener cualquier tipo de valor. El tipo de valor que contiene una variable puede cambiar durante la ejecución de un script, por lo que la misma variable puede comenzar con un número, luego una cadena y luego una lista de valores. Esta “fluidez de tipo” permite a las personas trabajar de una manera muy flexible, manipulando los valores a voluntad y tratando cada valor de acuerdo a cómo se está utilizando en un punto dado del guión.
Una consecuencia de las variables sin tipo de SenseTalk es que, en general, no hay operadores "sobrecargados", es decir, operadores que realizan diferentes operaciones según el tipo de variable con la que están trabajando. Por ejemplo, en algunos lenguajes, el operador “+” realizará sumas cuando se use con operandos numéricos y realizará una concatenación de cadenas cuando se use con operandos de cadena. En SenseTalk, los operandos son todos fluidos, por lo que es necesario tener un operador para realizar la suma ("+", que tratará sus operandos como números), y otro operador para la concatenación de cadenas ("&", que tratará sus operandos como números). instrumentos de cuerda).
Ponga 1 + 2 y 3 + 4 -> muestra 37
En este ejemplo, el operador + tiene mayor prioridad que el operador &, por lo que la expresión es equivalente a '(1 + 2) & (3 + 4)' o '3 & 7' dando “37”. Si se usaran paréntesis para realizar el operador & primero, entonces '1 + (2 & 3) + 4' se convertiría en 1 + “23” + 4 dando un resultado de 28.
Variables predefinidas
SenseTalk incluye cientos de "variables predefinidas". Estos son nombres de variable que se pueden usar como variables ordinarias, pero que comienzan con un valor predefinido si se usan sin almacenar primero un valor en ellos. Algunos de los valores predefinidos son números, como pi o cero. Muchos son caracteres o símbolos especiales, como euroSign , copyrightSign o hotBeverage . Y algunos tienen otros tipos de valores, como jsonListFormat , que es una lista de propiedades que contiene varios pares clave / valor que se pueden usar para configurar la propiedad global listFormat.
Ponga "El área de un círculo con radio 5 es:" & pi * 5 al cuadrado
Cualquier variable que no tenga un valor predefinido, y que aún no se le haya asignado explícitamente un valor, se evaluará como su propio nombre o como vacía según el contexto en el que se use. Esto permite que las palabras se utilicen sin comillas en muchos casos en los que, de otro modo, se requerirían comillas.
Poner CookieCount -> muestra "CookieCount" Añadir 3 docenas a CookieCount -> tratado como vacío, o 0 poner CookieCount -> muestra 36
Unidades
SenseTalk permite que los valores numéricos tengan unidades asociadas. Los valores unitarios se convierten según sea necesario al realizar operaciones aritméticas.
Ponga 5 yardas + 2 pies -> muestra 17 pies
Las variables pueden contener valores con unidades. Las unidades se llevan junto con el valor y se aplican en cálculos posteriores.
Ponga 5 yardas en longitud agregue 2 pies a la longitud - el valor de la longitud se convierte en una unidad compatible para realizar la adición de la longitud puesta -> muestra 17 pies pon 42 pulgadas en el ancho del área establecida a la longitud * ancho del área de colocación -> muestra 59,5 pies cuadrados
También se admiten unidades más complejas.
fechas
SenseTalk reconoce fechas y horas en una amplia variedad de formatos y admite cálculos de fecha y hora.
Pon "8:22" - "8:15" -> muestra 420 segundos
Los valores de fecha / hora se pueden almacenar en variables y los formatos se mantienen mediante cálculos.
Ponga "3 de marzo" + 34 días -> muestra "6 de abril"
Ponga "2021-03-04" en nextDateAgregar 4 semanas a nextDate poner nextDate -> muestra "2021-04-01"Agregar 4 meses a nextDate poner nextDate -> muestra "2021-08-01"
Expresiones de fragmentos
Las expresiones de fragmentos de SenseTalk provienen de su herencia como miembro de la familia de lenguajes XTalk derivados de HyperTalk . Las expresiones de fragmentos permiten trabajar con fragmentos de texto utilizando términos familiares en inglés: caracteres, palabras, elementos, líneas. SenseTalk amplía la sintaxis de fragmentos original y extiende su uso más allá del texto, a elementos dentro de una lista y bytes dentro de datos binarios también.
Pon los caracteres del 7 al 11 de "Rumpelstiltskin" -> muestra "zancos"
Coloque los primeros 3 caracteres de la segunda palabra de " catálogo de libros " -> muestra "gato"
Las expresiones de fragmentos también se pueden utilizar para modificar valores. En la terminología del lenguaje Xtalk, una parte de un contenedor (como una variable) también es un contenedor, por lo que cualquier comando que cambie el valor de un contenedor también se puede usar para cambiar una parte.
Pon "Rumpelstiltskin" en funnyNamePon " golpe " en los caracteres 7 a 12 de funnyNameput funnyName -> muestra "Rumpelbumpkin"
Archivos
SenseTalk incluye comandos para abrir, leer y escribir archivos, pero rara vez se utilizan. Un archivo de texto se puede tratar como un contenedor (como una variable), por lo que el contenido del archivo se puede leer simplemente colocando el archivo en una variable. De manera similar, la escritura de un archivo se puede lograr colocando una variable u otra expresión en el archivo.
Coloque el archivo “ / tmp / addressList . txt ” en direccionesPonga " Miriam , 219 Sparrow Ln , Freeburgh , MA " y devuelva después de las direccionesColoque las direcciones en el archivo “ / tmp / addressList . txt "
Dado que un archivo es un contenedor, cualquier comando que modifique un contenedor se puede utilizar directamente en un archivo.
Ponga return & “ Earlybird , 12 Elm St , Vista , NM ” después de la línea 1 del archivo “ / tmp / addressList . txt "
Bases de datos
Acceder a los registros en una base de datos es más complejo que leer un archivo, pero SenseTalk también aplica aquí el concepto de contenedores. Esto hace posible conectarse a una base de datos y actualizar un campo en un registro específico con muy poco código.
Ingrese { tipo : " ODBC " , DSN : " clientes " , usuario : " admin " , contraseña : " sEcrEt " } en custDBPoner la mesa “ suscripciones ” de custDB en submarinos - hace que la conexión a una mesa de DBAñadir 12 meses a EXPDATE de la registro de submarinos , donde CUSTNUM es “ 83946 - d ” - actualiza un valor en un registro particular
Lenguaje de patrones
El “lenguaje de patrones” de SenseTalk [4] implementa expresiones regulares usando una sintaxis legible similar al inglés. El siguiente ejemplo crea un patrón para identificar un número de Seguro Social estadounidense (como "999-99-9999"):
Establezca ssnPattern en < 3 dígitos, luego guiones, luego 2 dígitos, luego guiones y luego 4 dígitos >
Los patrones se pueden utilizar de diversas formas.
si userEntry coincide con ssnPattern , establezca validSSN en verdadero
poner cada aparición de ssnPattern en el archivo " userData " en ssnList
Si clientinfo doesn ' t contener ssnPattern luego poner ‘ < SSN faltante > ’ después de clientinfo
El lenguaje de patrones permite construir patrones a partir de otros patrones. Este ejemplo utiliza el ssnPattern anterior para definir un patrón que evitará la coincidencia en los casos en que el carácter inmediatamente anterior o siguiente también sea un dígito:
establezca isolatedSSN en < ssnPattern no precedido por un dígito , no seguido por un dígito >
Historia
El lenguaje SenseTalk apareció por primera vez en 1992 como lenguaje de scripting en HyperSense, una aplicación de creación multimedia para la plataforma NeXTSTEP , modelada a partir de HyperCard . En ese momento, el lenguaje era poco más que una copia del lenguaje HyperTalk de HyperCard . Un replanteamiento y un rediseño más ambicioso del lenguaje dieron como resultado los inicios del lenguaje actual, con la versión 0.02 como lenguaje de scripting en Eggplant V1.0 en 2002. El lenguaje ha seguido creciendo y evolucionando, con mejoras como la adición de apoyo para:
- cada expresión (similar a "listas por comprensión" en otros idiomas) en V1.26 (2007)
- estructuras de datos de árbol (soporte XML nativo) en V1.30 (2008)
- iteradores en V1.36 (2008)
- rangos en V1.38 (2009)
- soporte directo para HTTP y XML-RPC en V1.53 (2012)
- Bases de datos SQL en V1.63 (2013)
- unidades en V1.67 (en 2014)
- el lenguaje de patrones SenseTalk (expresiones regulares legibles) en V1.81 (2018)
- formatos de fecha con tokens legibles en V1.91 (2019)
- declaraciones if de varios casos en V2.00 (2020)