MetaCard y Revolution: Herramientas de autor multiplataforma para multimedia | ||
---|---|---|
Anterior | Capítulo 3. Programación en MetaTalk y Transcript | Siguiente |
Los vectores (arrays) junto con las listas son dos elementos estructurados habituales de un lenguje de programación. En MetaTalk se puede trabajar a modo de listas puesto que las variables no tienen un tamaño predefinido y puede crecer o disminuir con los contenidos que se les asignan. En este caso el siguiente o el antecesor se han de traducir a operaciones con los trozos (chunks) que permite direccionar el lenguaje
El caso de los vectores es tanto o más interesante. Los elementos del vector se puede indexar a partir de valores numéricos, como es usual entre corchetes.
local codics on mouseUp repeat with i = 1 to 3 put (i*10+1) into codics[ i ] end repeat put the keys of codics repeat with i = 1 to the number of lines of (the keys of codics) answer i & return & codics[ i ] end repeat end mouseUp
El número de dimensiones de los vectores no está limitado, así que se pueden construir matrices (matrix) y operar con ellas con las funciones que incorpora el lenguaje.
local matriuA, matriuB, matriuC, dimensio on mouseUp repeat with i = 1 to 3 repeat with j = 1 to 3 put (i&j) into matriuA[i,j] put 2 into matriuB[i,j] end repeat end repeat put matrixMultiply(matriuA, matriuB) into matriuC put extents(matriuC) into dimensio put "a" && extents(matriuA) && return &\ "b" && extents(matriuB) && return &\ "c" && dimensio repeat with i = 1 to the second item of line 1 of dimensio repeat with j = 1 to the second item of line 2 of dimensio answer i & "," & j && matriuC[ i,j ] end repeat end repeat end mouseUp #Per si tens interés, deu donar: # C = A * B # 72 72 72 11 12 13 2 2 2 #132 132 132 = 21 22 23 * 2 2 2 #192 192 192 31 32 33 2 2 2
La función extents permite obtener el número de entradas; en realidad el índice menor y el mayor utilizados. Si tuviese más de una dimensión, cada rango de valores aparece en separado del siguiente por un salto de línea. La función keys también lo obtiene, además de los valores de los índices de una variable; se ha introducido aquí para comparar el tratamiento con los vectores asociativos. El interés de estos radica en la facilidad con que se implemetan los diccionarios y otros objetos que consisten en indexar los elementos por una clave no numérica. Estos son una variante de los vectores donde los elementos índice no son numéricos sino alfabéticos.
El siguiente ejemplo muestra cómo se puede generar un vector asociativo a partir de una cadena de caracteres, cómo se pueden ordenar los elementos de índice (el criterio no tiene por qué ser alfabético, pero era el más sencillo) y cómo acceder a los valores almacenados. Por si lo está pensado: sí, existe una orden combine que hace la operación inversa a split. Sencillo, ¿verdad?
local codicsTecles="codic_a=97&codic_e=101&codic_i=105&codic_o=111&codic_u=117" on mouseUp put "Inicialment:" && codicsTecles answer "Antes" & return & keys( codicsTecles ) titled "Antes" split codicsTecles by "&" and "=" put keys( codicsTecles ) into varAux sort lines of varAux answer "Despues" & return & varAux titled "Despues" repeat with i = 1 to the number of lines of varAux answer codicsTecles[ (line i of varAux) ] && return & (line i of varAux) end repeat end mouseUp