De Wikipedia, la enciclopedia libre
Ir a navegaciónSaltar a buscar

xTalk es una familia vagamente definida de lenguajes de secuencias de comandos . La madre de todos los lenguajes xTalk es HyperTalk , el lenguaje utilizado por el entorno HyperCard de Apple . Estos lenguajes se caracterizan por sintaxis simples similares al inglés , utilizando metáforas de la vida real sobre un aparato de envío de mensajes e imágenes de estilo Smalltalk, con límites de bloque de estilo Pascal, pero una estructura menos rígida.

Un guión de muestra

 en  mouseUp  vaya  a  la  tercera  tarjeta  si  la  última  palabra  de  la  primera  línea  del  campo 1 de la tarjeta  contiene "hola", luego diga "Okay" repita mientras el mouse está arriba beep end repeat end mouseUp                 

xTalk idiomas

Los lenguajes xTalk comparten un conjunto común de estructuras y comandos de datos básicos, así como el modelo de objeto general, y por lo tanto permiten una portabilidad relativa entre sí:

Idiomas inspirados en xTalk

Algunos lenguajes de programación tienen similitudes superficiales con HyperTalk y se inspiraron en él. Sin embargo, tienen modelos de objetos que difieren tan sustancialmente que la migración de código de otro xTalk requiere una reescritura completa:

Construcciones del lenguaje

Todos los lenguajes xTalk comparten las siguientes construcciones básicas:

Mensajería y controladores

xTalk tiene mensajería similar a Smalltalk. [1] Para enviar un mensaje, escriba un comando o llamada a una función:

 commandName 1,2,3
 poner  functionName ( 1 , 2 , 3 )  en el  resultado

como en Pascal. Este mensaje y sus parámetros no requieren declaraciones, se resuelven en tiempo de ejecución al manejador correcto. Un manejador parece

 en  CommandName  param1 , param2 , param3  - las cosas aquí  terminan  CommandName function  functionName  param1 , param2 , param3  - hacer cosas aquí  end  functionName

y se comporta bastante como el equivalente de Pascal, excepto que su lista de parámetros es variable. [2] Si se pasan menos parámetros a un controlador de los que declara en su primera línea, las variables restantes se rellenan con cadenas vacías. Si se pasan más, se ignoran en silencio. En lugar de declarar los parámetros como una lista después del nombre del controlador, también se puede acceder a ellos mediante las funciones paramCount()y param(), que también dan acceso a los parámetros ignorados.

Los scripts xTalk a menudo se adjuntan a objetos (HyperTalk, SuperTalk, MediaTalk, LiveCode), aunque no siempre (por ejemplo, CompileIt !, SenseTalk). Si una secuencia de comandos no contiene un controlador para un mensaje en particular que utiliza, el mensaje se pasa a la secuencia de comandos del objeto propietario para que lo maneje. Los scripts también pueden transmitir manualmente un mensaje a los padres mediante el passcomando.

Comandos centrales

Todos los xTalks admiten los siguientes comandos básicos:

 poner <valor> en <contenedor>

Esta es la declaración de asignación principal. La mayoría de xTalks también admiten aftero beforepara prefijar / agregar valores entre sí. También admiten un comando 'get <value>' que es equivalente a una instrucción put en un contenedor llamado 'it'.

 return <valor>

Al igual que en Pascal, así es como un controlador pasa datos al remitente del mensaje. Esto también es válido en los controladores de comandos, donde el valor de retorno se almacenará en la variable incorporada the result.

 establecer  [ la ]  < propiedad >  [ de  [ < rango >  de ]  < objeto > ]  en  < valor >

Cambie la propiedad de un objeto (o un rango de texto en su contenido de texto) a un valor dado. Esto se utiliza tanto para modificar variables de instancia de objetos como para aplicar estilos de texto a campos de texto. Si no se especifica ningún objeto, se asume una propiedad global de la propia aplicación host.

Estructuras de control

Todos los xTalks admiten declaraciones condicionales de la siguiente forma:

 Si  < condición >  entonces  los comandos  demás  comandos  final  si

Si se omite el salto de línea que sigue a una ifdeclaración theno elsetoken, solo puede seguir un comando y la end ifdeclaración puede omitirse. Esto permite escribir una declaración if-then-else completa en una sola línea y encadenar condicionales como cadenas if-then-else-if-then-else. Además, elsese puede omitir todo el bloque. El thentoken puede estar envuelto en la siguiente línea.

Las declaraciones de bucle no son tan libres:

 repetir  [ para ]  < contar >  [ veces ]  comandos  finalizar  repetir repetir  con  < variableName >  =  < startNumber >  [ abajo ]  a  < endNumber >  comandos  end  repeat repetir  mientras  < condición >  comandos  finalizar  repetir repetir  hasta  que los comandos de < condición >  finalicen repetir  

Muchos dialectos agregan sintaxis de bucle adicional para cosas como bucle sobre fragmentos.

Expresiones y operadores

xTalks admite las expresiones matemáticas habituales. [3] Aparte de los habituales +, -, *y /los operadores, sino que también soportan div(división entera), ^(exponente), mod(resto de la división entera), =o is(igualdad), <>, o is not(desigualdad), <, >, <=, >=, , (comparación de número de / orden de las cuerdas especie), contains, is in, is not in(subcadena coincidente), is within, is not within(coordenadas de los puntos se encuentran las coordenadas del rectángulo en el interior), not(negación boolean), and(Y lógico para booleanos), or(OR lógico para booleanos), &(concatenación de cadenas),&&(concatenación de cadenas con un espacio en el medio), is ay is an(detección de tipo), there is a, there is an, there is no, there is not a(determinar la existencia de archivo / objeto).

Variables

Las variables en xTalks no necesitan declararse, sino que se crean de forma bastante transparente cuando se les pone un valor por primera vez. Si se utiliza un nombre de variable en el que aún no se ha puesto nada, se trata como un literal de cadena sin comillas y se evalúa según su nombre (imitando así el comportamiento de un intérprete línea por línea). Las variables en xTalks son variantes, es decir, conceptualmente son todas cadenas, que se interpretan internamente como el tipo de datos para la operación actual que se realiza sobre ellas. Sin embargo, pueden tener los siguientes tipos: cadena, entero, número, punto, rect, fecha o lógico (también conocido como booleano), donde todos son iguales a sus representaciones de cadena, que en el caso de rects y puntos son listas separadas por comas de números (h, v resp. izquierda, arriba, derecha, abajo), las lógicas son "verdaderas" o "falsas".Es perfectamente válido realizar operaciones de cadena sobre números y luego inmediatamente operaciones matemáticas.

Las variables globales deben declararse usando una palabra clave especial (la mayoría de las veces global, pero en algunos xTalks universalse usa la palabra en su lugar) para importarlas al alcance del controlador actual.

Expresiones en trozos

Todos los xTalks admiten expresiones de fragmentos, que son operaciones de nivel medio para extraer y modificar rangos de subcadenas de una variable. Estas expresiones pueden ser tanto de valor como de contenedor, y generalmente tienen la forma:

 <chunkType> <startOffset> [a <endOffset>] de <value>

Donde los tipos de fragmentos admitidos suelen ser char (acter), elemento, palabra o línea (aunque algunos dialectos añaden soporte para bytes y otras unidades de fragmentos). La mayoría de los xTalks admiten cambiar el delimitador que se usará para los elementos (por defecto, la coma) usando la itemDelimiterpropiedad y restablecerlo en un punto posterior (aunque SuperTalk lo restablece a coma al final de cada controlador, mientras que HyperTalk lo restablece solo en tiempo de inactividad , es decir, entre eventos del sistema).

También hay comandos matemáticos como add <value> to <container>etc.

Incompatibilidades entre dialectos

La mayoría de xTalks se basan en una arquitectura de nivel HyperCard 1.2. Dado que HyperCard 1.2 no admitía múltiples ventanas, menús, películas o navegadores web, muchos xTalks implementan estos aspectos de manera diferente. Por ejemplo, SuperTalk implementa múltiples ventanas reemplazando el nivel de 'pila' de la jerarquía de objetos con un 'proyecto' (un contenedor de script que representa el archivo) y una 'ventana' (efectivamente lo que solía ser una pila, pero puede haber varias en una proyecto), mientras que HyperCard 2.0 y LiveCode mantuvieron el nivel de 'pila' y, en su lugar, proporcionaron comandos nuevos (pero diferentes) que permiten solicitar que se abra una segunda pila en su propia ventana en lugar de reemplazar la pila actual en pantalla. HyperSense mantuvo un enfoque similar, pero cambió el nombre de la 'tarjeta' a 'página'.

Los botones y menús emergentes son objetos persistentes completamente nativos en la imagen del archivo del proyecto con scripts en SuperTalk, y se hace referencia como 'elemento "copia" del menú "editar"' y similares, mientras que en HyperTalk son objetos transitorios que se agregan a un La barra de menú global compartida por todas las pilas que usan el comando 'crear menú', son referenciadas por 'menuItem "copia" del menú "editar"' y solo pueden tener un 'menuMessage' de una sola línea que envían cuando se seleccionan.

De manera similar, los tipos y estilos de objetos colocados en una tarjeta difieren mucho entre xTalks en el punto de divergencia de HyperCard 1.2.x. La mayoría tiene botones y campos, pero SuperCard no permite que los campos de fondo tengan el mismo contenido en diferentes tarjetas (lo que requiere el uso de gráficos de texto para dibujar en las etiquetas, algo que HyperCard no tenía). Y el término compuesto "parte" de HyperCard 2.x para incluir botones, campos, etc. en una tarjeta tampoco es compatible con todos los xTalks.

Adiciones tardías al idioma

Aunque HyperCard nunca proporcionó esa característica, la mayoría de xTalks implementan hoy la característica de 'propiedades de usuario' introducida por primera vez por SuperCard. Permite agregar variables de instancia personalizadas a los objetos existentes de la aplicación host, que luego se pueden usar como las propiedades integradas para contener cualquier dato, de cualquier tipo. Un ejemplo de uso de una propiedad de usuario es

 si  ", myProperty,"  no está  en  ","  &  the  userProperties  de   &  ","  entonces  defina  myProperty  de  cd  btn  1  end  si  establece  myProperty  de   en  "Lo que quiera"

También hay un undefinecomando para eliminar propiedades de un objeto nuevamente.

Ver también

Referencias

  1. ^ Pila de referencias de HyperTalk, tarjetas "¿Qué son los mensajes?", "Manejo de mensajes" y "El orden de paso de mensajes"
  2. ^ Pila de referencia de HyperTalk, tarjeta "Uso de variables de parámetro", "paramCount" y "param"
  3. ^ Pila de referencia de HyperTalk, capítulo "Operadores y constantes"

Enlaces externos