stringtranslate.com

Hablar con sentido

SenseTalk es un lenguaje de programación de alto nivel similar al inglés de la familia XTalk , que admite paradigmas tanto procedimentales como orientados a objetos . Los scripts de SenseTalk están pensados ​​para que sean legibles en gran medida por personas comunes, incluidas aquellas con poca o ninguna formación en programación.

Para ello, SenseTalk incluye una serie de elementos del lenguaje que proporcionan una 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 utilizar la expresión o , poniendo el énfasis en la legibilidad y centrándose en el concepto humano de divisibilidad. [1] Compárese esto con los lenguajes de programación más tradicionales (C, Java, Python, etc.) donde la misma prueba normalmente se escribiría como , centrándose 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, que se aleja del cálculo subyacente de la máquina y se dirige 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]

Características distintivas

Como lenguaje 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 toque distintivo. Estos van desde características mundanas como la falta de distinción entre mayúsculas y minúsculas, hasta elementos sintácticos que mejoran la legibilidad, pasando por características más sutiles como tipos de variables fluidos, hasta funciones avanzadas como unidades y el lenguaje de patrones SenseTalk.

No distingue entre mayúsculas y minúsculas

Los nombres de variables y palabras clave de SenseTalk no distinguen entre mayúsculas y minúsculas, lo que permite que las personas utilicen las mayúsculas de forma informal sin cambiar su comportamiento.

Ponga  12  en  manzanas, ponga  5  en  plátanos. PONGA  "Total de piezas de fruta: "  y  manzanas + plátanos  --> muestra "Total de piezas de fruta: 17"

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

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

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

Establezca  el nombre  en  "McMaster", coloque  el nombre  que contiene  "master"  --> muestra Verdadero (se ignoran las mayúsculas y minúsculas) coloque  el nombre  que contiene  "master"  considerando las 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. Las variables no necesitan ser declaradas y no tienen tipo. Una variable surge cuando se utiliza por primera vez y su tipo depende del tipo de valor que se almacena en ella.

Esta flexibilidad va más allá del “ tipo pato ” que se encuentra en otros lenguajes, en el que una variable dada tiene un tipo que se establece cuando se le asigna 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, por lo que la misma variable puede comenzar conteniendo un número, luego una cadena y luego una lista de valores. Esta “fluidez de tipos” permite a las personas trabajar de una manera muy flexible, manipulando valores a voluntad y tratando cada valor de acuerdo con cómo se está utilizando en un punto dado del script.

Una consecuencia de las variables sin tipo de SenseTalk es que, en general, no hay operadores “sobrecargados” —es decir, operadores que realizan operaciones diferentes según el tipo de variable con la que estén trabajando—. Por ejemplo, en algunos lenguajes, el +operador realizará una suma 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 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', lo que da como resultado “37”. Si se usaran paréntesis para ejecutar el &operador primero, entonces '1 + (2 & 3) + 4' se convertiría en 1 + “23” + 4, lo que daría como resultado 28.

Variables predefinidas

SenseTalk incluye cientos de “variables predefinidas”. Se trata de nombres de variables que se pueden utilizar como variables ordinarias, pero que comienzan con un valor predefinido si se utilizan sin almacenar primero un valor en ellas. Algunos de los valores predefinidos son números, como pi o cero. Muchos son caracteres especiales o símbolos, 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 utilizar para configurar la propiedad global listFormat .

Ponga  "El área de un círculo con radio 5 es: "  y  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 utilice. Esto permite utilizar palabras sin comillas en muchos casos en los que, de otro modo, se requerirían comillas.

Ponga  CookieCount  --> muestra "CookieCount" Agregue  3  docenas  a  CookieCount  --> se trata como vacío o 0 Ponga  CookieCount  --> muestra 36

Unidades

SenseTalk incluye compatibilidad total con muchos tipos diferentes 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.

Coloque  5  yardas  +  2  pies  -> muestra 17 pies

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

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

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


Fechas

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

Ponga  "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.

Pon  "3 de marzo"  +  34  días  --> muestra "6 de abril"
Ponga  "2021-03-04"  en  nextDateAgregue  4  semanas  a  nextDate. Ponga  nextDate  --> muestra "2021-04-01"Agregue  4  meses  a  nextDate. Ponga  nextDate  --> muestra “2021-08-01”


Expresiones fragmentadas

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 ingleses conocidos: caracteres, palabras, elementos, líneas. SenseTalk amplía la sintaxis de fragmentos original y extiende su uso más allá del texto, a los elementos dentro de una lista y también a los bytes dentro de datos binarios.

Coloca  los caracteres  7  a  11  de  "Rumpelstiltskin"  --> muestra "zanco"
Coloque  los  primeros  3  caracteres  de  la  segunda  palabra  de  catálogo de libros  --> muestra “cat” 

Las expresiones de fragmentos también se pueden utilizar 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 utilizar para cambiar un fragmento.

Pon  "Rumpelstiltskin"  en  funnyNameColoque  bump  en  los caracteres  7  a  12  de  funnyNamePon  funnyName  --> muestra “Rumpelbumpkin”


Archivos

SenseTalk incluye comandos para abrir, leer y escribir archivos. 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, se puede escribir un archivo colocando una variable u otra expresión en el archivo.

Coloque  el archivo  "/tmp/addressList.txt"  en  direccionesColoque  "Miriam, 219 Sparrow Ln, Freeburgh, MA"  y  retorne  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.

Coloque  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. Esto permite conectarse a una base de datos y actualizar un campo en un registro específico con muy poco código.

Coloque  { tipo : ODBC ,  DSN : clientes ,  usuario : admin ,  contraseña : sEcrEt }  en  custDBColocar  la tabla  suscripciones  de  custDB  en  subs  – establece una conexión con una tabla de DBAgregue  12  meses  a  la fecha de vencimiento  del  registro de subs donde CustNum es 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 a la del inglés. El siguiente ejemplo crea un patrón para identificar un número de la Seguridad Social estadounidense (como “999-99-9999”):

Establezca  ssnPattern  en  < 3  dígitos  , luego  guión,  luego  2  dígitos  , luego  guión,  luego  4  dígitos >

Los patrones se pueden utilizar de distintas maneras.

Si  userEntry  coincide con  ssnPattern  ,  establezca  validSSN  en  verdadero
Coloque  cada  ocurrencia  de  ssnPattern  en  el archivo  userData  en  ssnList
Si  clientInfo  no contiene ssnPattern , coloque < SSN missing > después de clientInfo         


El lenguaje de patrones permite crear 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 posterior también sea un dígito:

Establezca  isolateSSN  en  < ssnPattern  no  precedido  por  dígito ,  no  seguido  por  dígito >


Historia

El lenguaje SenseTalk apareció por primera vez en 1992 como lenguaje de programación en HyperSense, una aplicación de creación multimedia para la plataforma NeXTSTEP , basada en HyperCard . En ese momento, el lenguaje era poco más que una copia del lenguaje HyperTalk de HyperCard . Un rediseño y replanteamiento más ambicioso del lenguaje dio como resultado los inicios del lenguaje actual, con la versión 0.02 que se lanzó como lenguaje de programación en Eggplant V1.0 en 2002. El lenguaje ha seguido creciendo y evolucionando, con mejoras como la incorporación de compatibilidad con:

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".

Enlaces externos