Вы находитесь на странице: 1из 54

Introduccin

U na de las m potentes caractersticas de AutoP lay M edia S tudio es su motor de S cript. s Este documento te introducir el nuevo ambiente y lenguaje de S cript. en El S cript de AutoP lay es muy simple, con s un pu lo ado de conceptos por aprender. As es como se mira: a = 5; if a < 1 0 then D M essage(Adivina qu? ," es menor que 1 0"; ialog. " " a ) end ( Nota: Este script es slo una demostraci No te preocupes si an no entiendes nada. n. ) El ejemplo anterior le asigna un valor a una variable, prueba el contenido de esa variable y si el valor resulta que es menor de 1 0,utiliza una acci de AutoP lay llamada n ialog. essagepara mostrarle un mensaje al usuario. D M Los programadores novatos as como los codificadores experimentados encontrar que n el AutoP lay M edia S tudio tiene un poderoso,flexible y sencillo ambiente de S cript en el que pueden introducirse.

Un ejemplo Rpido de Script en AutoPlay Media Studio


Aqu est corto tutorial que te muestra c introducir un S cript en AutoP lay M edia un mo S tudio y previsualizar los resultados: 1. I nicia un nuevo proyecto. 2. C un objeto de bot nuevo. rea n 3. En la categora Actions del panel P ropiedades, haz click en el evento On C lick. U n peque bot de edici con tres puntos deberaparecer enseguida de la o n n palabra None --a la derecha. --

4.H az click en el bot de edici para abrir el editor de S cript.D cuenta que ste se n n ate abre directamente en la pesta On C a lick.

5.Escribe el siguiente texto: D M essage(T itle" " ello W orld"; ialog. " , H ) S e deber as cuando hayas terminado: ver

6.H az click en OK para cerrar el editor de S cript. 7. Elige el men P ublish > P review. 8.U na vez que la aplicaci se est ejecutando,haz click en el bot que creaste. n n Esto activarel evento On C lick del bot as que el S cript que tu introduciste ser n, ejecutado.S e deber el siguiente cuadro de di aparecer: ver logo

F elicidades: Acabas de hacer tu primer S cript.Aunque este es un ejemplo muy sencillo, muestra lo f que es hacer que algo suceda en tu aplicaci AutoP lay. P uedes usar el cil n mtodo arriba descrito para probar cualquier S cript que quieras en AutoP lay M edia S tudio.

Conceptos Importantes de un Script


H ay algunas cosas importantes que en general deber saber acerca del S cript de s AutoP lay M edia S tudio antes de comenzar.

El Script es Global
El motor de S cript es global en el ambiente de tiempo de ejecuci Esto significa que n. todos los eventos sabr acerca de otras variables y funciones declaradas en alguna n otra parte del producto. P or ejemplo, si asignas myvar = 1 0; en el evento On S tartup del proyecto, myvar an serigual a 1 0 cuando el pr ximo evento d inicio. H ay mtodos en torno a esta modalidad global ( V ariable S cope) pero est por lo ver , n general alineados al motor del S cript.

El Script es Sensible a las Maysculas-Minsculas


El motor de S cript es sensible a las maysculas-minsculas. Esto significa que los caracteres en mayscula y minscula son importantes para t picos como contrase as, nombres de variables y nombres de funciones. P or ejemplo: AB = 1 0; C aB = 7; C En el script de arriba, AB y aB se refieren a dos variables distintas, y pueden tener C C diferentes valores. La letra minscula en C la hace completamente diferente de a aB C en cuanto a lo que AutoP lay le concierne. AB El mismo principio tambin se aplica a los nombres de funci P or ejemplo: n. D M essage(Q u tal" " ola M undo"; ialog. " , H ) .. refiere a una funci integrada en AutoP lay.S in embargo, .se n D I ALOG. essage(Q u tal" " ola M undo "; M " , H ) .. ser .no reconocida como una funci integrada, debido a que D n I ALOG y D son ialog vistos como dos nombres completamente diferentes. Nota: Es completamente posible tener dos funciones con las mismas letras pero diferentes en maysculas-minsculas; por ejemplo: GreetU ser y gR EeT U S eR ser n vistas como dos funciones totalmente diferentes. Aunque es absolutamente posible que tales funciones coexistan, generalmente es mejor darle a las funciones nombres completamente diferentes para evitar cualquier confusi n.

Comentarios
S e pueden insertar comentarios no ejecutables dentro de tus scripts para explicar y documentar tu c digo. En un script, cualquier texto despus de dos guiones ( en una --) lnea ser ignorado.P or ejemplo -- Asignar 1 0 a la variable abc abc = 1 0; .. .o: abc = 1 0;-- Asignar 1 0 a abc Los dos ejemplos de arriba hacen exactamente la misma cosa, los comentarios no afectan al script de ningn modo. T ambin puedes crear comentarios multilnea usando --[[ and ] al inicio y al final del ] comentario: --[[ Este es un comentario multilnea ] -] a = 1 0; T e sugerimos usar comentarios para explicar tus scripts tanto como sea posible para hacerlos m f s ciles de entender por ti mismo y por otros.

Delimitando Oraciones
C nica oraci puede estar ya sea en su propia lnea y/ separada por un punto y ada n o coma () P or ejemplo,todos los scripts siguientes son v ;. lidos: Script 1: a= 10 M yV ar = a Script 2: a = 1 0;M yV ar = a; Script 3: a = 1 0; M yV ar = a; S in embargo, te recomendamos que finalices todas las oraciones con un punto y coma ( como en los scripts 2 y 3 de arriba) .

Variables
Qu son las Variables?
Las variables son muy importantes en el S cript de Autoplay. Las variables son simplemente apodoso contenedorespara valores que podran necesitar modificarse o reutilizarse despus. P or ejemplo, el siguiente script asigna el valor 1 0 a la variable llamada cantidad cantidad = 1 0; Nota: D ecimos que los valores son asignados a o almacenados en variables. S i describes una variable como un contenedor que contiene un valor, asignar un valor a una variable es como colocar ese valor dentro del contenedor. P uedes cambiar este valor en cualquier momento asign ndole un valor diferente a la variable;el nuevo valor simplemente reemplazar al anterior. Esta habilidad para contener informaci n cambiable es lo que hace a las variables tan tiles. Aqu te proporcionamos un par de ejemplos demostrando c puedes operar sobre la mo variable cantidad cantidad = 1 0; cantidad = cantidad + 20; D M essage(V alor" cantidad) ialog. " , ; Esto almacena 1 0 en la variable llamada cantidad luego a , ade 20 a ese valor, y finalmente hace que un cuadro de di logo aparezca con el valor actual ( cual es ahora el el nmero 30)en l. T ambin puedes asignar una variable a otra: a = 1 0; b = a; D M essage(V alor" b) ialog. " , ; Esto har un cuadro de di aparezca con el nmero 1 0 en l.La lnea = a; le que logo b asigna el valor de ( cual es 1 0)a . a el b

Campo de Accin de las Variables


C omo se haba mencionado antes, todas las variables en AutoP lay M edia S tudio son globales por defecto. Esto significa justamente que existen en todo el proyecto, y mantienen sus valores desde un script al siguiente. En otras palabras, si un valor es asignado a una variable en un script, la variable mantendran ese valor cuando el siguiente script sea ejecutado. P or ejemplo,si introduces el siguiente script:

foo = 1 0; dentro del evento On Open de la p actual,y luego introduces: gina D M essage(El valor es:" foo) ialog. " , ; dentro del evento On C de un objeto de bot el segundo script utilizar valor lick n, el que le fue asignado a foo en el primer script. C omo resultado, cuando el objeto de bot es clickeado,un cuadro de di aparecer el nmero 1 0 en l. n logo con D cuenta que el orden de ejecuci es importante para que un script sea capaz de ate n usar el valor que le fue asignado a la variable en otro script,ese otro script tiene que ser ejecutado primero. En el ejemplo de arriba, el evento On Open de la p gina es accionado antes que el evento On C del bot as que el valor 1 0 ya est lick n, asignado a foocuando el script del evento On C es ejecutado. lick

Variables Locales
La naturaleza global del motor del S cript significa que una variable retiene su valor a lo largo y ancho de todo tu proyecto. P uedes, sin embargo, hacer variables que sean noglobales usando la palabra clave especial local P oner la palabra . localantes de una variable asignada crea una variable que es local en el script o funci actual. n P or ejemplo,digamos que tienes los siguientes tres scripts en el mismo proyecto: Script 1: -- asigna 1 0 a x x = 1 0; Script 2: local x = 500; D M essage(El valor local de x es:" x) ialog. " , ; x = 250;-- esto cambia la x local,no la global D M essage(El valor local de x es:" x) ialog. " , ; Script 3: -- muestra el valor global de x D M essage(El valor global de x es:" x) ialog. " , ; Asumamos que estos tres scripts son ejecutados uno despus de otro. El primer script le da a x el valor de 1 0. P uesto que todas las variables son globales por defecto, x tendr este valor dentro de todos los otros scripts tambin. El segundo script hace una asignaci local para x, d n ndole el valor de 500 ( pero s dentro de ese script) S i lo . el alguna otra cosa dentro de ese script quiere acceder al valor de x, ver valor local en lugar del global. Es como si la variable fuera temporalmente reemplazada por otra x variable que luce como sta,pero tiene un valor distinto.

(Esto nos recuerda aquellas pelculas donde los ladrones del banco ponen una fotografa enfrente de las cmaras de seguridad de modo que los guardias no vean que la bveda est siendo vaciada. Slo en este caso, es como los ladrones del banco crean una intacta bveda nueva en operacin, como la original, y entonces la desmantelan y luego huyen tranquilamente) C uando se manda mostrar el contenido de x, la primera acci interna D M essage n ialog. del script #2 mostrar500, puesto que es el valor local de x cuando la acci es n ejecutada. La pr xima lnea le asigna 250 al valor local de x ( date cuenta que una vez que haces una variable local, sta reemplaza completamente a la variable global por el resto del script) F . inalmente, la tercera parte del script muestra el valor global de x, el cual es an 1 0. ( Nota: P ara que se muestren los cuadros de di logo como se describe arriba, deber s introducir el S cript #3 en un evento diferente al del S cript #2)

Nominacin de Variables
Los nombres de las variables pueden ser inventados de cualquier combinaci de letras, n dgitos y subrayados, siempre y cuando no comiencen con un nmero y no entren en conflicto con palabras clave reservadas. Ejemplos vlidos para nombres de variables: a strName _M y_V ariable data1 data_1 _23 index bR eset nC ount Ejemplos no vlidos para nombres de variables: 1 1 data % M yV alue% $ ata strD for local _F irstName+ LastName_ U ser Name C lido ( son v no lidas palabras con acento,diresis,ni caracteres especiales)

Palabras Clave Reservadas


Las siguientes palabras est reservadas y no pueden ser utilizadas para nombres de n variables o de funciones:

and end in repeat until

break false local return while

do for nil table

else function not then

elseif if or true

Tipos y Valores
El lenguaje de S cript de Autoplay es din micamente escrito. No hay definiciones de tipo ( s bien,cada valor lleva su propio tipo) m . Esto significa que no tienes que declarar que una variable sea de cierto tipo antes de usarla. P or ejemplo, en C + , si quieres usar un nmero, primero tienes que declarar el + tipo de variable y luego asignarle un valor: int j; j = 1 0; El ejemplo C + de arriba declara a j como un entero,y luego le asigna un valor de 1 0. + C omo hemos visto, en AutoP lay puedes simplemente asignarle un valor a una variable sin declarar su tipo. Las variables realmente no tienen tipos;por el contrario, es el valor interno de ellas lo que hace que sean consideradas un tipo u otro.P or ejemplo: j = 1 0; esto crea autom ticamente la variable llamada y le asigna el valor de 1 0. Aunque j este valor tiene un tipo ( nmero) la variable en s misma es an sin tipo. Esto un , significa que puedes regresar y asignarle un tipo diferente de valor a ,como esto: j j = " ello" H ; Esto reemplaza al nmero 1 0 que es almacenado en con la cadena ello El hecho j H . de que una cadena sea un tipo diferente de valor no importa; a la variable no le j importa qu tipo de valor soporta,ella s almacena lo que t le asignas. lo H ay seis tipos b sicos de datos en Autoplay: number ( nmero) string ( , cadena) nil , ( nulo) boolean ( , booleano) function ( , funci y table ( n) tabla) Las secciones de abajo te . explicar cada tipo de datos con m detalle. n s

Number (Nmero)
U n nmero es exactamente eso: un valor numrico. El tipo de nmero representa nmeros reales, especialmente valores de punto flotante de doble precisi No hay n. distinci entre nmeros enteros y de punto flotante ( n tambin conocidos como fracciones todos ellos son s ) lo nmeros Aqu tenemos algunos ejemplos . v lidos de nmeros: 4 4. . 4 0. 4 4. 57e-3 0. 2 3e1

String (Cadena)
U na cadena es simplemente una secuencia de caracteres. P or ejemplo, Joe2 es una cadena de cuatro caracteres, comenzando con una mayscula y terminando con el J nmero . Las cadenas pueden variar completamente en longitud; una cadena puede 2 contener una sola letra,una sola palabra o el contenido de un libro entero. Las cadenas pueden contener espacios e incluso caracteres ex ticos, tales como smbolos de cambios de lnea ( retornos de carro) y smbolos de saltos de lnea. D e hecho, las cadenas pueden contener una combinaci de caracteres AS CI 8. v n I bit lidos, incluyendo caracteres invalidados (\ ) AutoP lay autom 0 . ticamente maneja la memoria de la cadena, de modo que nunca te preocupar por memoria no localizada o s deslocalizada por las cadenas. Las cadenas pueden ser utilizadas de lo m intuitiva y naturalmente. D n ser s eber delimitadas por comillas simples o dobles.Estos son unos ejemplos del uso de cadenas: Name = " B Joe low" ; D M essage(T tulo" " ola,c est "; ialog. " , H mo s? ) LastName = ' low' B ; Normalmente las comillas dobles se usan en cadenas, pero las comillas simples pueden ser tiles si tienes una cadena que contiene comillas dobles. P ara cualquier tipo de comillas que uses puedes incluirle el otro tipo en su interior de la cadena sin que afecte. P or ejemplo: dobles = " ow'that again? ; H s " simples = 'he said " alk to the hand, and I was all like " ude! ' S T " D "; S i usamos comillas dobles para la segunda lnea,deber verse as: evadidas = " he said \ T alk to the hand, "and I was all like \ D \ " S " \ " ude!" ; Normalmente, el motor de S cript interpreta las comillas dobles como una marca del inicio o fin de una cadena. P ara incluir comillas dobles dentro de una cadena con comillas dobles, necesitas escabullirlas con barras inversas. Esto le indica al motor de S cript que quieres incluir un car de cita literal en la cadena. cter La barra inversa y comilla (" es conocida como una escape sequence ( \) secuencia de escape) U na secuencia de escape es una secuencia especial de caracteres que son . convertidos o traducidosen algo m por el motor de S cript.Las secuencias de escape s te permiten incluir cosas que no pueden escribirse directamente dentro de una cadena. Las secuencias de escape que puedes usar incluyen: \ a \ b \ f \ n \ r bell backspace ( retroceder un espacio) form feed ( avance de p gina) newline ( nueva lnea) carriage return ( retorno de lnea)

\ t \ v \ \ \ " \ ' \ [ \ ]

horizontal tab ( tabulador horizontal) vertical tab ( tabulador vertical) backslash ( barra inversa) quotation mark ( marca de cita literal) apostrophe ( strofe) ap left square bracket ( corchete izquierdo) right square bracket ( corchete derecho)

As, por ejemplo, si quieres representar tres lneas de texto en una sola cadena, deber s utilizar lo siguiente: Lineas = " Lnea uno. nLnea dos. nLnea tres" \ \ ; D M essage(Aqu est cadena " Lineas) ialog. " la , ; Esto le asigna una cadena a la variable nombrada Lineas, y utiliza la secuencia de escape de nueva lnea para iniciar un nuevo rengl despus de cada oraci La n n. funci D M essage despliega el contenido de la variable Lineas en un cuadro de n ialog. di logo,como ste:

Nota: S i eres muy observador, habr notado que el nombre de la variable s Lineasno tiene acento en la letra , en cambio en el contenido de la variable si estamos i acentuando todas las palabras Lnea R ecuerda que el nombre de una variable no . deber estar acentuado porque de lo contrario marcar error de S cript debido a que lo un interpreta como una variable no v lida;por otro lado el contenido de las cadenas puede incluir cualquier car por muy especial que ste sea. cter Otro ejemplo comn es cuando quieres representar una ruta de archivo tal como C Mi C :\ arpeta\ is D txt. S necesitas acordarte de la secuencia de escape de M atos. lo barra inversa: M iR uta = " :\M i C C\ arpeta\M is D txt" \ atos. ; C barra inversa doble representa una barra inversa simple cuando es utilizada dentro ada de una cadena.

10

S i conoces el c digo AS CI puedes usar un car de barra inversa seguido por un I, cter nmero de hasta tres dgitos para representar cualquier car por su valor AS CI P or cter I. ejemplo, el valor AS CI para un car de nueva lnea es 1 0, as que las dos lneas I cter mostradas a continuaci hacen exactamente la misma cosa: n Lineas = " Lnea uno. nLnea dos. nLnea tres" \ \ ; Lineas = " Lnea uno. 1 0Lnea dos. 1 0Lnea tres" \ \ ; S in embargo, no necesitar usar este formato con mucha frecuencia, si acaso alguna s vez. P uedes tambin definir cadenas en lneas mltiples usando corchetes dobles ( and ] ) [[ ]. U na cadena entre corchetes dobles no necesita ningn car de secuencia de escape. cter Los corchetes dobles te permiten introducir caracteres especiales como barras inversas, comillas y nuevas lneas directamente en el interior de la cadena.P or ejemplo: Lineas = [[Lnea uno. Lnea dos. Lnea tres. ] ]; es equivalente a: Lineas = " Lnea uno. nLnea dos. nLnea tres" \ \ ; Esto puede ser til si has pre-formateado texto que quieras usar como una cadena, y no quieres tener que convertir todos los caracteres especiales en secuencias de escape La ltima cosa importante que hay que saber acerca de las cadenas, es que el motor de S cript proporciona conversi autom entre nmeros y cadenas en tiempo de n tica ejecuci S i una operaci numrica es aplicada a una cadena, el motor trata de n. n convertir la cadena a un nmero para la operaci P or supuesto, esto s tendr n. lo xito si la cadena contiene algo que pueda ser interpretado como un nmero. P or ejemplo,las siguientes dos lneas son v lidas: a = " 0"+ 1 ;-- El resultado es 1 1 1 b = " * 2;-- El resultado es 66 33" S in embargo,las siguientes dos lneas no te daran la misma conversi en el resultado: n a = " 0+ 1 " -- El resultado es la cadena " 0+ 1 " 1 ; 1 b= " hola"+ 1 ;-- ER R OR ,no se puede convertir " hola"en un nmero P ara m informaci del trabajo con cadenas, dirgete al tema Manipulacin de s n Cadenas.

Nil (Nulo)
Nil es un tipo especial de valor. B sicamente representa la ausencia de cualquier otro tipo de valor.

11

P uedes asignar nil a una variable s como cualquier otro valor. D cuenta que esto lo ate no es lo mismo que asignar las letras a una variable,como en una cadena.Al igual nil que otras palabras clave, nil debe ser dejada sin comillas para que sea reconocida. T ambin deber introducida con todas las letras en minscula. ser Nil siempre evaluar como falso cuando sea usada en una condici n b = nil; if b then -- C ualquier lnea de script aqu -- no ser ejecutada end T ambin puede ser usada para borraruna variable y= " B Joe low" ; y = nil; En el ejemplo de arriba, no contendrpor m tiempo un valor despus de la y s segunda lnea.

Boolean (Booleano)
Los tipos de variables B oolean ( B o ooleanas) pueden tener uno de estos dos valores; true ( verdadero) o false ( falso) P ueden ser usadas en condiciones y para ejecutar . operaciones l gicas B ooleanas.P or ejemplo: boolybooly = true; if boolybooly then -- C ualquier script aqu ser ejecutado end Esto establece una variable nombrada boolybooly como true ( verdadera) y entonces , la utiliza en una declaraci if.S imilarmente: n a = true; b = false; if ( y b)then a -- C ualquier script aqu no ser ejecutado porque -- true y false es false. end Esta vez, la declaraci if necesita que tanto como sean true ( n a b verdaderas)para que las lneas dentro de ella sean ejecutadas. En este caso, eso no suceder porque b ha sido establecido como false ( falso) .

Function (Funcin)
El motor de S cript te permite definir tus propias funciones ( sub-rutinas) las cuales o , esencialmente son peque piezas de script que pueden ser ejecutadas a petici C as n. ada

12

funci tiene un nombre, el cual es utilizado para identificar la funci Dhecho n n. e puedes usar el nombre de esa funci como un tipo especial de valor para almacenar n una referencia a esa funci en una variable, o pasarla a otra funci Esta clase de n n. referencia es del tipo function. P ara m informaci sobre funciones,revisa el tema Funciones. s n

Table (Tabla)
Las tablas son un mtodo muy poderoso para almacenar listas de valores indexados bajo un nombre. Las tablas son de hecho arreglos conectivos, es decir, son arreglos que pueden ser indexados no s con nmeros,sino con cualquier tipo de valor ( lo incluyendo cadenas) . Aqu est unos cuantos ejemplos ( analizan con m detalle las tablas en el tema n se s Tablas) : Ejemplo 1: muchachos = {" n" " runo" " aniel" Ad , B , D }; D M essage(S egundo nombre en la lista" muchachos[2] ; ialog. " , ) Esto mostrar cuadro de di con la palabra runoen l. un logo B Ejemplo 2: t = {}; t. Nombre = " iguel" M ; t. Apellido = " amrez" R ; t. Ocupacion = " Electricista" ; D M essage( Nombre,t. ialog. t. Ocupacion) ; Esto mostrar siguiente cuadro de di el logo:

13

T ambin puedes asignar tablas a otras variables.P or ejemplo: tabla_uno = {}; tabla_uno. Nombre = " iguel" M ; tabla_uno. Apellido = " amrez" R ; tabla_uno. Ocupacion = " Electricista" ; tabla_dos = tabla_uno; ocupacion = tabla_dos. Ocupacion; D M essage( Nombre,ocupacion) ialog. b. ; Las tablas pueden ser indexadas usando notaci de arreglo ( n mi_tabla[1 ] , o por ) notaci de punto si no se indexpor nmeros ( n mi_tabla. Apellido) . D cuenta que cuando le asignas una tabla a otra,como en la siguiente lnea: ate tabla_dos = tabla_uno; de hecho esto no copia la tabla_uno dentro de la tabla_dos. M bien la tabla_dos y s la tabla_uno se refieren ambas a la misma tabla. Esto es porque el nombre de una tabla en realidad se refiere a una direcci en memoria n donde los datos dentro de la tabla son almacenados.As,cuando asignas el contenido de la variable tabla_uno a la variable tabla_dos, est copiando la direcci y no los datos s n, actuales. Esencialmente est haciendo que las dos variables se s enfoquen a la misma tabla de datos. P ara copiar el contenido de una tabla, necesitas crear una nueva tabla y entonces copiar todos los datos sobre un elemento a la vez. P ara m informaci del copiado de tablas,dirgete al tema Tablas) s n

Variable de Asignacin
Las variables pueden tener nuevos valores asignados a ellas usando el operador de asignaci ( ) Esto incluye el copiar el valor de una variable dentro de otra. P or n = . ejemplo: a = 1 0; b= " Estoy feliz" ; c = b; Es interesante notar que el motor de S cript soporta asignaci mltiple: n a,b = 1 ,2; D entro del script de arriba, la variable contiene el nmero 1 y la variable a b contiene el nmero 2. Las tablas y las funciones son algo as como un caso especial: cuando usas el operador de asignaci ( ) en una tabla o funci creas un n = n, sobrenombre que se refiere a la

14

misma tabla o funci de la variable que est n siendo copiada Los programadores le . llaman a este copiado by reference (por referencia), opuesto al copiado by value (por valor).

15

Expresiones y Operadores
U na expresi es cualquier cosa que evale a un valor. Esta puede incluir un valor n simple tal como o un valor compuesto construido con operadores tal como + 3 6 1 . P uedes usar parntesis para agrupar expresiones y controlar el orden en el cual ser n evaluadas.P or ejemplo,todas las siguientes lneas evaluar el mismo valor: n a= a= a= a= 1 0; ( * 1 )* 2; 5 1 00 /1 0; 1 00 /( * 5) 2 ;

Operadores Aritmticos
Los Operadores Aritmticos son utilizados para ejecutar operaciones matem ticas en nmeros.Los siguientes operadores matem ticos son soportados: + * / unary ( adici n) ( substracci n) ( multiplicaci n) ( divisi n) ( negativo)

Aqu tienes algunos ejemplos: a = 5 + 2; b = a * 1 00; veintitrs por ciento = 23 /1 00; neg = -29; pos = -neg;

Operadores de Relacin
Los Operadores de R elaci te permiten comparar la manera en que un valor se n relaciona con otro.Los siguientes operadores de relaci son soportados: n
> < <= >= ~= ==

( mayor que) ( menor que) ( menor o igual que) ( mayor o igual que) ( es igual a) no ( igual a)

T odos los operadores de relaci pueden ser aplicados a cualquier par de nmeros o par n de cadenas. T odos los dem valores s pueden usar el operador = = para comparar si s lo son iguales.

16

Los operadores de relaci regresan valores B n ooleanos ( ( true verdadero)o false ( falso) . ) P or ejemplo: 1 0 > 20;-- da como resultado un false a = 1 0; a > 300;-- false ( * 200)> 500;-- true 3 " rett"~= " B Lorne"-- true U n punto importante a mencionar es que los operadores == y ~= hacen una prueba de igualdad completa, lo cual significa que cualquier comparaci de cadena hecha con n dichos operadores es un caso sensible a maysculas-minsculas.P or ejemplo: " Jojoba"= = " Jojoba" -- true ; " Gato"= = " gato" -- false ; " e gusta mucho"= = " e gusta M U C O" -- false M M H ; " feliz"~= " eLiZ " -- true F ;

Operadores Lgicos
Los Operadores L gicos son utilizados para ejecutar operaciones B ooleanas en valores B ooleanos.Los siguientes operadores l gicos son soportados: and or not ( es true ambos valores son true) solo ( si cualquiera de los valores es true) true ( regresa lo opuesto del valor)

P or ejemplo: a= b= c= d= e= true; false; a y b;-- false a y nil;-- false not b;-- true

D cuenta que solamente nil y false son consideramos como false, y todos los dem ate s valores son true. P or ejemplo: soyinvisible = nil; if soyinvisible then -- cualquier c digo puesto aqu no se ejecutar -- porque soyinvisible es considerado false D M essage(No puedes verme! ," oy invisible! ! "; ialog. " " S !! ) end

17

if " rett"then B -- cualquier c digo puesto aqu s se ejecutarporque s nil y false , lo -- son considerados false.. .cualquier otra cosa,incluyendo cadenas, -- es considerada true D M essage(Y las cadenas? ," cadenas son true. ) ialog. " " Las "; end

Encadenamiento
En el script de AutoP lay, el operador de encadenamiento es dos puntos (. . Este es .) usado para combinar dos o m cadenas juntas. No tienes que poner espacios antes y s despus de los dos puntos,pero puedes hacerlo si quieres. P or ejemplo: nombre = " Jos". B ." onilla" -- asigna " ; Jos B onilla"a nombre b = nombre . "es nmero ". 1 ;-- asigna "Jos B . . onilla es nmero 1 "a b

Prioridad de Operadores
S e dice que los operadores tienen prioridad, lo cual es una forma de describir las reglas que determinan cu operadores se ejecutan primero en una serie de expresiones. U n les simple ejemplo sera la expresi 1 + 2 * 3. El operador de multiplicaci ( tiene n n *) prioridad m alta que el operador de adici ( ) de modo que esta expresi es s n + , n equivalente a 1 + ( * 3) En otras palabras, la expresi 2 * 3 es ejecutada primero, y 2 . n luego 1 + 6 se ejecuta,resultando un valor final de 7. S e puede pasar por alto el orden natural de prioridad con el uso de parntesis. P or ejemplo, la expresi ( + 2) * 3 da como resultado el 9. Los parntesis hacen que la n 1 sub-expresi entera ( + 2) sea el valor izquierdo del operador de multiplicaci ( . n 1 n *) Esencialmente, la sub-expresi 1 + 2 es evaluada primero, y el resultado es luego n usado en la expresi 3 * 3. n La prioridad de operadores tiene el siguiente orden,partiendo de la prioridad m baja a s la m alta: s and < . . + * not ^ or >

<=

>=

~=

==

/ -( unary)

S e dice tambin que los operadores tienen asociatividad, que es una forma de describir cu expresiones son ejecutadas primero cuando los operadores tienen igual prioridad. les En el motor de S cript, todos los operadores binarios son asociativos izquierdos, esto quiere decir que cuando dos operadores tienen la misma prioridad, la operaci de la n

18

izquierda se ejecuta primero.La excepci es el operador de exponenciaci ( ,el cual n n ^) es asociativo derecho C uando tengas dudas, siempre puedes usar parntesis explcitos para controlar la prioridad.P or ejemplo: a + 1 < b/ + 1 2 .. lo mismo que: .es ( + 1 )< (b/ + 1 ) a ( 2) .. .igualmente,puedes usar parntesis para cambiar el orden de los c lculos: a + 1 < b/2 + 1 ) ( En este ltimo ejemplo, en vez de que 1 sea a adido a la mitad de b, b es dividido entre 3.

19

Estructuras de Control
El motor de S cript soporta las siguientes estructuras de control: if, while, repeat y for.

If
U na declaraci if evala su condici y entonces ejecuta la parte n n then s si la lo condici es true. U na declaraci if es finalizada por la palabra clave n n end La . sintaxis b es: sica if condicion then haz algo aqu end P or ejemplo: x = 50; if x > 1 0 then D M essage(resultado" " es m grande que 1 0"; ialog. " , x s ) end y = 3; if (35 * y)< 1 00)then ( D M essage(" " veces 35 es menor que 1 00"; ialog. ", y ) end En el script de arriba, solamente el primer cuadro de di logo ser mostrado, porque la segunda condici if no es true 35 veces 3 es 1 05,pero 1 05 no es menor que 1 00. n T ambin puedes usar else y elseif para a adir m s ramificacionesa la declaraci if: n x = 5; if x > 1 0 then D M essage(" " es mayor que 1 0"; ialog. ", x ) else D M essage(" " es menor o igual a 1 0"; ialog. ", x ) end En este ejemplo, el segundo cuadro de di logo deber mostrarse porque 5 no es mayor que 1 0. V eamos un ltimo ejemplo: x = 5; if x = = 1 0 then D M essage(" " is exactamente 1 0"; ialog. ", x ) elseif x = = 1 1 then D M essage(" " is exactamente 1 1 "; ialog. ", x )

20

elseif x = = 1 2 then D M essage(" " is exactamente 1 2"; ialog. ", x ) else D M essage(" " no es 1 0,1 1 o 1 2"; ialog. ", x ) end En este ejemplo,el ltimo cuadro de di ser logo mostrado debido a que x no es igual a 1 0,1 1 o 1 2.

While
La declaraci while es utilizada para ejecutar el mismo n paquete de script una y otra vez hasta que una condici sea encontrada. Al igual que las declaraciones if, las n declaraciones while son finalizadas con la palabra clave end La sintaxis b es: . sica while condicion do haz algo aqu end La condici debe ser true para que las acciones dentro de la declaraci while ( parte n n la algo aqu sea ejecutada. La declaraci while continuar haz ) n repitindose hasta que esta condici sea true. As es como trabaja: n S i la condici es true, todas las acciones entre el n while y su correspondiente end ser ejecutadas. C n uando el end es alcanzado, la condici ser n reevaluada, y si sta an es true, las acciones entre whiley endser ejecutadas de nuevo. Las acciones n continuar en ciclo hasta que la condici sea evaluada como false. n n P or ejemplo: a= 1; while a < 1 0 do a= a+ 1; end En el ejemplo de arriba,la lnea = a + 1 ; ser a ejecutada 9 veces. P uedes romper un ciclo while en el momento que quieras usando la palabra clave break P or ejemplo: . count = 1 ; while count < 1 00 do count = count + 1 ; if count = = 50 then break; end end Aunque la declaraci while est n dispuesta a contar de 1 a 99, la declaraci if causar n que este ciclo termine en el momento que la cuenta alcance 50

21

Repeat
La declaraci repeat es similar a la declaraci while, excepto que la condici es n n n comprobada al final de la estructura en lugar de verificarse al inicio. La sintaxis b sica es: repeat haz algo aqu until condicion P or ejemplo: i = 1; repeat i = i + 1; until i > 1 0 Esto es similar a uno de los ciclos while que se explic arriba, pero esta vez, el ciclo es ejecutado 1 0 veces. La parte = i + 1 ; es ejecutada antes de que la condici i n determine que i es ahora m grande que 1 0. s P uedes interrumpir este ciclo en el momento que quieras usando la palabra clave break P or ejemplo: . count = 1 ; repeat count = count + 1 ; if count = = 50 then break; end until count > 1 00 U na vez m esto detendr ciclo en el momento en que la cuenta sea igual a 50. s, el

For
La declaraci for es utilizada para repetir un bloque de script un determinado nmero n de veces.La sintaxis b es: sica for variable = start, step do end, do something here end La variable puede ser nombrada como desees. Esta declaraci for es utilizada para n contar el nmero de paseos a lo largo del ciclo for. C omienza en el valor start que especifiques, y luego cambia por la cantidad en step despus de cada paseo a travs del ciclo. En otras palabras, el step es a adido al valor en la variable despus de que las lneas entre for y end son ejecutadas. S i el resultado es menor o igual a el valor end, el ciclo contina desde el principio.

22

P or ejemplo: -- Este ciclo cuenta de 1 a 1 0: for x = 1 ,1 0 do D M essage(Number" x) ialog. " , ; end El ejemplo anterior despliega 1 0 mensajes de di logo en fila, contando de 1 a 1 0. D ate cuenta que el step es opcional ( no proporcionas un valor para el step, por defecto es si 1) . Aqu ponemos un ejemplo que utiliza un step de para hacer que el ciclo for cuente -1 hacia atr s: -- Este ciclo cuenta de 1 0 a 1 : for x = 1 0,1 ,-1 do D M essage(Nmero" x) ialog. " , ; end Este ejemplo mostrar 0 mensajes de di 1 logo en fila, contando hacia atr desde 1 0 y s retrocediendo hasta 1 . P uedes interrumpir un ciclo for en el momento que quieras usando la palabra clave break for i = 1 ,1 00 do if count = = 50 then break; end end Dnuevo,esto finalizar ciclo en el momento que la cuenta sea igual a 50. e el H ay tambin una variaci en el ciclo for que opera en tablas. P ara m informaci n s n sobre esto,ve a la secci El Uso de For para Enumerar Tablas. n

23

Tablas (Arreglos)
Las tablas son muy tiles. P ueden ser utilizadas para almacenar cualquier tipo de valor, incluyendo funciones o incluso otras tablas.

Creacin de Tablas
Generalmente hay dos formas de crear una tabla desde cero.El primer mtodo utiliza llaves para especificar una lista de valores: mi_tabla = {" manzana"" , naranja"" , durazno" }; tabla_asociativa = {fruta= " manzana" vegetal= " , zanahoria" } El segundo mtodo es crear una tabla en blanco y luego a adir los valores uno por uno: mi_tabla = {}; mi_tabla[1 ] = " manzana" ; mi_tabla[2] = " naranja" ; mi_tabla[3] = " durazno" ; tabla_asociativa = {}; tabla_asociativa. fruta = " manzana" ; tabla_asociativa. vegetal = " zanahoria" ;

Acceso a los Elementos de la Tabla


C ada registro de informaci almacenado en una tabla es conocido con un elemento. n C elemento consta de una clave, la cual sirve como el ndice dentro de la tabla, y un ada valor que es asociado con la clave Generalmente, hay dos formas de accesar un elemento: puedes usar notaci de arreglo n o notaci de punto. La notaci de arreglo es utilizada tpicamente con arreglos n n numricos, los cuales son simplemente tablas donde todas las claves son nmeros. La notaci de punto es usada normalmente con arreglos asociativos, los cuales son tablas n donde las claves son cadenas. Aqu te mostramos un ejemplo de notaci de arreglo: n t= {" uno" " ," , dos" tres" }; D M essage(El elemento uno contiene:" t[1 ] ; ialog. " , ) Y aqu un ejemplo de notaci de punto: n t = { first= " uno" second= " ,third= " , dos" tres" }; D M essage(El elemento ' contiene:" t. ialog. " first' , first) ;

24

Arreglos Numricos:
U no de los usos m comunes en las tablas son los arreglos.U n arreglo es una colecci s n de valores que est indexados por claves numricas.En el motor de S cript,los arreglos n numricos est basados en 1 .Es decir,que comienzan a indexarse en 1 . n Aqu est algunos ejemplos del uso de Arreglos Numricos: n Ejemplo 1: miArreglo = {255, 255}; 0, D M essage(P rimer Nmero" miArreglo [1 ] ; ialog. " , ) Esto desplegar mensaje de di conteniendo el nmero un logo 255 . Ejemplo 2: alfabeto = {" , b"" , d"" , f"" , h"" , j"" , a"" , c"" , e"" , g"" , i"" , k" " , m"" , o"" , q"" , s"" , u"" , w"" , y"" }; l"" , n"" , p"" , r"" , t"" , v"" , x"" , z" D M essage(S ptima Letra" alfabeto[7] ; ialog. " , ) Esto desplegar mensaje de di conteniendo la letra un logo g. Ejemplo 3: miArreglo = {}; miArreglo[1 ] = " Opci U no" n ; miArreglo[2] = " Opci D ; n os" miArreglo[3] = " Opci T res" n ; Esto es exactamente lo mismo que lo siguiente: miArreglo = {" Opci U no" "Opci D ,"Opci T res" n , n os" n };

Arreglos Asociativos
Los Arreglos Asociativos son lo mismo que los Arreglos Numricos,excepto que en los primeros los par metros pueden ser nmeros,cadenas o incluso funciones. Aqu est ejemplo de un arreglo asociativo que usa un apellido como un par un metro,y un nombre como el valor arrNombres = {C uevas= " Juan" , C ardona= " ogelio" R , C ontreras= " Jos" , H errera= " hristian" C , H itchcock= " Alfredo" }; D M essage(El nombre de C ialog. " uevas" arrNombres. uevas) , C ;

25

El mensaje de di resultante ser logo como ste:

Aqu est ejemplo de una simple base de datos de empleados que sigue la pista de los un nombres y fechas de nacimiento de empleados,indexados por nmero de empleado: Empleados = {};-- C onstruye una tabla vaca para los nmeros de empleado -- almacena informaci de cada empleado en su propia tabla n Empleado1 = {Nombre= " Juan C uevas" Nacimiento= " 02/ }; , 07/ 82" Empleado2 = {Nombre= " ogelio C R ardona" Nacimiento= " 2/ 79" , 1 25/ }; -- almacena la tabla de informaci de cada empleado n -- en el nmero apropiado de la tabla de empleados Empleados[1 00099] = Empleado1 ; Empleados[1 37637]= Empleado2; -- ahora la escritura " Empleados[1 00099] es lo mismo que la escritura " " Empleado1 " D M essage(F ialog. " echa de Nacimiento"Empleados[1 00099] Nacimiento) , . ; El mensaje de di resultante tendr aspecto: logo este

El Uso de For para Enumerar Tablas


H ay una versi especial de la declaraci for que te permite enumerar el contenido de n n un arreglo r y f pida cilmente.La sintaxis es:

26

for index, value in table do operate on index and value end P or ejemplo: mitabla = {" no"" os"" res" U ,D ,T }; -- despliega un mensaje para cada artculo de la tabla for j, in mitabla do k D M essage(Artculo" j . " ". k) ialog. " , . = . ; end El resultado ser tres mensajes de di n logo en fila, uno por cada elemento en mitabla, como estos:

Acurdate de la declaraci for de arriba, porque es una manera r n pida y f de cil inspeccionar los valores en una tabla. S i s quieres los par lo metros de una tabla, puedes omitir la parte value de la declaraci for: n a = {U no= 1 , os= 2, res= 3}; D T for k in a do D M essage(I ialog. "ndice de T abla"k) , ; end El script de arriba mostrar mensajes de di en fila,con el texto no res tres logo U , T , y luego os D . C mo? P or qu los elementos de la tabla no est es orden? La raz de esto es que n n internamente el motor de S cript no almacena tablas como arreglos, sino en una estructura super-eficiente conocida como una tabla chapuza. ( te preocupes, al No principio muchos se confunden con las tablas chapuza) La cosa importante a saber es . que cuando defines elementos de tabla, stos no son almacenados necesariamente de manera que los definas o los a adas, a menos que uses un arreglo numrico ( por ejemplo una tabla indexada con nmeros del 1 al que quieras) .

27

Copiar Tablas
C opiar tablas es un poco diferente a copiar otro tipo de valores. A diferencia de las variables, t no puedes usar el operador de asignaci para copiar el contenido de una n tabla dentro de otra. Esto es porque el nombre de la tabla de hecho se refiere a una direcci en memoria donde los datos dentro de la tabla son almacenados. S i tratas de n copiar una tabla en otra usando el operador de asignaci acabar copiando la n, s direcci y no los datos actuales. n, P or ejemplo, si quisieras copiar una tabla, y luego modificar la copia, tendras que intentar algo como esto: tabla_uno = { color= " ojo" temperatura= " aliente"}; R , C -- crear una copia tabla_dos = tabla_uno; -- modificar la copia tabla_dos. temperatura = " ra" F ; D M essage(T emperatura T abla U no:" tabla_uno. ialog. " , temperatura) ; D M essage(T emperatura T abla D ,tabla_dos. ialog. " os:" temperatura) ; S i ejecutas este script,ver los siguientes dos di s logos:

Espera un minuto el cambio del elemento temperatura en tabla_dos tambin lo cambien tabla_uno.P or qu cambiaron ambos? La respuesta es simple: porque las dos son de hecho la misma tabla. I nternamente, el nombre de una tabla s se refiere a una ubicaci en memoria. lo n C uando tabla_uno es creada,una porci de memoria es dejada aparte para mantener su n contenido. La ubicaci ( n o direcci ) de esta memoria es la que es asignada a la n variable llamada tabla_uno. Asignar tabla_uno a tabla_dos s copia la direcci de memoria,no la memoria actual lo n en s misma.

28

Es como anotar el domicilio de una biblioteca en un pedazo de papel, y luego darle ese papel a tu amigo. T no est d s ndole la biblioteca entera, con estantes de libros y todo s le proporcionaste la ubicaci donde pueda ser encontrada. lo n S i quisieras actualizar una copia de la biblioteca, tendras que crear un nuevo edificio, fotocopiar cada libro individualmente, y luego almacenar las fotocopias en la nueva ubicaci n. Eso es demasiado,como lo es con tablas tambin.P ara crear una copia completa de una tabla, con su contenido y todo, necesitas crear una nueva tabla y luego copiar todos los elementos de uno en uno. Afortunadamente, la declaraci for hace esto realmente f de hacer. P or ejemplo, n cil aqu est una versi modificada de nuestro m reciente ejemplo, que crea una copia n s verdaderade tabla_uno. tabla_uno = { color= " ojo" temperatura= " aliente"}; R , C -- crear una copia tabla_dos = {}; for index,value in tabla_uno do tabla_dos [index] = value; end -- modificar la copia tabla_dos. temperatura = " ra" F ; D M essage(T emperatura T abla U no:" tabla_uno. ialog. " , temperatura) ; D M essage(T emperatura T abla D ,tabla_dos. ialog. " os:" temperatura) ; Esta vez, los di logos muestran que la modificaci de tabla_dos no afecta para nada a n tabla_uno:

Funciones en Tablas
H ay un buen nmero de F unciones de T abla integradas a tu disposici las cuales n, puedes utilizar para hacer tales cosas como insertar, remover y cuantificar elementos dentro de una tabla. P ara m informaci sobre las F s n unciones de T abla, por favor dirgete a Program Reference / Actions / Table en la Ayuda en Lnea.

29

Funciones
P or mucho, la m estupenda y poderosa caracterstica del motor de S cript son las s F unciones. Y a has visto muchas de ellas utilizadas a lo largo de este documento, tales como ialog. essage. . Las F D M unciones simplemente son porciones de script que puedes definir,nombrar y luego llamar desde donde quieras. Aunque hay muchas funciones integradas en AutoP lay, puedes tener las tuyas propias que se ajusten a la medida de tus necesidades. En general, las funciones est definidas n como sigue: function function_name ( arguments) function script here return return_value; end La primera parte es la palabra clave function Esta le dice al motor de S cript que lo . que sigue es una definici de funci La function_name es simplemente un nombre n n. nico para tu funci Los arguments son par n. metros ( valores)que ser transferidos o n a la funci cada vez que sea llamada. U na funci puede recibir cualquier nmero de n n argumentos desde 0 a infinito ( bueno, no hasta infinito, pero casi) La palabra clave . returnle dice a la funci que devuelva uno o m valores al script que la llam n s . La forma m f de aprender acerca de las funciones es mirar algunos ejemplos. En s cil este primer ejemplo, haremos una simple funci que muestre un cuadro de mensaje. n Esta no toma ningn argumento y no devuelve nada. function H elloW orld( ) D M essage(B ialog. " ienvenido"" ola M undo"; ,H ) end D cuenta que si pones el script de arriba dentro de un evento y lo previsualizas en tu ate aplicaci nada sucede. B n, ueno, esto es verdad y no lo es. Es verdad que nada visible sucede pero lo m gico es que t no puedes verlo. C uando el evento es lanzado y el script function es ejecutado, la funci llamada elloW orld viene a ser parte del n H motor de S cript.Esto significa que est ahora disponible para el resto de la aplicaci en n cualquier otro script. Esto plantea un punto importante acerca del S cript en AutoP lay M edia S tudio. C uando se construye una funci la funci no se n, n adentraen el motor sino hasta que el script es ejecutado. Lo cual significa que si defines H elloW orld( en el evento On C de un ) lick bot pero ese evento nunca es activado ( n, debido a que el usuario no hace click sobre el bot , entonces la funci H elloW orld( nunca existir Es decir, no ser capaz de n) n ) . s llamarla desde alguna otra parte. Esto es porque, en general, es lo mejor para definir tus funciones globales en el script global del proyecto. ( ara acceder al script global, elige el men P roject > Global P F unctions) .

30

Ahora, regresemos a cosas buenas. A adamos una lnea para llamar a la funci n verdaderamente: function H elloW orld( ) D M essage(B ialog. " ienvenido"" ola M undo"; ,H ) end H elloW orld(; ) La lnea elloW orld(; le avisa al motor de S cript para que H ) ejecute la funci n llamada H elloW orld C . uando esa lnea sea ejecutada, ver un mensaje de bienvenida s con el texto ola M undoen l. H

Argumentos de Funcin
Llevemos esto un poco m all dig s y mosle al cuadro de di logo cutexto mostrar al l a adir un argumento a la funci n function H elloW orld( ensaje) M D M essage(B ialog. " ienvenido" M ensaje) , ; end H elloW orld(Esto es un argumento"; " ) Ahora el cuadro de di muestra el texto que fue logo pasadoa la funci n. En la definici de funci ensaje es una variable que autom n n, M ticamente recibe cualquier argumento que sea pasado a la funci En la llamada de funci pasamos la n. n, cadena " Esto es un argumento" como el primer ( nico) argumento para la funci y n H elloW orld. Aqu est ejemplo del uso de argumentos mltiples: un function H elloW orld( itulo,M ensaje) T D M essage( itulo,M ensaje) ialog. T ; end H elloW orld(Este es el argumento uno" " " , Este es el argumento dos"; ) H elloW orld(B " ienvenido" " ola"; , H ) Esta vez, la definici de funci utiliza dos variables, una para cada uno de sus n n argumentos y cada llamada de funci le pasa dos cadenas a la funci H elloW orld n n Nota que cambiando el contenido de esas cadenas, puedes mandar argumentos diferentes a la funci y lograr distintos resultados. n,

31

Valores Devueltos (o de Retorno)


El siguiente paso es hacer que la funci devuelva valores al llamado del script.H e aqu n una funci que acepta un nmero como su nico argumento, y luego devuelve una n cadena conteniendo todos los nmeros desde el uno hasta ese nmero. function C ount( n) -- comenzar con una cadena de retorno en blanco R eturnS tring = " ; " for num = 1 , do n -- a adir el nmero actual ( num)al final de la cadena de retorno R eturnS tring = R eturnS tring.num; . -- si ste no es el ultimo nmero,entonces a adir una coma y un espacio -- para separar los nmeros un poco en la cadena de retorno if ( num ~= n)then R eturnS tring = R eturnS tring." " ., ; end end -- devolver la cadena que fue construida return R eturnS tring; end C ountS tring = C ount( 0) 1 ; D M essage(C ialog. " onteo" C , ountS tring) ; Las ltimas dos lneas del script de arriba utilizan la funci C n ount para construir una cadena contando del 1 al 1 0,la almacenan en una variable llamada C ountS tring,y luego muestran el contenido de la variable en un mensaje de di logo.

Valores Mltiples Devueltos


Adicionalmente,puedes devolver valores mltiples de funciones: function S ortNumbers( Number1 ,Number2) if Number1 <= Number2 then return Number1 ,Number2 else return Number2,Number1 end end firstNum,secondNum = S ortNumbers( 02,1 00) 1 ; D M essage(Ordenados" firstNum ." ".secondNum) ialog. " , ., . ;

32

El script anterior crea una funci llamada S ortNumbers que toma dos argumentos y n luego devuelve dos valores. El primer valor devuelto es el nmero m peque y el s o, segundo valor devuelto es el m grande. D cuenta que especificamos dos variables s ate para recibir los valores devueltos de la llamada de funci en la penltima lnea. La n ltima lnea del script muestra los dos nmeros en el orden que fueron clasificados por la funci n.

Redefiniendo Funciones
Otra cosa interesante acerca de las funciones es que puedes ignorar ( pasar por alto) una previa definici de funci simplemente redefinindola. n n function H elloW orld( ) D M essage(M ensaje"" ola M undo"; ialog. " ,H ) end function H elloW orld( ) D M essage(M ensaje "" ola T ierra"; ialog. " ,H ) end H elloW orld(; ) El script de arriba mostrarun cuadro de di logo que diga ola T ierra y no ola H H M undo Esto es porque la segunda versi de la funci H elloW orld( hace que la . n n ) primera sea ignorada.

Poniendo Funciones en Tablas


U na cosa realmente poderosa acerca de las tablas es que stas pueden ser usadas para contener funciones tambin como otros valores. Esto es importante porque te permite estar seguro que tus funciones tienen nombres nicos y est agrupadas l n gicamente. ( es como todas funciones de AutoP lay M edia S tudio est implementadas) Aqu As n . tenemos un ejemplo: -- H ace las funciones: function H elloEarth( ) D M essage(M essage"" ello Earth"; ialog. " ,H ) end function H elloM oon( ) D M essage(M essage"" ello M oon"; ialog. " ,H ) end -- D una tabla vaca: efine H ello = {}; -- Asigna las funciones a la tabla: H ello. Earth = H elloEarth; H ello. oon = H elloM oon; M

33

-- Ahora llama a las funciones: H ello. Earth(; ) H ello. oon(; M ) T ambin es interesante notar que puedes definir funciones directamente en tu definici n de tabla: H ello = { Earth = function ( D M essage(M essage"" ello Earth" end, ) ialog. " ,H ) M oon = function ( D M essage(M essage"" ello M oon" end }; ) ialog. " ,H ) -- Ahora llama a las funciones: H ello. Earth(; ) H ello. oon(; M )

34

Manipulacin de Cadenas (Ligaduras)


En esta secci cubriremos brevemente algunas de las tcnicas m comunes de n s manipulaci de cadenas o ligaduras,tales como conexi y comparaci de cadenas. n n n ( ara m informaci sobre las funciones de cadena disponibles para ti en AutoP lay P s n M edia S tudio,ve al tema Program Reference / Actions / String de la ayuda en lnea) .

Conexin de Cadenas
Y a hemos cubierto el tema de conexi de cadenas, pero vale la pena profundizar sobre n l.El operador para la conexi de cadenas es dos puntos en fila (. .P or ejemplo: n .) NombreC ompleto = " Luis". C ." ardona" -- NombreC ; ompleto es ahora " Luis C ardona" -- T ambin puedes conectar nmeros dentro de cadenas D elA = 365; iasD o A adena = " ay ".D elA . das en un a " oC H . iasD o." o. ; Observa que puedes poner espacios en ambos lados de los puntos, o en un solo lado, o no poner ningn espacio. P or ejemplo, las siguientes cuatro lneas lograr el mismo n resultado: foo = foo = foo = foo = " ello ". user_name; H . " ello ".user_name; H . " ello ".user_name; H . " ello ". H .user_name;

Comparacin de Cadenas
D espus de la conexi una de las cosas m comunes que querr hacer con las n, s s cadenas es comparar una cadena con otra. D ependiendo de qu constituye una comparaci ,sta puede ser muy simple o s un poco ma n lo osa. S i quieres ejecutar una comparaci sensible a diferencia entre maysculas y n == . minsculas,entonces todo lo que tienes que hacer es usar el operador ( ) P or ejemplo: strOne = " trongbad" S ; strT wo = " trongbad" S ; if strOne = = strT wo then D M essage(Adivina qu? ,"Las dos cadenas son iguales! ) ialog. " " "; else D M essage(H mmm" " dos cadenas son diferentes. ) ialog. " , Las "; end

35

P uesto que el operador == ejecuta una comparaci sensible a diferencia entre n maysculas y minsculas cuando es aplicado a cadenas, el script de arriba mostrar un mensaje de di proclamando que las dos cadenas son iguales. logo S i quieres ejecutar una comparaci no sensible a diferencia entre maysculas y n minsculas, entonces necesitas echar mano de las funciones S tring. pper o U S tring. Lower, para asegurar que ambas cadenas tienen la misma escritura antes de que las compares. La funci S tring. pper devuelve una versi n U n todas maysculas de la cadena dada, y la funci S tring. n Lower devuelve una versi n todas minsculas D . ate cuenta que no importa cu funci emplees en tu comparaci siempre y cuando l n n, utilices la misma funci a ambos lados del operador = = en tu declaraci n n. P or ejemplo: strOne = " ooohahahaha" M ; strT wo = " OOohaH AH Aha" M ; if S tring. pper( U strOne)= = S tring. pper( wo)then U strT D M essage(Adivina qu? ,"Las dos cadenas son iguales! ) ialog. " " "; else D M essage(H mmm" "Las dos cadenas son diferentes. ) ialog. " , "; end En el ejemplo anterior, la funci n S tring. pper convierte strOne a U OOOH AH AH AH A y strT wo a OOOH AH AH AH A y luego la declaraci if M M n compara los resultados. ( Nota: Las dos cadenas originales permanecen sin cambio) D . e esta manera, no importa cu maysculas o minsculas tenan las cadenas originales; les todo lo que importa es si las letras son las mismas.

Conteo de Caracteres
S i alguna vez quieres saber qu tan larga es una cadena, puedes contar f cilmente el nmero de caracteres que contiene. S utiliza la funci S tring. lo n Length, como en este ejemplo: trabador = " res tristes tigres tragaban trigo en tres trises trastos sentados en un trigal.. ; T ." num_carac = S tring. Length( trabador) ; D M essage( ialog. "Este trabalenguas tiene:" num_carac . "caracteres! ) , . "; lo cual producir siguiente mensaje de di el logo:

36

Encontrando Cadenas
Otra cosa comn que querr hacer con cadenas es buscar una cadena dentro de otra. s Esto es muy simple de hacer usando la acci S tring. ind. n F P or ejemplo: strS earchI = " erdad que es un da para maravillarse? ; n V " strS earchF = " or maravilla" ; -- busca strS earchI en el interior de strS earchF n or nF oundP os = S tring. ind( earchI strS earchF ; F strS n, or) if nF oundP os ~= nil then -- encuntralo! D M essage(R esultado de la B ialog. " squeda" strS earchF . , or . "fue encontrado en la posici ". nF n . oundP os) ; else -- no hubo suerte D M essage(R esultado de la B ialog. " squeda " strS earchF . " fue , or . no encontrado! ) "; end .. .causara que el siguiente mensaje fuera mostrado:

Consejo: P rueba experimentando con diferentes valores para strS earchF y or strS earchI n.

Reemplazando Cadenas
U na de las cosas m poderosas que puedes hacer con las cadenas es ejecutar una s bsqueda y reemplazar la operaci en ellas.El siguiente ejemplo muestra c puedes n mo usar la acci S tring. eplace para sustituir cada evento de una cadena con otra dentro n R de una cadena objetivo. strT arget = "P uede haber solo una.S una es permitida! ; lo " strS earchF = " or una" ; strR eplaceW ith = " docena" una ; strNewS tring = S tring. eplace( arget,strS earchF strR eplaceW ith) R strT or, ; D M essage(D ialog. " espus de la bsqueda y el reemplazo:" strNewS tring) , ;

37

-- crea una copia de la cadena objetivo sin espacios en ella strNoS paces = S tring. eplace( arget,"" " ) R strT , "; D M essage(D ialog. " espus de eliminar espacios:" strNoS paces) , ; El ejemplo anterior mostrar dos mensajes siguientes: los

Extrayendo Cadenas
H ay tres funciones de cadena que te permiten extraer una porci de una cadena, en n vez de copiar la misma cadena entera. Estas funciones son S tring. Left, S tring. ight y R S tring. id. M S tring. Left copia un nmero de caracteres desde el comienzo de la cadena. S tring. ight R hace lo mismo, pero contando desde el extremo derecho de la cadena. S tring. id te M permite copiar un nmero de caracteres comenzando desde cualquier posici en la n cadena. P uedes usar estas funciones para ejecutar todo tipo de operaciones avanzadas en cadenas Aqu est ejemplo b mostrando c trabajan estas funciones: un sico mo strOriginal = " e verdad me da gusto verte de nuevo. ; D " -- copia los primeros 22 caracteres dentro de strLeft strLeft = S tring. Left( strOriginal,22) ; -- copia los ltimos 1 5 caracteres dentro de strR ight strR ight = S tring. ight( R strOriginal,1 5) ; -- crea una nueva cadena con las dos piezas strNeo = S tring. Left . " . estupendo". strR ight . "D . . etente. ; "

38

-- copia la palabra " gusto"dentro de strM iddle strM iddle = S tring. id( M strOriginal,22,5) ;

Convirtiendo Cadenas Numricas a Nmeros


P uede haber ocasiones en que tengas una cadena numrica y necesites convertirla a un nmero. P or ejemplo,si tienes un campo de entrada donde el usuario pueda introducir su edad,y t lees en el texto lo que l ha tecleado,podras obtener un valor como puesto que 31 , el lo escribi Aunque este valor es realmente una cadena que consta de los caracteres . y 3 1 . S i trataras de comparar este valor con un nmero, obtendras un error de sintaxis diciendo que intentaste comparar un nmero con una cadena. P or ejemplo,si le asignaras el siguiente script al evento OnC de un bot lick n: edad = " " 31 ; if edad > 1 8 then D M essage(" " ialog. " , Eres mayor de 1 8. ) "; end .. producira el siguiente mensaje de error: .se

El problema en este caso es que la lnea dos del script compara el contenido de la variable edadcon el nmero 1 8: if age > 1 8 then Esto genera un error porque edad contiene una cadena y no un nmero. El motor de script no te permite comparar nmeros con cadenas de esta manera. No hay forma de saber si queras tratar age como un nmero,o tratar 1 8 como una cadena. La soluci es simplemente convertir el valor de edad a un nmero antes de compararlo. n H ay dos formas de hacer esto.U na forma es usar la funci S tring. oNumber. n T La funci S tring. oNumber convierte una cadena numrica a el nmero equivalente, n T de tal modo que pueda ser usado en una comparaci numrica. n

39

edad = " " 31 ; if S tring. oNumber( T edad)> 1 8 then D M essage(" " eres mayor de 1 8. ) ialog. ", T "; end Lo que producira un mensaje de di como el siguiente: logo

La otra forma saca ventaja de la habilidad del motor de script para convertir nmeros en cadenas cuando sabe cu son sus intenciones. P or ejemplo, si est ejecutando una les s operaci aritmtica ( como la suma de dos nmeros) el motor autom n tal , ticamente convertir ti cualquier cadena numrica a nmeros: por edad = " + 5;-- el resultado ser valor numrico 26" un El ejemplo anterior no generar ningn error porque el motor de script entiende que la nica forma de que la declaraci tenga sentido es que diste a entender que se usara la n cadena numrica como un nmero. C omo resultado, el motor autom ticamente convierte la cadena numrica a un nmero de modo que se pueda ejecutar el c lculo. S abiendo esto, podemos convertir una cadena numrica en un nmero sin cambiar su valor simplemente a adiendo un 0 en ella,tal como se muestra a continuaci n: edad = " " 31 ; if ( edad + 0)> 1 8 then D M essage(" " eres mayor de 1 8. ) ialog. ", T "; end En el ejemplo de anterior, el a adirle 0 a una variable, consigue que el motor convierta el valor a un nmero, y que el resultado luego sea comparado con 1 8. a no habr Y error!

40

Otras Funciones Incorporadas


Funciones de Script
H ay tres funciones incorporadas que te pueden ser de utilidad: dofile,require,y type.

dofile
C arga y ejecuta un archivo de script. El contenido del archivo ser ejecutado como si ste fuera escrito directamente dentro del script.La sintaxis es: dofile( file_path) ; P or ejemplo, digamos que escribimos el siguiente script dentro de un archivo llamado M yS cript. ( lua justamente un archivo de texto conteniendo este script, creado con el W ordpad de W indows o algn otro editor de texto) Es indispensable que guardes este . archivo con la opci n Guardar comode tu editor de texto y debes guardarlo como tipo exto sin F T ormatoo con la opci odos los archivos es decir,no lo guardes como n T , . txt. D M essage(H ola" " undo"; ialog. " , M ) Ahora arrastramos y soltamos el archivo dentro de la ventana principal de AutoP lay M edia S tudio.( Esto copiar archivo dentro de la carpeta S cripts de nuestro proyecto) el . Aparecer di que pregunta si queremos a un logo adir una lnea require a nuestro script global.P or ahora haz click en . Explicaremos la declaraci require m tarde. No n s

Ahora,donde sea que agreguemos la siguiente lnea de script para un evento: dofile( ourceF _S older."\ . \AutoP lay\S cripts\M yS cript. ) \ \ lua"; ese archivo de script ser leido y ejecutado inmediatamente. En este caso, deber s ver un mensaje de di con el mensaje amigable ola M undo logo H .

41

Consejo: U tiliza la funci dofile para ahorrarte t mismo el tener que volver a escribir n o volver a pegar un script dentro de tu proyecto una y otra vez.

require
C arga y ejecuta un archivo de script dentro del motor de programaci Esta funci es n. n similar a la dofile, excepto que cargarun archivo dado una vez por sesi mientras n, que dofile vuelve a cargar y vuelve a ejecutar el archivo cada vez que es usado. La sintaxis es: require( file_path) ; As,por ejemplo,incluso si haces dos requerimientos en fila: require(foo. ) " lua"; require(foo. ) -- esta lnea no har " lua"; nada s la primera lnea ser siempre ejecutada. D lo espus de eso, el motor de programaci sabe que el archivo ha sido cargado y ejecutado, y en el futuro llama para n requerir que el archivo no tenga efecto. D cuenta que siempre y cuando pongas el archivo . dentro de la carpeta S cripts de ate lua tu proyecto,ya no tienes que proporcionar una ruta completa del archivo.P or ejemplo: require(M yS cript. ) " lua"; .. lo mismo que: .es require( ourceF _S older."\ . \AutoP lay\S cripts\M yS cript. ) \ \ lua"; D ebido a que require solo cargar archivo de script dado una vez por sesi esto es un n, lo m apropiado para cargar scripts que contienen s variables y funciones. P uesto s lo que las variables y las funciones son globales por defecto, t solamente necesitas cargarlas una vez; cargar reiteradas veces la misma definici de funci s sera n n lo una prdida de tiempo. Esto hace a la funci require una gran forma de cargar libreras de script externas. n C script que necesite una funci desde un archivo externo puede con toda seguridad ada n acudir a la funci require, y el archivo realmente ser n cargado s la primera vez que lo sea necesitado.

type
Esta function te dir tipo de valor contenido en una variable.Esta devuelve el nombre el de la cadena del tipo de variable. Los valores v lidos devueltos son nil, number, string, boolean, table, o function P or ejemplo: .

42

a = 989; strT ype = type( ; -- establece strT ype como " a) number" a = " ola" H ; strT ype = type( ; -- establece strT ype como " a) string" El tipo de funci es especialmente til cuando escribes tus propias funciones que n necesitan ciertos tipos de datos para poder operar. P or ejemplo, la siguiente funci n utiliza type( para asegurar que ambos de sus argumentos son nmeros: ) -- encuentra el m ximo de dos nmeros function M ax( Number1 ,Number2) -- asegura que ambos argumentos son numricos if ( type( Number1 )~= " number" or ( ) type( Number2)~= " number" then ) D M essage(Error" " lease enter numbers"; ialog. " , P ) return nil estamos usando nil para indicar un error de condici n else if Number1 >= Number2 then return Number1 ; else return Number2; end end end

Acciones
AutoP lay M edia S tudio viene con un gran nmero de funciones incorporadas. En la interface del programa, estas funciones incorporadas son comnmente referidas como actions (acciones). P ara prop sitos de programaci acciones y funciones son n, esencialmente lo mismo; sin embargo, el trmino acciones est reservado generalmente para aquellas funciones que ye vienen incorporadas en el programa y son incluidas en la lista alfabtica de acciones en la ayuda en lnea. C uando nos referimos a funciones que han sido creadas por otros usuarios o por ti mismo, el trmino funcioneses preferido.

43

Depurando Tus Scripts


El S cripting de Autoplay ( cualquier tipo de programaci es relativamente f una o n) cil vez que te familiarices con l.S in embargo,incluso los mejores programadores cometen errores, y necesitan darle una planchaditaa las arrugas ocasionalesde su c digo.El ser bueno para depurar scripts reducir tiempo para lanzar al mercado tus proyectos e el incrementar la cantidad de tiempo de descanso. P or favor lee esta secci para obtener n consejos en el uso de Auto P lay M edia S tudio tan habilidosa y eficazmente como sea posible. Esta secci explicarlos mtodos de manipulaci de errores, as como tambin n n cubrir buen nmero de tcnicas de depuramiento. un

Manipulacin de Errores
T odas las acciones incorporadas en AutoP lay M edia S tudio utilizan las mismas tcnicas b sicas de manipulaci de errores. S in embargo, esto no es necesariamente cierto para n cualquier funci m n, dulo o script hechos por terceros ( incluso los scripts desarrollados por I ndigo R ose C orporation que no est incorporados dentro del producto) Aunque n . estos scripts desarrollados externamente desde luego pueden hacer uso del sistema de manejo de errores del Autoplay, pueden necesariamente no hacerlo. P or consiguiente, deberas consultar siempre al autor o la documentaci del script o del m n dulo para encontrar c se manipulan los errores. mo H ay dos tipos de errores que puedes tener en tus scripts cuando las acciones de AutoP lay M edia S tudio son llamadas: errores de sintaxis y errores operativos o funcionales.

Errores de Sintaxis
Los errores de sintaxis ocurren cuando la sintaxis ( o gram ) de un script es tica incorrecta, o una funci recibe argumentos que no son apropiados. Algunos errores de n sintaxis son detectados por AutoP lay M edia S tudio cuando construyes o previsualizas tu aplicaci n. P or ejemplo,considera el siguiente script: foo = Esto es incorrecto porque no hemos asignado nada a la variable foo ( script est el incompleto) Este es un error de sintaxis bastante obvio, por lo que deber detectado . ser por el motor de programaci en tiempo de construcci ( n n cuando construyas tu proyecto) . Otro tipo de error de sintaxis es cuando no le pasas el tipo o nmero correcto de argumentos a una funci P or ejemplo,si pruebas y ejecutas este script: n. D M essage(H ola"; ialog. " )

44

el proyecto se construir bien, debido a que no hay errores de sintaxis obvios en el script. H asta donde el motor de programaci pueda decir,la llamada de la funci est n n bien formada. El nombre es v lido, los parntesis de abertura y cierre concuerdan, las comillas est en la posici correcta, e incluso hay un punto y coma de finalizaci de n n n la lnea.T odo se ve en orden. S in embargo,en tiempo de ejecuci ver algo como lo siguiente: n s

se mira tan bien despus de todo! verdad? D cuenta que el mensaje dice que No , ate dos argumentos son requeridos por la funci D M essage. Ah, nuestro script s n ialog. lo proporcionun argumento. Dacuerdo al prototipo de funci para D M essage, parece que la funci puede e n ialog. n incluso aceptar m de cinco argumentos: s

Observando con atenci el prototipo de funci vemos que los ltimos tres n n, argumentos tienen valores por defecto, los cuales ser utilizados si esos argumentos n son omitidos de la llamada de funci Los primeros dos argumentos ( itle y T ext)no n. T tienen valores por defecto, as que no pueden ser omitidos sin generar un error. P ara no hacer larga la historia, est bien llamar la acci D M essage con cualquiera de 2 a n ialog. 5 argumentos pero 1 argumento no es suficiente. Entonces,una sintaxis correcta podra ser: D M essage(H ola" " ienvenido"; ialog. " , B ) Lo que tendra que mostrar un mensaje de di como el que sigue: logo

45

Afortunadamente,errores de sintaxis como ste son usualmente detectados en tiempo de construcci o cuando pruebas tu aplicaci U sualmente los mensajes de error son n n. bastante claros,haciendo f para ti localizar e identificar el problema cil

Errores Funcionales
Los errores funcionales son aquellos que ocurren debido a que la funcionalidad de la acci en s misma falla. Estos ocurren cuando a una acci se le da informaci n n n incorrecta,tal como la ruta de un archivo que no existe.P or ejemplo,el siguiente c digo producir error funcional: un filecontents = T extF R eadT oS tring(this_file_don'exist. ) ile. " t txt"; S i colocas ese script ahora mismo dentro de un evento y lo pruebas, ver que nada s parece suceder.Esto se debe a que los errores funcionales de AutoP lay M edia S tudio no son autom ticamente mostrados de la misma forma que los errores de sintaxis. T e dejamos a tu elecci manipular ( el dejarlos as)estos errores funcionales. n o La raz de esto es que puede haber ocasiones en que no te importa si una funci falla. n n Dhecho, podra esperarse as. P or ejemplo, el siguiente c e digo intenta eliminar una carpeta llamada C M i C :\ arpeta T emporal: F older. elete(C \M i C D " :\ arpeta T emporal "; ) S in embargo, en este caso no te importa si realmente se consigue borrarla, o si, en primer lugar, la carpeta ni exista. T solamente quieres asegurarte que si esa carpeta en particular existe, ser borrada. S i la carpeta no exista, la acci F n older. elete causa un D error funcional debido a que no puedes encontrar la carpeta que t le dijiste que borrara pero puesto que el resultado final es exactamente lo que t queras, no necesitas hacer nada al respecto. Y ciertamente no quieres que el usuario vea ningn mensaje de error. C ontrariamente, puede haber ocasiones en que es muy importante para ti saber si una acci falla.D por ejemplo que quieres copiar un archivo muy importante: n icho F C ile. opy(C \ emp\M i Archivo. , C \ emp\M i Archivo. " :\T \ dat"" :\T \ bak"; ) En este caso, realmente quieres saber si esto falla y poder incluso cerrar el programa o informarle al usuario. Aqu es donde las acciones de depuraci te echan una mano. n C ontina leyendo sobre Acciones de D epuraci en la siguiente p n gina

46

Acciones de Depuracin
AutoP lay M edia S tudio viene con algunas funciones muy tiles para depurar tus aplicaciones.En esta secci les echaremos un vistazo a algunas de ellas. n

Application.GetLastError
Esta es la acci m importante a usar cuando se trata de averiguar si ha ocurrido un n s problema. En tiempo de ejecuci siempre hay un valor interno que almacena el estado n de la ltima acci que fue ejecutada. Al inicio de una acci este valor es fijado en 0 n n, ( nmero cero) Esto significa que todo est el . bien. S i un error funcional ocurre dentro de la acci el valor es cambiado a algn valor distinto de cero. n, A este ltimo valor de error se puede acceder en cualquier momento utilizando la acci n Application. GetLastError. La sintaxis es: last_error_code = Application. GetLastError(; ) Aqu est ejemplo que utiliza esta acci un n: F C ile. opy(C \ emp\M i Archivo. , C \ emp\M i Archivo. " :\T \ dat"" :\T \ bak"; ) error_code = Application. GetLastError(; ) if ( error_code ~= 0)then -- algn tipo de error ha ocurrido! D M essage(Error" " ialog. " , Error en copia de archivo: ". .error_code) ; Application. Exit(; ) end El ejemplo anterior informaral usuario que un error ha ocurrido y luego cerrarla aplicaci Esta no es necesariamente la forma en que todos los errores ser n. n manejados, pero ilustra el punto. P uedes hacer lo que quieras cuando un error ocurra, como llamar una funci diferente o cualquier otra cosa que puedas idear. n El ejemplo anterior tiene un posible problema. I magina que el usuario ve un mensaje como ste:

P ara el usuario sera mucho m agradable que se mostrara alguna informaci acerca s n del problema exacto. B ueno, est de suerte. En tiempo de ejecuci hay una tabla s n

47

llamada _tblErrorM essages que contiene todos los posibles mensajes de error, indexada por los c digos de error. P uedes utilizar f cilmente el ltimo nmero de error para obtener un mensaje de error actual que le dar s sentido al usuario del que le da un m nmero como 021 1 . P or ejemplo,aqu tenemos un script modificado para mostrar la cadena de error actual: F C ile. opy(C \ emp\M i Archivo. , C \ emp\M i Archivo. " :\T \ dat"" :\T \ bak"; ) error_code = Application. GetLastError(; ) if ( error_code ~= 0)then -- algn tipo de error ha ocurrido! D M essage(Error" " ialog. " , Error en copia de archivo: ". . _tblErrorM essages[error_code] ; ) Application. Exit(; ) end Ahora el script producir siguiente mensaje de error: el

informaci es mucho m clara ahora! La n s S recuerda que el valor del ltimo error se reanuda cada vez que una acci es lo n ejecutada.P or ejemplo,el siguiente script no producir mensaje de error: un F C ile. opy(C \ emp\M i Archivo. , C \ emp\M i Archivo. " :\T \ dat"" :\T \ bak"; ) -- En este punto Application. GetLastError( podra no ser cero,pero.. ) . D M essage(Q u tal"" ola M undo"; ialog. " ,H ) -- U ps,ahora el nmero del ltimo error ser para la acci D M essage, n ialog. -- y no para la acci F C n ile. opy.La acci D M essage reajustar n ialog. el -- nmero del ltimo error a 0,y las siguientes lneas no percibir ningn n -- error que haya sucedido en la acci F C n ile. opy. error_code = Application. GetLastError(; ) if ( error_code ~= 0)then -- Algn tipo de error ha ocurrido! D M essage(Error" ialog. " , " Error en copia de archivo: ". . _tblErrorM essages[error_code] ; )

48

Application. Exit(; ) end

Debug.ShowWindow
El tiempo de ejecuci en AutoP lay M edia S tudio tiene la habilidad de mostrar una n ventana de depuraci que puede ser utilizada para mostrar mensajes depurados. Esta n ventana existe durante toda la ejecuci de tu aplicaci pero estar lo visible cuando n n, s t le indiques. La sintaxis es: D S howW indow( ebug. show_window) ; .. .donde show_window es un valor B ooleano. S i es true, la ventana de depuraci es n mostrada,y si es false,la ventana se ocultarP or ejemplo: . -- muestra la ventana de depuraci n D S howW indow( ; ebug. true) S i llamas este script, la ventana de depuraci aparecer n encima de tu aplicaci pero n, ninguna otra cosa realmente suceder Aqu es donde las siguientes acciones D . ebug vienen.

Debug.Print
Esta acci muestra el texto de tu elecci en la ventana de depuraci P or ejemplo, n n n. prueba el siguiente script: D S howW indow( ; ebug. true) for i = 1 ,1 0 do D P rint(i = ". i . "r\ ) ebug. " . . \ n"; end La parte r\ es, de hecho, dos secuencias de escape que est siendo utilizadas para \ n n iniciar una nueva lnea. ( Esto es tcnicamente llamado un par cambio de lnea/ alimentaci de lnea . P uedes usar \ n en la ventana de depuraci en el n ) r\ n momento que desees insertar una nueva lnea. El script anterior producir siguiente salida en la ventana de depuraci la n:

49

P uedes usar este mtodo para mostrar todo tipo de informaci en la ventana de n depuraci Algunos usos tpicos son mostrar el contenido de una variable de modo que n. puedas ver qu contiene en tiempo de ejecuci o mostrar tus propios mensajes de n, depuraci como n inside outer for loop (interno externo para bucle o ) ) foo( function started (foo( funci iniciada . T ales mensajes crean un rastro como ) n ) migajas de pan que puedes rastrear para entender qu estsucediendo detr de las s escenas de tu proyecto. Estos pueden ser invaluables a la hora de depurar tus scripts o probar tu ltimo algoritmo.

Debug.SetTraceMode
AutoP lay M edia S tudio puede correr en un modo especial trace en tiempo de ejecuci que mostrar n informaci acerca de cada lnea de script que es ejecutada en la n ventana de depuraci incluyendo el valor de Application. n, GetLastError( si la lnea ) implica el llamado de una acci incorporada. P uedes activar o desactivar este modo n traceusando la acci D S etT raceM ode. n ebug. D S etT raceM ode( ebug. turn_on) ; .. .donde turn_on es un valor B ooleano que le dice al programa que apague o encienda el modo trace . Aqu est ejemplo: un D S howW indow( ; ebug. true) D S etT raceM ode( ; ebug. true) for i = 1 ,3 do D M essage(Nmero" i) ialog. " , ; end F C ile. opy(C \ " :\fake_file. ," :\fake_file. ext" C \ bak"; )

50

Al ejecutar este script se producir siguiente salida en la ventana de depuraci la n:

Nota que cada lnea producida por el modo trace inicia con R AC . Esto es as para T E: que puedas distinguirlas de otras lneas que mandes a la ventana de depuraci con n D P rint. El nmero despus de la parte R AC es el nmero de lnea que est ebug. T E: siendo ejecutado actualmente en el script. Activar el modo trace es algo que probablemente no querr hacer en tu aplicaci s n distribuible final, pero realmente puede ayudar a encontrar problemas durante el desarrollo de tu proyecto. Dhecho,hay una opci en las preferencias de construcci e n n de AutoP lay M edia S tudio que te permite activar autom ticamente el modo trace cada vez que tu lo previsualices. ( Elige Edit > P references y haz click en la categora B uild. En la secci P review,activa la opci llamada how D W indow .S in embargo, n n S ebug ) incluso con esta opci habilitada, el modo trace no estar n activado en la versi que n construyas cuando publiques tu proyecto, a menos que t especficamente lo actives en tu script

Debug.GetEventContext
Esta acci es utilizada para obtener una cadena descriptiva acerca del evento que est n siendo ejecutado actualmente. Esto puede ser til si defines una funci en un lugar n pero la llamas desde algn otro, y quieres ser capaz de decir desde d nde est siendo llamada la funci en cualquier momento dado. P or ejemplo, si ejecutas este script n desde el evento de un bot en la P 1 : n gina D M essage(Event C ialog. " ontext" D GetEventC , ebug. ontext() ); .. s algo como esto: .ver

51

Dialog.Message
Esta acci nos ayuda a mostrar mensajes de di n logo.Y a has visto el uso de esta acci n a lo largo de este documento, y por buenas razones. Esta es una gran acci que n utilizamos mucho en nuestros c digos cuando estamos tratando de seguirle la pista a un problema.

52

Conceptos Finales
Esperamos que este documento te haya ayudado a entender la programaci en n AutoP lay M edia S tudio.U na vez que te familiarices con ella,es realmente una divertida y poderosa forma de lograr realizar cosas.

Otros Recursos
Aqu est una lista de otros lugares en los que puedes obtener ayuda con la programaci en AutoP lay M edia S tudio. n

Archivo de Ayuda (Help File)


El Archivo de Ayuda de AutoP lay M edia S tudio est empaquetado con buen material de referencia para todas las acciones y eventos soportados en AutoP lay M edia S tudio, y para el ambiente de dise mismo. P uedes acceder al archivo de ayuda en cualquier o momento eligiendo el men H elp > AutoP lay M edia S tudio H elp. Otro consejo til: si est en el editor de script y quieres aprender m acerca de una s s acci simplemente haz click en la acci y oprime la tecla F de tu teclado. n, n 1

Gua del Usuario (Users Guide)


La Gua del U suario es una fant stica manera de iniciar con AutoP lay M edia S tudio. Est escrita con un formato de tutorial f de seguir, ense ndote acerca de eventos, cil acciones y scripts. Estar capacitado en poco tiempo. P uedes acceder a la Gua del s U suario eligiendo el men H elp > AutoP lay M edia S tudio U ser'Guide. s

Sitio Web de AutoPlay Media Studio


El sitio W eb de AutoP lay M edia S tudio est localizado en http:/www. / indigorose. com. Asegrate revisar el foro de usuarios donde puedes leer preguntas y respuestas de usuarios y del equipo de I ndigo R ose as como hacer tus propias preguntas. U na forma r de acceder a los foros en lnea es elegir el men H elp > U ser F pida orums.

Soporte Tcnico de Indigo Rose


S i necesitas ayuda con cualquier concepto de programaci o tienes un bloqueo mental n para llevar a cabo algo, sintete libre de visitar http:/support. / indigorose. com. Aunque nosotros no podemos escribir un script por ti o depurar tus propios scripts, estaremos felices de responder cualquier pregunta en general que tengas.

El Sitio Web Lua


El motor de programaci de AutoP lay est basado en un popular lenguaje de n programaci llamado Lua. Lua estdise n ado e implementado por un equipo de T ecgraf, la C omputer Graphics T echnology Group of P U C io ( la U niversidad -R en

53

C lica P ontificia de R o de Janeiro en B at rasil) P uedes aprender m acerca de Lua y . s su historia en su sitio web oficial: http:/www. org / lua. Aqu tambin puedes encontrar la ltima documentaci sobre el lenguaje Lua, junto n con tutoriales y una comunidad realmente amigable de desarrolladores de Lua. D cuenta que puede haber otras funciones incorporadas que existan en Lua y en ate AutoP lay M edia S tudio que no est oficialmente soportadas en AutoP lay. Estas n funciones,si las hay,est documentadas en el M anual de R eferencia de Lua 5. . n 1 El M anual de R eferencia oficial en espa lo puedes ver en: ol http:/www. org/ / lua. manual/ 1 / 5. es/ Solamente las funciones listadas en la ayuda en lnea son soportadas por Software Indigo Rose. C ualquier otra funci documentada que puedas encontrar en la n no documentaci Lua, no est n soportada por I ndigo R ose. Aunque estas funciones pueden trabajar,debes usarlas ntegramente por ti mismo.

54

Вам также может понравиться