Articulo de referencia

SenseTalk

.script \n* .st \n}}"},"license":{"wt":"[[Proprietary software|Proprietary]]"},"website":{"wt":"{{URL|https://www.sensetalk.com/}}"}},"i":0}}]}"> SenseTalk es un lenguaje de scr...

SenseTalk es un lenguaje de scripting de alto nivel, similar al inglés, perteneciente a la familia XTalk , que admite tanto paradigmas procedimentales como orientados a objetos . Los scripts de SenseTalk están diseñados para que sean fácilmente legibles por cualquier persona, incluso por aquellas con poca o ninguna formación en programación.

Para ello, SenseTalk incluye varios elementos de lenguaje que proporcionan funcionalidad orientada a las tareas humanas en lugar del comportamiento subyacente de la máquina. Por ejemplo, para comprobar si una cantidad es divisible por 3, el script podría usar la expresión o , con énfasis en la legibilidad y en el concepto humano de divisibilidad. [ 1 ] Compárese esto con lenguajes de programación más tradicionales (C, Java, Python, etc.) donde la misma prueba normalmente se escribiría como , con el enfoque en las operaciones de la máquina necesarias para determinar el resultado. [ 2 ]ifquantityisdivisibleby3ifquantityisamultipleof3if(quantity%3)==0

Este cambio de enfoque, que se aleja del cálculo subyacente de la máquina y se dirige hacia una descripción del comportamiento en términos humanos, similar al inglés, lleva a describir SenseTalk como un "lenguaje de programación orientado a las personas". [ 3 ]

Características distintivas

Como lenguaje de programación autodenominado "orientado a las personas", ciertos aspectos del diseño de SenseTalk lo distinguen de otros lenguajes de programación y le otorgan un carácter único. Estos aspectos abarcan desde características básicas como la insensibilidad a mayúsculas y minúsculas, hasta elementos sintácticos que mejoran la legibilidad, pasando por características más sutiles como los tipos de variables fluidos, e incluso funciones avanzadas como las unidades y el lenguaje de patrones de SenseTalk .

No distingue entre mayúsculas y minúsculas

Las palabras clave y los nombres de variables de SenseTalk no distinguen entre mayúsculas y minúsculas. Esto permite que los usuarios utilicen las mayúsculas de forma informal sin que ello suponga ningún cambio en su comportamiento.

Pon 12 en Manzanas pon 5 en Plátanos PUT "Total de piezas de fruta: " & manzanas + plátanos --> muestra "Total de piezas de fruta: 17"

Esto también se aplica a los nombres de las propiedades en una lista de propiedades (nombre que SenseTalk le da a un diccionario o tabla hash ).

Introduce { Nombre : "Verde" , Código hexadecimal : "#00FF00" } en AColor. Introduce el nombre de aColor --> muestra "Verde". Introduce el código hexadecimal de aColor --> muestra "#00FF00".

Además, las operaciones de texto, incluidas las comparaciones, las búsquedas, etc., no distinguen entre mayúsculas y minúsculas por defecto, aunque se pueden configurar para que sí lo hagan cuando sea necesario.

Establecer nombre a "McMaster" poner nombre contiene "master" --> muestra Verdadero (se ignora mayúsculas y minúsculas) poner nombre contiene "master" considerando mayúsculas y minúsculas --> muestra Falso

Tipos de fluidos

Además de tener nombres que no distinguen entre mayúsculas y minúsculas, las variables en SenseTalk son inusuales en otros aspectos. No es necesario declararlas y no tienen tipo. Una variable se crea cuando se usa por primera vez, y su tipo depende del tipo de valor que almacena.

Esta flexibilidad va más allá del " tipado dinámico " que se encuentra en otros lenguajes, donde el tipo de una variable se establece al asignarle un valor. 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, de modo que la misma variable puede comenzar conteniendo un número, luego una cadena de texto y, posteriormente, una lista de valores. Esta "fluidez de tipos" permite trabajar de forma muy flexible, manipulando los valores a voluntad y tratando cada valor según su uso en cada punto del script.

Una consecuencia de las variables sin tipo de SenseTalk es que, en general, no existe la sobrecarga de operadores , es decir, operadores que realizan operaciones diferentes según el tipo de variable con la que trabajan. Por ejemplo, en algunos lenguajes, el +operador realiza la suma cuando se usa con operandos numéricos y la concatenación de cadenas cuando se usa con operandos de cadena. En SenseTalk, todos los operandos son 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 cadenas).

Suma 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', que da como resultado "37". Si se usaran paréntesis para realizar &primero el operador, entonces '1 + (2 & 3) + 4' se convertiría en 1 + "23" + 4, que daría como resultado 28.

Variables predefinidas

SenseTalk incluye cientos de "variables predefinidas". Se trata de nombres de variables que pueden usarse como variables normales, pero que parten de un valor predefinido si se utilizan sin almacenar previamente ningún valor en ellas. 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 establecer la propiedad global listFormat.

Escribe "El área de un círculo con radio 5 es: " & pi * 5 al cuadrado

Cualquier variable que no tenga un valor predefinido y al 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 utilice. Esto permite usar palabras sin comillas en muchos casos en los que, de otro modo, serían necesarias.

Poner CookieCount --> muestra "CookieCount" Agregar 3 docenas a CookieCount --> se trata como vacío, o 0 poner CookieCount --> muestra 36

Unidades

SenseTalk ofrece compatibilidad total con diversos tipos de unidades (longitud, masa, duración, volumen, frecuencia, etc.). Los valores numéricos pueden tener unidades asociadas. Los valores de las unidades se convierten según sea necesario al realizar operaciones aritméticas.

Coloca 5 yardas + 2 pies --> muestra 17 pies

Las variables pueden contener valores con unidades. Las unidades se conservan junto con el valor y se aplican en los cálculos posteriores.

Introduzca 5 yardas en longitud , añada 2 pies a longitud ; el valor en longitud se convierte a una unidad compatible para realizar la suma. Introduzca longitud -- > muestra 17 pies. Introduzca 42 pulgadas en ancho. Establezca el área como longitud * ancho. Introduzca área --> muestra 59,5 pies cuadrados.

También se admiten unidades más complejas, como la velocidad (millas por hora o metros por segundo) o la aceleración (m/s²).

Fechas

SenseTalk reconoce fechas y horas en una amplia variedad de formatos y admite cálculos de fecha y hora.

Introduzca "8:22" - "8:15" --> muestra 420 segundos

Los valores de fecha y hora se pueden almacenar en variables, y los formatos se mantienen mediante cálculos.

Introduce "3 de marzo" + 34 días --> muestra "6 de abril"
Introduce "2021-03-04" en nextDateAgregar 4 semanas a nextDate poner nextDate --> muestra "2021-04-01"Agregar 4 meses a nextDate put 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 . Estas expresiones permiten trabajar con fragmentos de texto utilizando términos ingleses comunes: caracteres, palabras, elementos y líneas. SenseTalk amplía la sintaxis original de fragmentos y extiende su uso más allá del texto, incluyendo elementos dentro de una lista y bytes dentro de datos binarios.

Coloca los caracteres del 7 al 11 de "Rumpelstiltskin" --> muestra "zanco"
Coloca los primeros 3 caracteres de la segunda palabra de "book catalog" --> muestra "cat"

Las expresiones de fragmento también se pueden usar para modificar valores. En la terminología del lenguaje Xtalk, un fragmento 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 un fragmento.

Pon "Rumpelstiltskin" en funnyNameColoca "bump" en los caracteres 7 al 12 de funnyName.introduce funnyName --> muestra "Rumpelbumpkin"

Archivos

SenseTalk incluye comandos para abrir, leer y escribir archivos. Un archivo de texto puede tratarse como un contenedor (similar a una variable), por lo que su contenido se puede leer simplemente asignándole una variable. Del mismo modo, se puede escribir en un archivo insertando una variable u otra expresión en él.

Coloca el archivo "/tmp/addressList.txt" en direccionesEscriba "Miriam, 219 Sparrow Ln, Freeburgh, MA" y devuelva un retorno después de las direcciones.Introduce las direcciones en el archivo "/tmp/addressList.txt"

Dado que un archivo es un contenedor, cualquier comando que modifique un contenedor puede utilizarse directamente sobre un archivo.

Inserta return y "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 de una base de datos es más complejo que leer un archivo, pero SenseTalk también aplica el concepto de contenedores en este caso. Esto permite conectarse a una base de datos y actualizar un campo en un registro específico con muy poco código.

Inserta { type : "ODBC" , DSN : "customers" , user : "admin" , password : "sEcrEt" } en custDBColocar la tabla "subscriptions" de custDB en subs -- establece una conexión con una tabla de la base de datos.Agregue 12 meses a la fecha de vencimiento del registro de subcontratistas donde CustNum sea "83946-d" -- actualiza un valor en un registro en particular

Lenguaje de patrones

El "lenguaje de patrones" de SenseTalk [ 4 ] implementa expresiones regulares utilizando 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 un guion, luego 2 dígitos , luego un guion, luego 4 dígitos >

Los patrones se pueden utilizar de diversas maneras.

Si userEntry coincide con ssnPattern, entonces establezca validSSN en verdadero.
Coloca cada aparición de ssnPattern en el archivo "userData" en ssnList.
Si clientInfo no contiene ssnPattern , entonces coloque " <SSN faltante>" después de clientInfo.

El lenguaje de patrones permite construir patrones a partir de otros patrones. Este ejemplo utiliza el patrón ssnPattern anterior para definir un patrón que evitará la coincidencia en los casos en que el carácter inmediatamente anterior o posterior también sea un dígito:

establecer isolatedSSN a < ssnPattern no precedido por dígito , no seguido por 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 , basada en HyperCard . En aquel entonces, el lenguaje era poco más que una copia del lenguaje HyperTalk de HyperCard . Una revisión y rediseño más ambiciosos del lenguaje dieron como resultado el inicio del lenguaje actual, cuya versión 0.02 se lanzó como lenguaje de scripting en Eggplant V1.0 en 2002. El lenguaje ha seguido creciendo y evolucionando, con mejoras como la adición de soporte para:

  • cada expresión (similar a las "comprensiones de listas" en otros lenguajes) en v1.26 (2007)
  • Estructuras de datos de árbol (compatibilidad nativa con XML) en la versión 1.30 (2008).
  • iteradores en v1.36 (2008)
  • rangos en v1.38 (2009)
  • Soporte directo para HTTP y XML-RPC en la versión 1.53 (2012).
  • Bases de datos SQL en la versión 1.63 (2013)
  • unidades en v1.67 (en 2014)
  • El lenguaje de patrones SenseTalk (expresiones regulares legibles) en la versión 1.81 (2018)
  • Formatos de fecha con tokens legibles en la versión 1.91 (2019)
  • Sentencias condicionales con múltiples casos en la versión 2.00 (2020)
  • expresiones each; uso de expresiones each para contenedores en v2.04 (2021)

Referencias

  1. "Operadores matemáticos de SenseTalk" .
  2. "Comprobar la divisibilidad en Python" .
  3. "Programación orientada a las personas" .
  4. "Lenguaje de patrones SenseTalk" .
  • Sitio web oficial
  • SenseTalk - Programación intuitiva
  • Documentación de SenseTalk
  • Ejemplos de SenseTalk en RosettaCode
  • Keysight Technologies, propietaria de SenseTalk