2008Guía de Scripting en LUA Programación en AutoPlay Media Studio Lua es un lenguaje de programación extensible diseñado para una programación procedimental general con utilidades para la descripción de datos. También ofrece un buen soporte para la programación orientada a objetos, programación funcional y programación orientada a datos. Se pretende que Lua sea usado como un lenguaje de script potente y ligero para cualquier programa que lo necesite. Lua está implementado como una biblioteca escrita en C limpio (esto es, en el subconjunto común de ANSI C y C++). Henry Díaz Gutiérrez 2 CONTENIDO AUTOPLAY MEDIA STUDIO 7.X.X ---------------------------------------------------------------------- 4 GUÍA DE SCRIPTING (CÓDIGO) ------------------------------------------------------------------------ 4 INTRODUCCIÓN ------------------------------------------------------------------------------------------------- 4 UN RÁPIDO EJEMPLO DE SCRIPT EN AUTOPLAY MEDIA STUDIO. ------------------------------ 4 IMPORTANTE CONCEPTOS DE SCRIPTING ------------------------------------------------------- 6 SCRIPT ES GLOBAL ----------------------------------------------------------------------- 6 EL SCRIPT ES SENSIBLE A MAYÚSCULAS Y MINÚSCULAS (CASE-SENSITIVE) ------------------- 6 COMENTARIOS --------------------------------------------------------------------------- 7 LA DELIMITACIÓN DE LAS DECLARACIONES ------------------------------------------------- 7 VARIABLES --------------------------------------------------------------------------------------------------------- 8 ¿CUÁLES SON LAS VARIABLES?------------------------------------------------------------ 8 ÁMBITO DE APLICACIÓN VARIABLE --------------------------------------------------------- 9 Variables locales -------------------------------------------------------------------- 9 NOMBRES DE VARIABLES ----------------------------------------------------------------10 PALABRAS CLAVE (RESERVADAS) ---------------------------------------------------------11 TIPOS Y VALORES -----------------------------------------------------------------------11 Número (Number) -----------------------------------------------------------------12 Ninguna (Nil) ----------------------------------------------------------------------15 Boolean (Si o No) ------------------------------------------------------------------15 Función (Function) ----------------------------------------------------------------15 Arreglos (Table) -------------------------------------------------------------------16 Ejemplo 1: -------------------------------------------------------------------------------- 16 Ejemplo 2: -------------------------------------------------------------------------------- 16 ASIGNACIÓN A VARIABLE ----------------------------------------------------------------17 EXPRESIONES Y OPERADORES ----------------------------------------------------------------------- 18 OPERADORES ARITMÉTICOS --------------------------------------------------------------18 OPERADORES RELACIONALES-------------------------------------------------------------18 CONCATENACIÓN -----------------------------------------------------------------------20 PRECEDENCIAS DE LOS OPERADORES -----------------------------------------------------20 ESTRUCTURAS DE CONTROL --------------------------------------------------------------------------- 21 IF (SI) ---------------------------------------------------------------------------------21 WHILE (MIENTRAS) ---------------------------------------------------------------------22 REPEAT (REPITA) -----------------------------------------------------------------------23 FOR (PARA) ----------------------------------------------------------------------------23 TABLES (ARRAYS) | TABLAS (MATRICES) ----------------------------------------------------- 24 CÓMO CREAR TABLES --------------------------------------------------------------------24 ARRAYS NUMÉRICOS --------------------------------------------------------------------25 ARREGLOS ASOCIATIVOS ----------------------------------------------------------------26 USO DE FOR PARA ENUMERAR TABLAS ----------------------------------------------------27 COPIANDO TABLAS (ARRAYS) ------------------------------------------------------------28 FUNCIONES TABLE (TABLA) --------------------------------------------------------------30 3 FUNCIONES ------------------------------------------------------------------------------------------------------ 31 ARGUMENTOS DE UNA FUNCIÓN ----------------------------------------------------------32 VALORES DE RETORNO ------------------------------------------------------------------33 MÚLTIPLES VALORES DE RETORNO--------------------------------------------------------33 REDEFINICIÓN DE FUNCIONES ------------------------------------------------------------34 PONER FUNCIONES EN LAS TABLAS -------------------------------------------------------34 MANIPULACIÓN DE CADENAS ------------------------------------------------------------------------- 35 CONCATENAR CADENAS ------------------------------------------------------------------35 COMPARACIÓN DE CADENAS -------------------------------------------------------------36 CONTAR CARACTERES -------------------------------------------------------------------37 BUSCAR CADENAS-----------------------------------------------------------------------37 EXTRACCIÓN EN CADENAS ---------------------------------------------------------------38 CONVERSIÓN DE CADENAS NUMÉRICAS EN NÚMEROS ---------------------------------------39 OTRAS FUNCIONES PRE-CONSTRUIDAS INCORPORADAS ---------------------------- 41 SCRIPT DE FUNCIONES -----------------------------------------------------------------41 DOFILE ---------------------------------------------------------------------------------41 REQUIRE -------------------------------------------------------------------------------42 TYPE -----------------------------------------------------------------------------------42 ACCIONES ------------------------------------------------------------------------------43 LA DEPURACIÓN DE SUS SCRIPTS ----------------------------------------------------------------- 43 MANIPULACIÓN DE ERRORES -------------------------------------------------------------44 ERRORES DE SINTAXIS ------------------------------------------------------------------44 ERRORES FUNCIONALES -----------------------------------------------------------------45 LAS ACCIONES DE DEPURACIÓN ----------------------------------------------------------46 Application.GetLastError ----------------------------------------------------------46 Debug.ShowWindow --------------------------------------------------------------48 Debug.Print ------------------------------------------------------------------------48 Debug.SetTraceMode --------------------------------------------------------------49 Debug.GetEventContext ----------------------------------------------------------50 Dialog.Message --------------------------------------------------------------------51 CONSIDERACIONES FINALES-------------------------------------------------------------------------- 51 OTROS RECURSOS ----------------------------------------------------------------------51 ARCHIVOS DE AYUDA --------------------------------------------------------------------51 GUÍA DEL USUARIO----------------------------------------------------------------------51 SITIO WEB DE AUTOPLAY MEDIA STUDIO-------------------------------------------------52 INDIGO AUMENTÓ EL APOYO TÉCNICO -----------------------------------------------------52 EL SITIO WEB DE LUA -------------------------------------------------------------------52 4 AutoPlay Media Studio 7.X.X Guía de Scripting (Código) Introducción Una de las potentes funciones de AutoPlay Media Studio es su motor de scripting. Este documento le presentará el nuevo entorno del lenguaje de programación. El Scripting de AutoPlay es muy simple, con sólo un puñado de conceptos a aprender. Esto es lo que parece: a = 5; if a <10 then Dialog.Message ("¿Adivina qué?", "a es menor que 10"); end (Nota: este script es sólo una demostración. No se preocupe si usted no entiende todavía.) El ejemplo anterior asigna un valor a una variable, verifica el contenido de esa variable, y si el valor resulta ser inferior a 10, utiliza una acción de AutoPlay llamada "Dialog.Message" para mostrar un mensaje para el usuario. Programadores nuevos y experimentados por igual se encuentran con que AutoPlay Media Studio es un potente, flexible y simple medio para trabajar Scripting. Un rápido ejemplo de Script en AutoPlay Media Studio. Aquí está un breve tutorial que muestra cómo introducir una secuencia de comandos en AutoPlay Media Studio y vista previa de los resultados: 1. Inicie un nuevo proyecto. 2. Crear un nuevo objeto del tipo botón. 3. En la ventana de “Properties”(Propiedades), en la categoría “Actions”(Acciones), diríjase al evento “On Clic”(Clic) del objeto botón y selecciónelo. Al lado derecho se mostrara un pequeño botón de edición junto a la palabra "-- None --"(Ninguno). 4. Haga clic en el botón Editar para abrir el Editor de Scripting. Tenga en cuenta que se abre directamente en la ficha “On Clic”. 5 5. Escriba el texto siguiente: Dialog.Message ("Título", "Hola Mundo en Lua"); Se debe tener este aspecto cuando haya terminado: 6. Haga clic en Aceptar para cerrar el Editor de secuencias de comandos (Scripting). 7. Elija Publicar (Publish) > Vista previa (Preview) [F5] en la barra de menú. 8. Una vez que se ejecuta la aplicación, haga clic en el botón que has creado. Esto hará que se ejecute el evento Clic del objeto botón, de modo que el codigo (Script) que ha introducido se llevará a cabo. Deberías ver el siguiente cuadro de diálogo al dar clic en el botón: " en el proyecto en el evento “On Startup”. Por ejemplo: ABC = 10. El mismo principio se aplica también a los nombres de las funciones. nombres de variables y nombres de las funciones. ABC y aBC se refieren a dos diferentes variables. Script es Global El motor de scripting es global para el entorno en tiempo de ejecución. Puede utilizar el método anterior para probar cualquier script que desee en AutoPlay Media Studio.6 Felicidades! Usted acaba de hacer su primer script. DIALOG. . Por ejemplo: Dialog.Message ("Hola". cuando el próximo evento es activado. En el script de arriba. Esto significa que caracteres mayúsculas y minúsculas son importantes para cosas como palabras clave. "Hola mundo…"). aBC = 7. "Hola mundo…"). pero es generalmente cierto en el caso del motor de scripting. Importante conceptos de Scripting Hay algunas cosas importantes que usted debe saber acerca del lenguaje de scripting en general de AutoPlay Media Studio antes de seguir adelante. . Aunque se trata de un simple ejemplo.Message ("Hola". Por ejemplo.. Hay formas en torno a esta naturaleza mundial. y pueden tener diferentes valores. si asigna "mivar = 10. Sin embargo. La minúscula "a" en "aBC" hace que sea completamente diferente de "ABC" en la medida de que AutoPlay las invoca. que sólo le muestra lo fácil que es hacer que algo suceda en su aplicación AutoPlay.. se refiere a una función construida para AutoPlay. Esto significa que todos los eventos de su voluntad "saber" acerca de otras variables y funciones declarados en el resto del producto. “mivar” será igual a 10. El Script es sensible a mayúsculas y minúsculas (Casesensitive) El motor de scripting es sensible entre mayúsculas y minúsculas. Usted debe usar los comentarios para explicar sus escrituras en la medida de lo posible. pero diferentes de capitalización . Nota: Es totalmente posible tener dos funciones con la misma ortografía. Comentarios Puede insertar comentarios no ejecutables en sus escrituras para explicar y documentar el código.Asignar 10 a la variable abc abc = 10. .. mivar = a. cualquier texto después de dos guiones (--) en una línea será ignorado. generalmente es mejor dar nombres completamente diferentes a funciones para evitar cualquier confusión.7 .). no será reconocido como una función construida.Asignar 10 a abc Los dos ejemplos anteriores hacen exactamente la misma cosa. porque “DIALOG” y “dialog” se consideran como dos nombres completamente diferentes.. -. También puede crear multi-línea mediante el uso de comentarios -.[[Esto es un comentario multi-línea]] -a = 10.por ejemplo. Aunque es definitivamente posible de esas funciones a coexistir. Por ejemplo.a ambos lados del comentario: -. GreetUser y gREeTUSeR sería visto como dos funciones totalmente diferentes.[[ y ]] .. Por ejemplo: -. o: abc = 10. La delimitación de las declaraciones Cada una única declaración puede ser en su propia línea y / o separados por un punto y coma (. todas de las siguientes secuencias de comandos son válidas: Script 1: a = 10 Mivar = a Script 2: a = 10. En un script. a fin de que sean más fáciles de entender por usted mismo y otros. los comentarios no afectan a los script en modo alguno.. . b = a. simplemente.Message ("Valor". Dialog. Aquí hay un par de ejemplos que demuestran cómo se puede operar sobre la variable "cantidad": cantidad = 10. asignando un valor a una variable es como "depositamos" el valor en un contenedor. También puede asignar una variable a otro: a = 10.Message ("Valor"." .8 Script 3: a = 10. cantidad = cantidad + 20. cantidad = 10. La línea "b = a. y entonces finalmente muestra un mensaje donde el valor actual de dicha variable será 30. Sin embargo. Nota: Nosotros decimos que los valores son "asignados a" o "depositados en" variables. Puede cambiar este valor en cualquier momento. Dialog. la siguiente secuencia de comandos asigna el valor 10 a una variable llamada "cantidad". Si. Las variables son. una variable de la imagen de un contenedor donde se puede almacenar un valor. le recomendamos que todas las declaraciones finalicen con un punto y coma (como en los script 2 y 3). cantidad). al asignar un valor diferente a la variable. b). Esta capacidad de mantener la información cambiante es lo que hace que las variables sean tan útiles. Esta expresión asigna 10 a la variable llamada cantidad. Variables ¿Cuáles son las variables? Las variables son muy importantes para los script en AutoPlay. Por ejemplo." asigna el valor de "a" (que es 10) a "b. "apodos" o "marcadores" de los valores que deben ser modificados o reutilizados en el futuro. y luego añade 20 al valor que mantiene. el nuevo valor simplemente reemplaza al antiguo. Mivar = a. Esto hará que aparezca un cuadro de mensaje con el número 10 en el mismo. y a continuación escriba: Dialog. Dialog. utilizando las palabras clave "local.. ..Message ("El valor local de x es:". no es Global Dialog. cuando se hace clic en el objeto botón. si un valor es asignado a una variable en un script.Message ("El valor es:".. por lo que el valor 10 ya está asignado a “foo” cuando se ejecuta el evento “On Click” en el script. significa que una variable conservará su valor en todo el proyecto. en un objeto botón en el evento “On Clic”. -. . y mantienen sus valores para próximos script. Script 3: . en la página actual en el evento “On Open”.9 Ámbito de aplicación variable Como se mencionó anteriormente en este documento. un cuadro de mensaje aparecerá con el número 10 en el mismo. x = 250. En el ejemplo anterior. la variable todavía tiene su valor cuando el siguiente script es ejecutado. Sin embargo. Variables locales Por naturaleza global del motor de script. todas las variables en AutoPlay Media Studio son globales por defecto.esto cambia a local a x. el segundo script utilizará el valor que se asignó a "foo" en el primer script.. este otro script que tiene que ser ejecutado primero. Script 2: local x = 500. x). En otras palabras. foo). digamos que usted tiene los siguientes tres script en el mismo proyecto: Script 1: -. en el evento de la pagina “On Open” es disparado antes del evento “On Click” del botón.. para que un script pueda utilizar el valor que se asigna a la variable en otro script. Por ejemplo. puede hacer que las variables no sean globales." Poner la palabra "local" en frente de una asignación a variable crea una variable que es local a la actual función o script.Message ("El valor local de x es:".. Esto significa que existen en todo el proyecto. si introduce este script: foo = 10. Por ejemplo. x). Como resultado de ello.Asignamos el valor 10 a x x = 10. Tenga en cuenta que el orden de ejecución es importante. Message dentro del script # 2 mostrará 500. siempre que no comiencen con un número y no entren en conflicto con palabras clave (reservadas). el tercer script muestra el valor global de x. pero tiene un valor diferente. (Esto me recuerda a las películas Caper. que sigue siendo 10. Si cualquier otra cosa dentro de ese script quiere tener acceso al valor de x. crear una nueva bóveda de trabajo. Por último. ya que es el valor local de x cuando la acción se lleva a cabo. Supongamos que estos tres script se realizan una tras otro. dándole el valor de 500. al igual que el original. Nombres de Variables Los nombres de variables pueden estar compuestos de cualquier combinación de letras. Ejemplos válidos de nombres de variables: un strNombre _Mi_Variable dato1 dato_1_23 Índice bReset nContar Ejemplos no válidos de nombres de variables: 1 1dato %% MiValor $ strDato . esta reemplaza completamente la variable global para el resto del script. x).10 -. donde en el banco. Esto sucede porque la variable "x" ha sido sustituida temporalmente por otra variable que se ve igual. se vera el valor local en lugar del valor global. pero sólo dentro de ese script. La siguiente línea asigna el valor local de 250 a x. x tendrá este valor dentro de todos los demás script también. los ladrones poner una foto delante de la cámaras de seguridad por lo que el guardia no ver que la bóveda está vacía. la desmantelan cuando se van. dígitos y guión bajo (underscores). Sólo en este caso. El primer script da el valor 10 a x.) Cuando le pide mostrar el contenido de x. note que una vez que usted haga una variable local.Mostrar el valor global de x Dialog.Message ("El valor global de x es:". El segundo script hace una sesión local de x. Dado que todas las variables son globales por defecto. es como el banco robado. y a continuación. la primera acción Dialog. esto crea automáticamente la variable llamada "j" y asigna el valor 10 a la misma. . y a continuación. Esto significa que usted puede dar vuelta alrededor y asignar un tipo diferente de valor a “j”. la variable j no le importa qué tipo de dato tiene. En realidad las variables no tienen tipos de cambio.. si desea utilizar un número. Esto sustituye al número 10 que se almacena en j con la cadena "Hola. cada valor tiene su propio tipo. a continuación. en AutoPlay sólo se puede asignar un valor a una variable sin declarar su tipo. la variable es todavía typeless. constantes o las 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 scripting de AutoPlay es dinámicamente tipado. Por ejemplo: j = 10. Lo que esto significa es que usted no tiene que declarar una variable a ser de un determinado tipo antes de usarlo. usted tiene que declarar primero el tipo de la variable y. j = 10.. de este modo: j = "Hola". Aunque este valor tiene un tipo (es un número).11 para local _PrimNombre + Apellidos_ Nombre de usuario Palabras clave (Reservadas) Las siguientes palabras son reservadas y no se puede utilizar para nombrar variables. No hay ningún tipo de definiciones . El ejemplo de C++ declara a “j” como un entero. nil. asignar un valor a la misma: int j. entre un tipo u otro. . Hay seis tipos de datos básicos en AutoPlay: number. Por ejemplo.en lugar de ello. sólo le importa lo que puso en él. es dentro de los valores que se consideran los tipos. string. asigna 10 a la misma. Como hemos visto." El hecho de que una cadena es un tipo diferente de dato no importa. en C++. 57e-3 0. De hecho. \"y yo estaba con todos los \" ¡Amigos! \"". todos ellos son sólo" números”. Número (Number) Un número es exactamente eso: un valor numérico.. Estas deben ser delimitadas por comillas simples coincidentes o comillas dobles. comillasSimples = 'Ella dijo "Hable con la mano". las cadenas pueden contener cualquier combinación válida de 8 bits de caracteres ASCII." Una cadena puede variar ampliamente en longitud. He aquí algunos ejemplos de números válidos: 4 4. . Apellido = ‘Díaz’. No hay distinción entre enteros y números de punto flotante (también conocidos como "fracciones "). function y table. "Joe2" es una cadena de cuatro caracteres. una cadena puede contener una sola letra. Se vería así: escapado = "Ella dijo \" Hable con la mano. En las secciones siguientes se explicará cada tipo de dato con más detalle. Normalmente se utilizan comillas dobles para las cadenas. comenzando con la letra "J" y termina con el número "2. Si utiliza comillas dobles para delimitar el string y dentro de este también las usara. de forma que nunca tenga que preocuparse de la asignación o de la asignación de memoria para las cadenas. Por ejemplo: comillasDobles = "¿Qué hay de nuevo?". si usted tiene una cadena que contiene comillas dobles dentro de dicho string. tales como retornos de carro y saltos de línea. concretamente. valores de doble precisión de punto flotante. . Dialog. sin escapar de ella. Por ejemplo. ¿cómo estás?").12 boolean. ni una sola palabra.3e12 Cadena de Caracteres (String) Una cadena es simplemente una secuencia de caracteres. Las cadenas pueden ser bastante utilizadas intuitivas y naturales. puede incluir el otro tipo de comillas dentro de la cadena. pero puede ser útil usar comillas simples („). incluyendo los caracteres nulos ("\0")..4 4. el string debe quedar de la siguiente manera para que el motor de script no finalice el string en la segunda comilla doble. y yo era todo como "Dude!"'. El número representa el tipo de números reales. Aquí hay algunos ejemplos que utilizan las cadenas de caracteres: Nombre = "Henry Díaz". o el contenido de un libro en su totalidad.4 0. AutoPlay gestiona automáticamente string de memoria. Las cadenas pueden contener espacios y aún más caracteres especiales.Message ("Título". "Hola. Cualquiera que sea el tipo de cita que utilice. txt". Esto le dice al motor de script que desee incluir una cita de carácter real en la cadena de caracteres. y que necesita para escapar de ellos con una barra invertida (\). Sólo tiene que recordar hacer una secuencia de escape de las barras.Message muestra el contenido de la variable Lineas en un cuadro de mensaje. Este asigna una cadena a una variable denominada Líneas.txt.Message ("Aquí se muestra un String". si desea mostrar tres líneas de texto en una única cadena. Dialog. Lineas). como este: Otro ejemplo común es cuando se quiere representar una ruta de acceso a un archivo. tales como C: \Mi Documentos\Mis Datos. La barra invertida y la comilla doble (\") son conocidas como una secuencia de escape.13 Normalmente. el motor de script ve comillas dobles como el marcador de inicio o final de una cadena de caracteres. como en el siguiente ejemplo: MyPath = "C:\\Mis Documentos\\Mis Datos. Una secuencia de escape es una secuencia especial de caracteres que se convierten o "traducen" en otra cosa por el motor de script. Las secuencias de escape le permiten incluir cosas que no pueden ser escritas directamente en una cadena. . \nLinea tres". Con el fin de incluir comillas dobles dentro de una cadena de caracteres encerrados en comillas dobles. La función Dialog. y utiliza la nueva secuencia de escape para iniciar una nueva línea después de cada frase. por ejemplo. haga lo siguiente: Lineas = "Línea uno. Las secuencias de escape que puede utilizarse en AutoPlay son: \a \b \f \n \r \t \v \\ \" \' \[ \] campana de retroceso salto de pagina nueva línea retorno de carro tabulación horizontal tabulación vertical barra invertida comillas apóstrofe corchete izquierdo corchete derecho Así. \nLinea dos. o nunca. -. usted no tendrá que utilizar este formato muy a menudo. Por ejemplo. las siguientes líneas no le dan el mismo resultado de la conversión: a = "10 +1".El resultado es la cadena "10 +1" b = "hola" + 1.es de 11 Resultados b = "33" * 2. -. Sin embargo. puede utilizar una barra invertida seguida de un número de hasta tres dígitos para representar el valor de cualquier carácter ASCII. y no desea tener que convertir todos los caracteres especiales en secuencias de escape. Por supuesto. Línea tres. La última cosa importante a saber acerca de las cadenas es que el motor de scripting proporciona conversión automática entre números y cadenas de caracteres en tiempo de ejecución. \10Linea dos. \nLinea tres". Lineas = "Línea uno. -. las siguientes líneas son válidas: a = "10" + 1. el valor ASCII de un carácter de nueva línea es de 10 (el valor de “a” minúscula en la tabla ASCII). \nLinea dos.es de 66 Resultados Sin embargo.]]. Por ejemplo. …es equivalente a: Lineas = "Línea uno. Por ejemplo: Lineas = [[Línea uno. Si conoce la tabla ASCII.Error. el motor intenta convertir la cadena a un número para la operación. \nLinea dos. \nLinea tres". saltos de línea y comillas simples y dobles en la cadena de caracteres. Cuando una operación numérica se aplica a una cadena de caracteres. El estar entre doble corchetes le permite a la cadena usar todo tipo de caracteres especiales como barras. Línea dos. -. Una cadena entre doble corchetes no necesita ningún carácter de escape.14 Cada doble barra representa una única barra cuando se utiliza dentro de una cadena. no se puede transformar "hola" a un número . esto sólo tendrá éxito si la cadena contiene algo que puede interpretarse como un número. También se puede definir cadenas en varias líneas con/entre doble corchetes ([[y]]). Esto puede ser útil si usted tiene pre-texto que desea utilizar como una cadena. \10Linea tres". por lo que las dos líneas siguientes hacer exactamente lo mismo: Lineas = "Línea uno. Esta expresión no se ejecutará end También puede ser utilizado para "eliminar" el valor de una variable: y = "Henry Diaz". ejecuta una declaración en base al valor devuelto. Puede asignar cero a una variable. Básicamente representa la ausencia de cualquier otro tipo de valor. y a continuación. como en una cadena. En este caso. Nil debe ser escrita al lado derecho de la variable con el fin de ser reconocidos como un tipo de valor. if boolybooly then -. "y" ya no contienen un valor después de la segunda línea. Por ejemplo: boolybooly = true. Del mismo modo: a = true.verdadero y falso es falso. tanto "a" y "b" para ser verdad para las líneas dentro de él a ser ejecutado. Al igual que otras palabras clave.Ingrese acá todas las líneas -. if a then -. true o false.Cualquier script de aquí no se ejecutará porque -. end Esto establece una variable llamada boolybooly en verdadera. Función (Function) .Cualquier script de aquí será ejecutado. si o no. Tenga en cuenta que esto no es lo mismo que la asignación de las letras "cero" a una variable. y = nil. También debe ser escrita en letras minúsculas. if (A y B) then -. end Esta vez.15 Ninguna (Nil) Ninguna es un tipo dato de valor ausente. Nil siempre se evalúa como falsas cuando se utiliza en una condición: a = nil. que no va a ocurrir porque "b" se ha establecido en falso. al igual que cualquier otro valor. b = false. En el ejemplo anterior. si la declaración de necesidades. Se pueden utilizar en condiciones y llevar a cabo operaciones de lógica booleana. Boolean (Si o No) Las variables de tipo Boolean puede tomar uno de dos valores: cierto o falso. o pasar a otra función.Nombre = "Henry". ocupacion = arreglo_dos. que son arreglos que pueden ser indexados. Los arreglos se pueden indexar utilizando notación matriz (mi_arreglo [1]). Cada función tiene un nombre que se utiliza para identificar la función. nombres[2]). arreglo_uno.Ocupacion = "Programador".Nombre. Esto mostrará el mensaje siguiente cuadro: Se pueden asignar tablas con otras variables como así.16 El motor de scripts le permite definir sus propias funciones (o "subrutinas"). Esto mostrará un cuadro de mensaje con la palabra "Everth" en el. arreglo_uno. "Paguada"}. Las tablas son en realidad arrays asociativos.Ocupacion = "Programador". Arreglos (Table) Las tablas o arreglos son una forma muy poderosa para almacenar listas de valores indexados bajo un nombre. t.Apellido = "Díaz". no sólo con números. Por ejemplo: arreglo_uno = {}. Dialog. t.Nombre. "Evert". Usted puede utilizar el nombre de la función como un valor de tipo especial. es decir. . t. Dialog. que son esencialmente pequeños pedazos de script que puede ser ejecutado en la demanda. Dialog. t. sino con cualquier tipo de valor (incluyendo cadenas).Ocupacion.Message(t. Ejemplo 1: nombres = {"Henry". arreglo_uno. He aquí algunos ejemplos rápidos.Message ("Segundo nombre en la lista". con el fin de almacenar una "referencia" para esa función en una variable. Ejemplo 2: t = {}. Este tipo de referencia es el valor del tipo function (función).Apellido = "Díaz". ocupacion).Nombre = "Henry".Ocupacion). arreglo_dos = arreglo_uno.Message(b. arreglo_dos y arreglo_uno ambos se refieren al mismo arreglo. Así que cuando le puede asignar el contenido de la variable arreglo_uno a la variable arreglo_dos. Los arreglos y las funciones son parte de un caso especial: cuando se utiliza el operador de asignación sobre una arreglo o función. lo que necesitas para crear un nuevo arreglo y. Es interesante observar que el motor de scripts soporta múltiples tareas de asignación: a.Apellido)..17 o por la notación (mi_arreglo. es cuando la variable comienza a "copiarse". b = 1. estás copiando la dirección. esto en realidad no copia arreglo_dos en arreglo_uno. 2. Muchos programadores llaman a este modo “Por Referencia” que es distinto al otro método de copiado llamado “Por Valor”. En lugar de ello. la variable "a" contiene el número 1 y la variable "b" contiene el número 2. como en la línea siguiente: arreglo_dos = arreglo_uno. . copia todos los datos sobre un tema en un momento. . y no los datos reales.. Asignación a variable Las variables pueden tener los nuevos valores asignados a ellos mediante el operador de asignación (=). Con el fin de copiar el contenido de un arreglo. b = "Soy feliz". a continuación. c = b. Por ejemplo: a = 10. Usted está vinculando esencialmente las dos variables al mismo "punto" donde se encuentran los datos del arreglo. se crea un alias que apunta al mismo arreglo o función. punto en vez de indexados por números Tenga en cuenta que al asignar un arreglo a otro. Esto se debe a que el nombre de un arreglo en realidad se refiere a una dirección en la memoria donde los datos dentro del arreglo se almacenan. Después del script. Esto incluye copiar el valor de una variable en otra. Todos los demás valores sólo puede usar el operador == para ver si son iguales. como "6" o un valor complejo construido con los operadores tales como "1 + 3". Los siguientes operadores relacionales son compatibles: > < <= >= ~= == (Mayor que) (Menor que) (Menor que o igual a) (Mayor o igual a) (Desigual) (Igualdad) Todos los operadores relacionales pueden aplicarse a cualquiera de estos dos tipos de valores. Los operadores relacionales retornan valores booleanos. Esto puede incluir un único valor. veintitresPorciento = 23 / 100. Operadores aritméticos Operadores aritméticos se utilizan para realizar operaciones matemáticas sobre los números. -. (5 * 1) * 2. b = a * 100. Los siguientes son los operadores matemáticos soportados: + * / unario (Adición) (Resta) (Multiplicación) (División) (negación) He aquí algunos ejemplos: a = 5 + 2.18 Expresiones y operadores Una expresión es todo lo que se evalúa como un valor. (verdadero o falso). Operadores relacionales Operadores relacionales le permiten comparar cómo se relaciona un valor a otro. posi = -nega. números o cadenas.se devuelve falso . nega = -29. 100 / (2 * 5). Por ejemplo: 10 > 20. Puede utilizar paréntesis para "agrupar" las expresiones y control del orden en el que se evalúan las expresiones con sus operadores. todas devuelven el mismo valor: a a a a = = = = 10. las siguientes líneas al ser evaluadas. Por ejemplo. 100 / 10. falso "Me gusta mucho" == "me gusta MUCHO" -. false. Por ejemplo: soyinvisible = nil. -. . Dialog.Porque soyinvisible se considera falsa Dialog. incluyendo cadenas.Las líneas de aquí se ejecutaran. if soyinvisible then -. y todos los demás valores son verdaderos.verdadero Operadores lógicos Operadores lógicos se utilizan para realizar operaciones booleanas sobre los valores booleanos. porque Brett no es negativa. Por ejemplo: "Jojoba" == "Jojoba".falso "feliz" ~= "FeLIz".verdadero Tenga en cuenta que sólo los valores nulos y falsos se consideran falsas.falso cero and nil. Los siguientes operadores lógicos son compatibles: and or not (devuelve verdadero si ambos valores son verdaderos) (devuelve verdadero si 1 de los 2 son verdaderos) (devuelve el contrario del valor) Por ejemplo: a b c d e = = = = = true.19 a = 10.. -. "Yo soy invisible !!!!").verdadero Un punto importante a mencionar es que los operadores == y ~= al completar la prueba de igualdad. . end if "Brett" then -. cualquier otra cosa.se consideran verdaderas.Se consideran falsas .Message ("Usted no puede verme!"..verdadero "Salvajes" == "salvajes" -. ni falsa -. A and B. al hacer comparaciones con los operadores.verdadero "Brett" ~= "Lorne" –. -. . -.falso (3 * 200) > 500. distinguen entre mayúsculas y minúsculas. lo que significa que en cualquier cadena. "Las cadenas .falso not b. son case-sensitive. -.Message ("¿Qué pasa con las cadenas?".Las líneas de aquí no va a ocurrir -. a > 300. 20 son verdaderas. --asigna "Henry Diaz es el número 1" a b Precedencias de los operadores Se dice que los operadores tendrán preferencia (precedencia). pero se puede si lo desea.). La operador (*) multiplicación tiene mayor precedencia que el operador (+) suma. la operación de la izquierda se lleva a cabo en primer lugar. por lo que esta expresión es equivalente a 1 + (2 * 3). end Concatenación En los script de AutoPlay. Por ejemplo: name = "Henry". y el resultado es entonces utilizado en la expresión 3 * 3. La excepción es el operador de exponenciación (^). Por ejemplo. En otras palabras." es número" ."). que es una manera de describir las normas o reglas que determinan que operación en una expresión se realiza en primer lugar."Diaz". Esencialmente. Se utiliza para combinar (unir) dos o más cadenas de caracteres. En el motor de scripting.. Precedencias de los operadores sigue el siguiente orden. El paréntesis crea del conjunto una sub-expresión "1 + 2" la izquierda el valor del operador (*) multiplicar. todos los operadores binarios son asociativos a izquierda. y entonces 1 + 6 se lleva a cabo.(unario) Los operadores también tienen asociatividad. de menor a mayor prioridad: and < . 1. Un simple ejemplo sería la expresión 1 + 2 * 3.. que es asociativo derecho. el operador de concatenación es de dos períodos (. la expresión (1 + 2) * 3 devuelve 9. Por ejemplo: a + 1 < b/2 + 1 . Usted no tiene que poner espacios antes y después de los períodos. siempre puedes utilizar paréntesis explícitos de control de precedencia. la expresión 2 * 3 se realiza en primer lugar. En caso de duda. que es una manera de describir las expresiones que se realizan en primer lugar cuando los operadores tengan igualdad de precedencia. lo que significa que cada vez que dos operadores tienen la misma prioridad. --asigna "Henry Diaz" a la variable name b = name . + * not ^ or > <= >= ~= == -/ . la sub-expresión 1 + 2 se evalúa en primer lugar.. por lo que el valor final es 7.. Puede invalidar el orden natural de precedencia mediante el uso de paréntesis.. if x > 10 then Dialog. también: a + 1 < b/(2 + 1) En este último ejemplo.. end y = 3. repeat y for If (Si) Una declaración if evalúa su condición y a continuación. y 105 no es inferior a 100. "y es 35 veces inferior a 100"). La sintaxis básica es la siguiente: if condición then hacer algo aquí end Por ejemplo: x = 50. if ((35 * y) < 100) then Dialog. 35 veces 3 es 105.. Estructuras de control El motor de scripts soporta las siguientes estructuras de control: if..Message ( "". end . en lugar del 1 que se añade a la mitad de B. "x es mayor que 10"). sólo el primer mensaje de diálogo que aparezca. sólo ejecuta parte del código después de “then” si la condición es verdadera.21 . while..Message ("". else Dialog.Message ("resultado". porque si la segunda condición no es verdadero.. B se divide por 3. end En el script de arriba. "x es igual o inferior a 10"). if x > 10 then Dialog. y puede utilizar paréntesis para cambiar el orden de los cálculos.Message ("".. Una declaración “if” es terminada por la palabra clave “end”. "x es mayor que 10"). es el mismo: (a + 1) < ((b/2) + 1) . También puede utilizar else y elseif para añadir más posibles retornos a la declaración if: x = 5. 22 En el ejemplo anterior. elseif x == 11 then Dialog.Message ( "". el segundo mensaje es el que se muestra. Las acciones seguirán como este bucle hasta que la condición se evalúa como falsa. "x es exactamente igual a 11"). el último mensaje de diálogo se muestra. o 11." la línea se llevará a cabo a 9 veces. if x == 10 then Dialog. x = 5. ya que x no es igual a 10.Message ( "".Message ( "". Cuando el "fin" se alcanza. Por ejemplo: contador = 1. while a < 10 do a = a + 1. end En este ejemplo. Usted puede salir de un bucle while en cualquier momento utilizando la palabra clave "break". "x es exactamente igual a12"). "x es exactamente igual a 10"). Al igual que la declaración “if”. While (Mientras) La declaración While se utiliza para ejecutar el mismo "bloque" del script una y otra vez hasta que se cumple una condición. el "a = a + 1. si es cierto. Por ejemplo: a = 1. la declaración “while” se finaliza con la palabra clave “end”. elseif x == 12 then Dialog. . ya que 5 no es superior a 10. 11 o 12"). Así es como funciona: Si la condición es verdadera. la condición será reevaluado y. while contador < 100 do contador = contador + 1. las acciones entre el "mientras" y el "fin" se llevarán a cabo de nuevo. o 12. "x no es igual a 10. else Dialog. end En el ejemplo anterior. todas las acciones entre el "mientras" y el correspondiente "fin" se llevarán a cabo. La sintaxis básica es la siguiente: while condición do hacer algo aquí end El resultado de la declaración while debe ser verdadero para que se ejecuten las acciones que se encuentran en el interior (el "hacer algo aquí" en la parte superior) para ser realizadas. La declaración while seguirá el bucle siempre cuando esta condición es verdadera.Message ( "". Por ejemplo: contador = 1. pero esta vez. For (Para) La declaración For es usado para repetir un bloque de script de un número específico de veces. La expresión "i = i + 1. La sintaxis básica es la siguiente: repeat hacer algo aquí until condición Por ejemplo: i = 1. end end Aunque la declaración while que está dispuesta a contar del 1 al 99. repeat i = i + 1. end until contador > 100 Una vez más. lo que provoca la salida del bucle es tan pronto como es evaluado que contador es igual a 50. La sintaxis básica es la siguiente: for variable = inicio. salvo que la condición se comprueba al final de la estructura en lugar de al principio. el bucle se realiza 10 veces. Repeat (Repita) La declaración Repeat es similar a la declaración while. if contador == 50 then break. repeat contador = contador + 1.23 if contador == 50 then break. la declaración if causa que este bucle termine tan pronto como llegue a contar con 50. steep do hacer algo aquí end . es ejecutado antes de que la condición determina que 1 es ahora mayor que 10. Usted puede salir de un bucle de repetición en cualquier momento utilizando la palabra clave "break". until i > 10 Esto es similar a uno de los anteriores bucles while. fin. 10 do Dialog.Message ("Número". 1.Message ("Número". existen dos formas de crear una tabla a partir de cero. 100 do if contar == 50 then break. También hay una variación en el bucle para que funcione en los cuadros. Por ejemplo: for i = 1. Se utiliza una variable. El primero utiliza llaves para especificar una lista de valores: . x). Cómo crear tables En general. el bucle sigue desde el principio. end Ese ejemplo se muestra 10 mensajes de diálogo en una fila. Usted puede salir de un bucle para en cualquier momento utilizando la palabras clave "break". end end Una vez más. Por ejemplo: . Tenga en cuenta que el paso es opcional. En otras palabras. contando del 1 al 10. con el valor que usted especifique y a continuación.24 La variable usada en la declaracion For puede llevar cualquier nombre. si no se declara un valor para el paso. end El ejemplo anterior muestra 10 mensajes de diálogo en una fila. Se pueden utilizar para almacenar cualquier tipo de valor. por defecto el valor sera1. Se inicia en el parámetro que va después del signo igual. contando a partir del 10 de vuelta y va todo el camino a 1. Tables (Arrays) | Tablas (Matrices) Las tablas o matrices son muy útiles. -1 do Dialog. el paso se añade al valor en la variable después de las líneas entre el final y se llevan a cabo. He aquí un ejemplo que utiliza el paso de un "-1" para hacer el bucle para contar hacia atrás: . Si el resultado es menor que o igual al valor final. incluidas las funciones o incluso otras tablas. los cambios en el importe en el paso después de cada viaje a través del bucle. lo que la salida del bucle tan pronto como fue igual a 50. x). o el que desee. en este caso “contador” para "contar" el número de vueltas que debe procesar el bucle for.Este bucle cuenta de 1 hasta 10: for x = 1.Este bucle cuenta a partir del 10 hasta 1: for x = 10. 255}. asociar_tabla = {}. vegetal ="zanahoria"} La segunda forma es crear un cuadro en blanco y. a continuación. que comienzan en el índice 1. Una Matriz es una colección de valores que están indexados por llaves numéricas. que sirve de índice en la tabla. t[1]). tercero ="tres"}.Message ("Elemento ‘primero’ contiene:". existen dos formas de acceder a un elemento: puede usar la notación matriz. t. miMatriz[1]). que son los cuadros donde las llaves son cadenas. Aquí está un ejemplo de Notación de Matriz: t = {"uno". asociar_tabla. segundo ="dos". "dos"." . Aquí está un ejemplo de Notación de Punto: t = {primero ="uno".0.vegetal = "zanahoria". "tres"}. La Notación de Punto se suele utilizar con arrays asociativos. que son simplemente el que todos los cuadros de las claves son los números. Cada "registro" de la información almacenada en una tabla es conocido como un elemento. Dialog. "melocotón"}. Esto mostrará un mensaje de diálogo que contiene el número "255. En el motor de scripting. las matrices numéricas son basadas en uno. La Notación de Matriz se suele utilizar con arrays numéricos.Message ("El elemento uno contiene:". y un valor que está asociado con esa clave. En general. Accediendo a los elementos de la Tabla. [1] = "manzana". asociar_tabla = {fruta ="manzana". o punto de notación. Es decir. agregar los valores uno a la vez: mi_tabla mi_tabla mi_tabla mi_tabla = {}.Message ("Primer Número". Dialog. [3] = "melocotón". asociar_tabla. He aquí algunos ejemplos numéricos utilizando matrices: Ejemplo 1: miMatriz ={255. Dialog.primero). Cada elemento consta de una clave. Arrays numéricos Uno de los usos más comunes de las tablas es como Matrices. [2] = "naranja".fruta = "manzana".25 mi_tabla = {"manzana". "naranja". "p". "f". "c". "Opción Dos". "Opción Tres"}. Dialog. Nombre". . Esto mostrará un mensaje de diálogo que contiene la letra "g" Ejemplo 3: miMatriz miMatriz miMatriz miMatriz = {}. "e". matNombres. "o". Sanabria ="Everth". Hitchcock = "Alfred"}. El mensaje de diálogo resultante se vería así: Aquí está un ejemplo de un simple empleado de la base de datos que realiza un seguimiento del empleado nombres y fechas de nacimiento indexados por número de empleados: Empleados = {}. "r".Message ("Díaz. "m". [1] = "Opción Uno". "t". salvo que los índices pueden ser números.Message ("Séptima Carta". [2] = "Opción Dos". "d". "i". Dialog. cadenas o incluso funciones. "l". alfabeto[7]). Este es exactamente el mismo que el texto siguiente: miMatriz = {"Opción Uno". Arreglos asociativos Arreglos asociativos son los mismos que los arreglos numéricos. "n". [3] = "Opción Tres". "k"."y"."z"}. --Construir una tabla vacía para el número de empleados -.Diaz). Lemus ="Edwin". "u". "w".Almacenando la información del empleado en su propio tabla. "v". "h". Paguada ="Henry". "j".26 Ejemplo 2: alfabeto = {"a". "b". "s". "x". "g". "q". Aquí está un ejemplo de una matriz asociativa que utiliza un apellido como un índice y un nombre como el valor: matNombres = {Diaz =”Henry”. Cumpleanos). "Dos".Ahora a escribir "Empleado [100099]" es lo mismo que escribir "Employee1" Dialog.valor in tabla do --operar en el índice y el valor end Por ejemplo: miTabla = {"Uno".Message ("Item del Arreglo". una para cada uno de los elementos en el arreglo miTabla. La sintaxis es la siguiente: for indice. k). "=" .Almacenando información de cada empleado de la tabla -. Cumpleanos ="21/08/82"}. así: . Empleado2 = {Nombre ="Everth Sanabria".En el número apropiado de la tabla Empleados Empleados[100099] = Empleado1.27 Empleado1 = {Nombre ="Henry Díaz". -.. "Tres"}.k in miTabla do Dialog. Empleados[137637] = Empleado2. Cumpleanos ="28/05/85"}.Mostrar un mensaje para cada elemento del array for j. -. j . Empleados[100099]. end El resultado sería de tres mensajes de diálogo en fila. -..Message ( "Cumpleaños". El mensaje de diálogo resultante se vería así: Uso de For para enumerar tablas Hay una versión especial de la declaración de que le permite rápida y fácilmente enumerar el contenido de una matriz. A diferencia de las variables. con el texto "Uno". Si sólo quieres los índices de una tabla. puede ser que usted intente algo como esto: . Si intenta copiar una tabla a otra utilizando el operador de asignación. si usted quería copiar una tabla y a continuación. "Dos". y no los datos reales. pero en una super-eficiente estructura conocida como una tabla hash. no puedes utilizar el operador de asignación para copiar el contenido de un cuadro a otro. te acaba copiando la dirección.) Lo importante a saber es que cuando se define los elementos de la tabla. puede dejar de lado la parte del valor de la declaración: a = {Uno=1. "Tres".Tres=3}. me confunde sobre tablas hash demasiado. que no necesariamente son almacenados en el orden que usted defina o agrege. y a continuación. una tabla indexada con los números del 1 al cualquiera que sea). k). (No te preocupes. por qué no son elementos de la tabla en orden? La razón de esto es que internamente el motor de scripting no almacena tablas como matrices. Copiando Tablas (Arrays) Copiar Tabla es un poco diferente de la copia de otros tipos de valores. Por ejemplo.Message("Índice de la Tabla". for k in a do Dialog. porque es una manera rápida y fácil de inspeccionar los valores en una tabla.Dos=2.28 Recuerde hacer la declaración encima. Esto se debe a que el nombre de una tabla en realidad se refiere a una dirección en la memoria donde los datos dentro de la tabla se almacenan. pues. final El script de arriba mostrará tres mensajes del array en una fila. Espera. modificar la copia. a menos que usted use una matriz numérica (es decir. tabla_dos. -.temperatura = "fría". sólo el lugar donde se encuentra. -. Cuando se crea tabla_uno.29 tabla_uno = {estado="Happy". una porción de memoria se reserva para almacenar su contenido. Usted no ha de entregar toda la biblioteca. La ubicación (o "dirección"). Dialog. temperatura es:". entregar ese documento a su amigo. Internamente. Si realmente quería copiar la biblioteca. tabla_uno.. temperatura es:". de esta memoria es lo que se asigna a la variable denominada tabla_uno.Crear una copia tabla_dos = tabla_uno. cambiar la "temperatura" del elemento en tabla_dos cambiado también en tabla_uno.temperatura).Message("Tabla 1. temperatura="Caliente"}.Message("Tabla 2..no la propia memoria. usted tendría que crear un nuevo . La asignación de tabla_uno a tabla_dos esta solo copia la dirección de memoria ..Modificar la copia tabla_dos. Es como escribir la dirección de una biblioteca en un pedazo de papel y. usted vera los dos siguientes diálogos: Espera un minuto. el nombre de una tabla sólo hace referencia a una ubicación de memoria.temperatura). a continuación. ¿Por qué cambio tanto? La respuesta es simplemente porque los dos son. la misma tabla.. más estantes de libros y de todos. Si ejecutó este script. en realidad. Dialog. temperatura). temperatura="Caliente"}. -. Con el fin de crear una copia completa de una tabla. for indice. tabla_uno. Afortunadamente.temperatura = "Fría".30 edificio.Modificar la copia tabla_dos. end -.Crear una copia tabla_dos = {}. Dialog. guardar las fotocopias en la nueva ubicación.Message ( "Tabla 1. temperatura es:". aquí una versión modificada de nuestro ejemplo anterior. la eliminación de elementos de una tabla. todos los contenidos y. fotocopia individualmente cada uno de los libros y. los diálogos muestran que la modificación de tabla_dos no afecta a todos los tabla_uno: Funciones Table (Tabla) Hay una serie de funciones Table (Tabla) incorporadas a su disposición. Dialog. también. Esta vez. Por ejemplo. valor in tabla_uno do tabla_dos[indice] =valor. tabla_dos. temperatura es:". para la declaración hace muy fácil de hacer.Message ( "Tabla 2. y contando el número de elementos en una tabla. Para obtener más información sobre estas . lo que necesitas para crear una nueva tabla y luego copiar todos los elementos. tabla_uno = {estado="Feliz".temperatura). que crea una "verdadera" copia de tabla_uno. que puede utilizar para hacer cosas tales como la inserción de elementos en una tabla. a continuación. Eso es más o menos cómo es con tablas. un elemento a la vez. Esto significa que si . function HolaMundo () Dialog. Los argumentos son los parámetros (o valores) que se pasan a la función cada vez que se llama." Las Funciones son simplemente trozos de script que puede definir. Esto trae a colación un punto importante acerca de secuencias de comandos en AutoPlay Media Studio. No tiene ningún argumento y no devuelve nada. "Hola Mundo"). En general. end Observe que si usted escribe en un evento la función y ejecuta la vista previa de su aplicación. La palabra clave “return” le dice a la función que debe de volver uno o más valores al trozo de código (script) que lo llamó. Una función puede recibir cualquier número de argumentos de 0 a infinito (bueno. pero no se técnicamente cuantos). Usted ya ha visto una gran funciones utilizadas a lo largo de este documento. no pasa nada. Bueno. El nombre_de_funcion es simplemente un nombre único para su función. end La primera parte es la palabra clave "function".31 funciones de tabla. no infinito. eso es cierto y no es cierto. "Dialog. Esto le dice al motor de scripting que lo que sigue es la definición de una función. La forma más sencilla de aprender acerca de las funciones es trabajar en algunos ejemplos. En este primer ejemplo. cualquier otro lugar.Message ( "Bienvenido". por favor.Message. también puede hacer sus propias funciones personalizadas que se adapte a sus necesidades específicas. Cuando el evento se disparó y el script de la función se ejecuta. Esto significa que está ahora disponible para el resto de la aplicación y atender la solicitud en cualquier otro script. Funciones Una de las principales y más poderosas de las características scripting son las funciones. Es cierto que nada de lo que ocurre visible. del motor de cantidad de tales como código en el llamar desde A pesar de que hay un montón de funciones incorpordas en AutoPlay. la función llamada "HolaMundo" se convierte en parte del motor de scripting. darle un nombre y a continuación. Al realizar una función. véase el Programa de Referencia / Acciones / Tabla en la ayuda en línea. la función no se "interpreta" en el motor hasta que el script se ejecuta. las funciones se definen de la siguiente manera: function nombre_de_funcion (argumentos) codigo de la funcion aquí return valor_retorno. vamos a hacer una simple función que muestra un cuadro de mensaje. pero la magia está en lo que no se ve. en general. "Mensaje" es una variable que recibirá automáticamente cualquier argumento pasado a la función. debe ver un mensaje de bienvenida con el texto "Hola Mundo" en ella. Vamos a añadir una línea a la realidad. Esta vez.) Ahora. "Este es argumento dos"). de regreso a las buenas cosas.Message ( "Bienvenido". Aquí está un ejemplo de la utilización de múltiples argumentos. Es decir. final HolaMundo(). Mensaje). es mejor definir sus funciones globales en el script global del proyecto. function HolaMundo(Titulo. Ahora el cuadro de mensaje muestra el texto que fue "pasado" a la función." Cuando esa línea es ejecutada. (Para acceder al script. pero este evento nunca es invocado (porque el usuario no haga clic en el botón). Es por ello que. Mensaje). "Hola"). llamar a la función: function HolaMundo() Dialog. En la llamada a la función. end HolaMundo("Este es argumento uno". Mensaje) Dialog. function HolaMundo(Mensaje) Dialog.Message(Titulo. La linea "HolaMundo(). Argumentos de una Función Vamos a aprovechar esto un poco más y decirle al cuadro de mensaje. que el texto para mostrar sera mediante la adición de un argumento a la función. seleccione Proyecto> Global Functions en el menú. no se le puede llamar desde cualquier otro lugar." le dice al motor de scrpting "ir a realizar la función llamada HolaMundo. una para cada uno . la función HolaMundo() nunca existira. "Hola Mundo"). pasamos la cadena "Este es un argumento" como el primer (y único) argumento para la función de HolaMundo.Message ("Bienvenido". HolaMundo("Bienvenido". En la definición de la función. end HolaMundo("Este es un argumento"). la definición de la función utiliza dos variables.32 defines HolaMundo() en el evento On Click de un boton. Tenga en cuenta que cambiando el contenido de esas cadenas.n do -. agregue una coma y un espacio para separar los números un poco en la cadena de retorno if (num ~= n) then CadenaRetorno = CadenaRetorno.. ". Valores de Retorno El siguiente paso es hacer la función de valores de retorno de vuelta al ser llamada por el script. for num = 1. end CadenaContador = Contador(10). devuelve una cadena que contenga todos los números de uno a ese número. pasa dos cadenas a la función HolaMundo. -.Devolver la cadena que hemos construido return CadenaRetorno. como por ejemplo: function NumerosCortos(Numero1. Numero2) if Numero1 <= Numero2 then return Numero1. a continuación. Múltiples valores de Retorno Puede devolver múltiples valores en funciones. Dialog. Aquí esta una función que acepta un número como su único argumento y a continuación.Agregar el número actual (NUM) a la final de la cadena de retorno CadenaRetorno = CadenaRetorno. muestra el contenido de esa variable en un diálogo cuadro de mensaje. CadenaContador). y cada llamada a la función.. y lograr resultados diferentes. Numero1 . function Contador(n) -. Las dos últimas líneas del script de arriba utilizan la función Contador para construir una cadena a partir de 1 a 10. Numero2 else return Numero2.Si este no es el último número.Message ( "Contador"..33 de sus dos argumentos. puede enviar diferentes argumentos a la función.".Se empezará a cabo con una cadena de retorno en blanco CadenaRetorno = "".num. lo almacena en una variable llamada CadenaContador y a continuación.. end end -. SegNum). end function HolaLuna() Dialog. Esto es importante porque le permite asegurarse de que su única funciones y nombres son lógicamente agrupados.Message("Mensaje". El primer valor devuelto es el número más pequeño. y el segundo valor devuelto es el más grande. end -. end function HolaMundo() Dialog.34 end end PriNum. SegNum = NumerosCortos(102. (Así es como todas las funciones de AutoPlay Media Studio son implementadas. El script de arriba crea una función llamada NumerosCortos que toma dos argumentos y devuelve dos valores. "." y no "Hola Mundo". así como otros valores.Message ("Mensaje". El script de arriba muestra un cuadro de mensaje que dice "Hola Tierra. Redefinición de funciones Otra cosa interesante acerca de las funciones es que se puede anular una definición de función anterior simplemente por volver a definirla. Dialog. "Hola Tierra")..Realizar las funciones: function HolaTierra() Dialog. PriNum . 100).Message ("Mensaje"..".Definir una tabla vacía: Hola = {}. Tenga en cuenta que se especifican dos variables para recibir los valores de retorno de la función llamada en la segunda última línea. "Hola Tierra"). Poner funciones en las Tablas Una cosa muy poderosa acerca de las tablas es que pueden ser utilizados para celebrar funciones. end HolaMundo(). . function HolaMundo() Dialog. La última línea del script muestra los dos números en el orden en que fueron ordenados por la función. "Hola Mundo").Message("Mensaje". "Hola Luna").) Aquí está un ejemplo: -. Esto se debe a que la segunda versión de la HolaMundo() función anula la primera.Message("Clasificación". -. Por ejemplo.). Por ejemplo: NombreCompleto = "Díaz". Tenga en cuenta que usted puede poner espacios a ambos lados de los puntos. ." Henry". usuario. -.. "Hola Tierra") end." días en un año". "Hola Luna") end }.Tiene la palabra las funciones: Hola. CadenaAño = "Hay ". Manipulación de cadenas En esta sección vamos a cubrir brevemente algunas de las más comunes técnicas de manipulación de cadenas.. las siguientes cuatro líneas logran la misma cosa: foo = "Hola " . También es interesante notar que puede definir funciones de derechas en su definición de tabla: Hola = { Tierra = function() Dialog...Luna = HolaLuna.. usuario. (Para obtener más información sobre las funciones de cadena que tiene a su disposición en AutoPlay Media Studio. o por un lado.Tierra (). El operador de concatenación de cadenas es de dos períodos en una fila (.Moon ().Tierra = HolaTierra. véase el Programa de Referencia / Acciones / cadena en la ayuda en línea.Luna ().También puede concatenar números en cadenas.) Concatenar cadenas Ya hemos cubierto la concatenación de cadenas.Message("Mensaje".. pero esta así vale la pena repetir. Hola. o no poner ningún espacio en absoluto.DiasDelAño.NombreCompleto es ahora "Díaz Henry" -. Hola. Luna = function() Dialog.Message("Mensaje". DiasDelAño = 365. foo = "Hola ". como la concatenación de cadenas y comparaciones.Earth (). -.35 -. Hello.Asignar las funciones a la tabla: Hola.Ahora llamamos las funciones: Hello. Dependiendo de lo que constituye un "match".Upper o String.Message("¿Adivina qué?". el script de arriba mostrará un cuadro de mensaje que proclama que las dos cadenas son iguales.").Upper(strUno) == String. strDos = "Guatemala". if strUno == strDos then Dialog. "Las dos cadenas son diferentes.Upper(strDos) then Dialog. Tenga en cuenta que no importa la función que utiliza en su comparación. esta puede ser muy simple.usuario.Lower devuelve toda la cadena en minúsculas. "Las dos cadenas son diferentes.Message("¿Adivina qué?". Si desea realizar una distinción entre mayúsculas y minúsculas comparación.. una de las cosas más comunes que se quiere hacer con las cadenas es comparar una cadena a otra. Por ejemplo: strUno = "Guatemala". "Las dos cadenas son iguales!").Message("Hmmm".36 foo = "Hola " .Upper devuelve todo en mayúsculas de la cadena que se da. entonces usted necesita tomar ventaja de cualquiera de las funciones String. end En el ejemplo anterior. end Dado que el operador == realiza una distinción entre mayúsculas y minúsculas comparación cuando se aplica a cadenas de texto. a fin de asegurar que ambas cadenas tienen el mismo caso antes de compararlos.Lower. strDos = "Guatemala". la declaración if .usuario.Upper convierte strUno a "GUATEMALA" y strDos a "GUATEMALA" y a continuación. foo = "Hola ".. o simplemente un poco difícil. Si desea realizar una comparación entre mayúsculas y minúsculas. y la función String. else Dialog. La función String.Message("Hmmm"."). siempre y cuando se utiliza la misma función en ambos lados del operador == en su declaración if. Por ejemplo: strUno = "GUatEmaLa". entonces todo lo que tienes que hacer es utilizar el operador igual (==). Comparación de Cadenas Junto a la concatenación. la función String. if String. else Dialog. "Las dos cadenas son iguales!"). Búsqueda de strBuscarEn dentro strBuscarPara nEncuentraPos = String.um. -. end .."\"". nEncuentraPos). Basta con utilizar la función String.Find (strBuscarEn.Encontré! Dialog.Message("Resultados de la búsqueda".. " caracteres!").. Por ejemplo: strBuscarEn = "¿No es un día maravilloso fuera?". no importa lo que en las cadenas originales tenían...... núm_caracteres ..Message ( "Cuanto mide el Trabalengua". else -. podría causar el siguiente mensaje que se mostrará: . se puede contar el número de caracteres que contiene. podría plato de madera. que se produce el siguiente cuadro de diálogo mensaje: Buscar cadenas Otra cosa que usted quiere hacer con las cadenas es buscar una cadena dentro de otra.Message("Resultados de la búsqueda". ¿cuánto sería. Dialog.. " no se ha encontrado!"). strBuscarPara = "maravillo".Find..Mala suerte Dialog. . strBuscarPara . Esto es muy simple al hacer uso de la función String."."\"". strBuscarPara . num_caracteres = String.37 compara los resultados. " se encuentra en la posición " .) De esta forma. if nEncuentraPos ~= nil then -. así: trabalenguas = "Si un plato de madera...Length.. todo lo que importa es si las letras son las mismas. strBuscarPara).Length (trabalenguas). Contar caracteres Si alguna vez ha querido saber cuán larga es una cadena. (Nota: las dos cadenas originales siguen siendo lo mismo. Message("Después de buscar y reemplazar". El siguiente ejemplo muestra cómo puede utilizar la acción String. "").Message("Después de remover los espacios:". strBuscarPara = "mejor". Reemplazar en Cadenas Una de las cosas más poderosas que usted puede hacer con las cadenas es llevar a cabo una operación para búsqueda y reemplazo sobre ellas. El ejemplo anterior se muestra la siguiente dos mensajes: Extracción en Cadenas Hay tres funciones de cadena que le permiten "extraer" una parte de una cadena. Estas funciones son String. y String.38 Consejo: Trate de experimentar con diferentes valores para strBuscarPara y strBuscarEn. strReemplazarCon). Dialog.Mid.Replace(strContiene.Replace para sustituir a cada ocurrencia de una cadena con otro objetivo dentro de una cadena. .Replace(strContiene. en lugar de copiar toda la cadena de sí mismo. strNoEspacios = String. String. strNuevaCadena = String. " ". strContiene = "Lua el mejor.Crear una copia de la cadena sin espacios en esta. strBuscarPara. strNuevaCadena). strNoEspacios). Dialog. strReemplazarCon = "Profesional". Dentro de los lenguajes script!".Left.Right. -. 39 String.. -. "re" . este valor es en realidad una cadena compuesta de los caracteres "3" y "1". "\n" .".Copia la palabra "bueno" en strCualquiera. 14.Left copias un número de caracteres desde el comienzo de la cadena. 20). "\n" . Por ejemplo. String.Right hace lo mismo. strDerecha . --Mostramos los resultados en un cuadro de mensaje. "\n" . strCualquiera = String. "te...Copia los últimos 18 caracteres en strDerecha.. strCualquiera).. -. y leer el texto que escribió. strDerecha = String. Puede utilizar estas funciones para llevar a cabo todo tipo de operaciones avanzadas en cadenas. sin embargo. si usted tiene un campo de entrada donde el usuario puede entrar en su edad. strClon . Dialog.. El ejemplo anterior muestra el siguiente cuadro de mensaje: Conversión de cadenas numéricas en números Puede haber ocasiones en las que tienen una cadena numérica.Copia las primeras 13 caracteres en strIzquierda.Mid(strOriginal. He aquí un ejemplo básico que muestra cómo funcionan: strOriginal = "Es realmente bueno verte de nuevo" -. strOriginal .. strIzquierda . strDerecha . "\n" .Crear una nueva cadena con los dos pedazos. Debido a que en el escrito.Left (strOriginal. -.Message("Extraer en Cadenas". strClon = strIzquierda . strIzquierda = String. 6).. pero contando desde el extremo derecho del lugar de la cadena. String.Right (strOriginal. 13).Mid le permite copiar un número de caracteres a partir de cualquier posición en la cadena.. y que usted necesita para convertir a un número. puede obtener un valor como "31". ... No tiene manera de saber si quería tratar de edad como un número o el tratamiento de 18 años como una cadena."). el siguiente script: edad = "31". porque el motor de scripting entiende que la única forma en que la declaración tiene sentido. if String. si usted realiza una operación aritmética (por ejemplo. La función String.. La solución es simplemente convertir el valor de la variable “edad” a un número antes de comparar. el motor convierte automáticamente cualquier cadena numérica en números para usted: edad = "26" + 5. edad = "31".ToNumber traduce una cadena numérica en el número equivalente. "Eres mayor de 18 años.40 Si se trató de comparar este valor con un número."). Hay dos maneras de hacer esto. end ..Message("".ToNumber. y no un número. si se . Una forma es utilizar la función String. El motor de script no le permite comparar los números con las cadenas de esta manera.Message("". por lo que se puede utilizar en una comparación numérica. usted obtendría un error de sintaxis que sí se trató de comparar un número con una cadena. Por ejemplo. "Eres mayores de 18 años.ToNumber(edad) > 18 then Dialog. se produce el siguiente mensaje de error: El problema en este caso es la línea que compara el contenido de la variable "edad" con el número 18: if edad > 18 then Esto genera un error porque la edad contiene una cadena. end La otra forma de aprovecha el motor de scripting en la capacidad para convertir números en cadenas cuando se sabe lo que son sus intenciones. --El resultado es un valor numérico El ejemplo anterior no generar ningún error. if edad > 18 then Dialog. la adición de dos números). Por ejemplo. No más error. simplemente por la adición de 0 a él. . El contenido del archivo será ejecutado como si fuera escrito directamente en el area de scripting. "Mundo"). de este modo: edad = "31".Message("Hola". podemos convertir una cadena numérica a un número sin cambiar su valor."\\AutoPlay\\Scripts\\MiScript. Otras Funciones Pre-Construidas incorporadas Script de Funciones Hay otras tres funciones incorporadas que puedan resultar de utilidad: dofile. creado con el Bloc de notas u otro editor de texto): Dialog. Como resultado de ello..Message("". y type. Ahora. y a continuación el resultado es comparado con 18. pero en un evento: dofile (_SourceFolder. Por ejemplo. al agregar cero a la variable. (Esto copia el archivo en la carpeta del proyecto llamada “Scripts”. La sintaxis es la siguiente: dofile(direxion_archivo). Vamos a explicar los requisitos declaración más tarde. end En el ejemplo anterior. "Eres mayor de 18 años.lua (sólo un archivo de texto que contiene este script. Sabiendo esto. Ahora arrastrar y soltar el archivo en la carpeta principal de AutoPlay Media Studio. dofile Carga y ejecuta un archivo de script. usted vería un cuadro de mensaje con el titulo "Hola” y el mensaje “Mundo". este archivo de script será leído y ejecutado de inmediato. escriba el siguiente script en un archivo llamado miScript. el motor convierte automáticamente la cadena numérica a un número para que pueda realizar el cálculo. le pide al motor para convertir el valor a un número.. En este caso. if (edad + 0) > 18 then Dialog.41 pretende utilizar la cadena numérica..) Aparecerá un diálogo que le preguntará si queremos añadir nuestro script. añada dondequiera la siguiente línea de script. es como un número. . Haga clic en "No" por ahora. require.").lua"). Después de eso. Los valores validos de retorno son "nil".es el mismo: require(_SourceFolder. type Esta función le dirá el tipo de valor que figura en una variable. Dado que las variables y funciones son globales por defecto. por ejemplo.lua debe estar en la carpeta Scripts de su proyecto. el motor de scripting sabe que el archivo ha sido cargado y luego ejecutado. -.lua"). Es similar a dofile la salvedad de que sólo se carga un archivo de una vez por período de sesiones. que ni siquiera tiene que proporcionar una ruta completa al archivo. . y el archivo en realidad sólo se carga la primera vez que se necesita.lua"). "boolean". "table" o "function".. Por ejemplo: require("MiScript. Tenga en cuenta que el archivo ..lua"). que es el más adecuado para la carga de scripts que contienen sólo las variables y funciones. Así.. require("foo. Esto hace que la función requiera una buena forma de cargar script de bibliotecas externas. incluso si requiere hacer dos en una fila: require("foo. y las futuras convocatorias para exigir el archivo. Cada script que necesita una función de un archivo externo puede exigir condiciones de seguridad con require(). Dado que sólo requieren una determinada carga de archivo de script una vez por período de sesiones.sólo el primero de ellos se ejecuta. La sintaxis es la siguiente: require(direxion_archivo).lua"). "string"."\\AutoPlay\\Scripts\\MiScript. sólo tendrá que "cargar" una vez. Esta devuelve una cadena con el nombre del tipo de variable.. "number". no tendrá ningún efecto. Por ejemplo: .esta línea no hace nada ..42 Sugerencia: Utilice la función dofile para salvarse de tener que volver a escribir o volver a pegar un script en sus proyectos una y otra vez. en repetidas ocasiones la carga de la misma definición de función termina en una pérdida de tiempo. require Carga y ejecuta un archivo de script en el motor de scripting. mientras que dofile volverá a la carga y volver a ejecutar el archivo cada vez que se utiliza. el término "funciones" se prefiere. estas funciones incorporadas son comúnmente denominadas acciones. así como cubrir una serie de técnicas de depuración. "Por favor. lea esta sección de consejos sobre el uso inteligentemente y eficazmente de AutoPlay Media Studio como sea posible! En esta sección se explicará los métodos de manipulación de errores de AutoPlay Media Studio. Ser bueno en la depuración de scripts reducirá el tiempo de salida al mercado para sus proyectos y aumentar la cantidad de sueño que podemos encontrar en la noche. Por favor. En la interfaz del programa. else return Num2. La depuración de sus Scripts Scripting (o cualquier tipo de programación) es relativamente fácil una vez que te acostumbras a ella. el siguiente script usa la función type() para asegurarse de que sus dos argumentos son números: -. -. introduzca un número"). . return nil –.43 a = 989. y necesita proteger de errores ocasionales a su código. strTipo = type(a). Sin embargo.establece strType a la "cadena" El tipo de función es especialmente útil al escribir sus propias funciones que necesitan determinados tipos de datos para operar. sin embargo. incluso los mejores programadores pueden cometer errores. end end end Acciones AutoPlay Media Studio viene con un gran número de funciones incorporadas. --establece strType a "número" a = "Hola".Asegúrese de que ambos argumentos son numéricos if (type(Num1) ~= "número") or (type(Num2) ~= "número") then Dialog. Num2) -.Indica que estamos usando valores nulos. el término "acciones" es generalmente reservado para las funciones que se construyen en el programa y se incluyen en la lista por orden alfabético de las acciones en la ayuda en línea. Para efectos de scripting.Message("Error".Encontrar el máximo de dos números function Max(Num1. strTipo = type(a). Por ejemplo. acciones y funciones son esencialmente los mismos. Al referirse a las funciones que han sido creados por otros usuarios o usted mismo. else if Num1 >= Num2 then return Num1. considere el siguiente script: foo = Esto es incorrecto porque no hemos asignado nada a la variable foo -el script esta incompleto. abierto y cerrado partido entre paréntesis. módulo. debido a que no hay evidentes errores de sintaxis en el script. Esto es bastante obvio un error de sintaxis. y así manipulados. los errores y funcional. Existen dos tipos de errores que puede tener en sus escrituras cuando se llama a las acciones de AutoPlay Media Studio: errores de sintaxis. si usted intenta ejecutar este script: Dialog. o scripts.. usted siempre debe consultar a un scripts o autor de modulo o la documentación con el fin de averiguar cómo es el manejo de errores. la llamada a la función está bien formada. Por ejemplo. las comillas están en los lugares correctos. incluso scripts desarrollados por Indigo Rose Corporation que no están construidas en el producto. Por lo tanto.44 Manipulación de Errores Todas las acciones incorpordas de AutoPlay Media Studio utilizan las mismas técnicas de manipulación de errores. o una función recibe argumentos que no son apropiadas. En lo que respecta al motor de scripting puede decir. Por ejemplo. Parece bueno! Sin embargo.el proyecto mientras se compila será multado. El nombre es válido. Sin embargo. esto no es necesariamente cierto en el caso de cualquier función.Message("Hola"). Otro tipo de error de sintaxis es cuando no se pase el tipo o el número de argumentos a una función. Algunos errores de sintaxis son capturados por AutoPlay Media Studio cuando usted compile o de vista previa de su aplicación. . puede que no necesariamente deba hacerlo. y sería capturado por el motor de script en tiempo de ejecución (cuando compile y ejecute el proyecto). en tiempo de ejecución es que se vea algo como lo siguiente: . y hay incluso poner fin a una punto y coma al final. Aunque estos scripts desarrollados externamente pueden hacer uso de AutoPlay y manipular errores del sistema.. Errores de sintaxis Los errores de sintaxis se producen cuando la sintaxis (o "gramática") de un script es incorrecta. el siguiente código intenta eliminar una carpeta llamada C:\Mi carpeta Temp: Folder. Usted sólo quiere asegurarse de que si esa carpeta existe. Afortunadamente. Para hacer un largo cuento. por lo que es fácil para usted para localizar e identificar el problema. como la ruta de acceso a un archivo que no existe.Message con cualquier del 2do. Sin embargo.Delete causa un error funcional.45 Parece que no era tan bueno después de todo. Ah. Los mensajes de error suelen ser muy claro. tales errores funcionales. Ellos se producen cuando a una acción se da información incorrecta. Si la carpeta no existe. está bien llamar a la acción Dialog. el siguiente código producirá un error funcional: filecontents = TextFile. De hecho. pero 1 argumento no es suficiente. la acción Folder.. algo corto.Message. puede que se espera. vemos que los tres últimos argumentos tienen valores por defecto que se utilizará si los argumentos se omiten en la llamada a la función.Message. errores de sintaxis como estas son suelen ser capturados en el tiempo de ejecución o de prueba de su aplicación. parece que la función puede aceptar hasta cinco argumentos: Mirando de cerca la función prototipo. De acuerdo a la función prototipo de Dialog. Tenga en cuenta que el mensaje dice que dos argumentos son necesarios para la función Dialog. o si la carpeta no existe en primer lugar. Errores funcionales Los errores funcionales son aquellos que se producen debido a la funcionalidad si la acción propia falla. Nuestro script sólo tiene un argumento. verá que nada parece suceder. Por ejemplo. será eliminado. Por ejemplo. porque no puede encontrar la .Delete("C:\\Mi carpeta Temp").. La razón de esto es que puede haber momentos en que no le importa si una función falla. en este caso no le importa si realmente se elimina. Los dos primeros argumentos el título (Title) y el texto (Text) -no tienen valores por defecto. Esto se debe a que en AutoPlay Media Studio los errores funcionales no se muestran automáticamente como se muestran los errores de sintaxis.ReadToString("this_file_don't exist. Dejamos a ustedes para manejar (o a no manejar). por lo que no puede ser omitido sin generar un error. al 5to. Si pone este script en un evento ahora mismo y lo prueba. argumentos.txt"). Exit (). no es necesario a hacer nada al respecto. Aquí un ejemplo que utiliza esta acción: File. En este caso. Esto no es necesariamente la manera en que todos . este valor se establece en 0 (el número cero).Algún tipo de error ha ocurrido! Dialog.GetLastError ().. En esta sección se verá una serie de ellas. La sintaxis es la siguiente: ultimo_codigo_error=Application. En tiempo de ejecución siempre hay un valor interno que almacena el estado de la última acción que fue ejecutada. "Error al copiar archivo:". Y desde luego no queremos que el usuario vea los mensajes de error.GetLastError. Aquí es donde las acciones de depuración entran en escena. Si. "C:\\Temp\\Mi Archivo."C:\\Temp\\Mi Archivo.46 carpeta que le dijo que eliminara. end El script de arriba informará al usuario que se ha producido un error y luego saldrá de la aplicación. codigo_error = Application. usted desea copiar un archivo muy importante: File. A este último valor de error se puede acceder en cualquier momento utilizando la acción Application. Esto significa que todo está bien.GetLastError Esta es la acción más importante a utilizar cuando se trata de averiguar si un problema se ha producido.. Application.dat".GetLastError(). En el inicio de una acción.dat". usted realmente quiere saber si falla y pueden querer incluso salir del programa o informar al usuario.bak"). el valor se cambia a algunos no cero.Copy("C:\\Temp\\Mi Archivo. puede haber ocasiones en las que es muy importante para usted saber si una acción falla.Message("Error".Copy("C:\\Temp\\Mi Archivo. if (codigo_error ~= 0) then -. por ejemplo. Las acciones de depuración AutoPlay Media Studio viene con algunas funciones muy útiles para depurar sus aplicaciones.codigo_error). Application. pero ya que el resultado final es exactamente lo que quería. Si un error se produce funcional dentro de la acción.bak").. Por el contrario. Exit ().Copy("C:\\Temp\\Mi Archivo. Por ejemplo. usted está de suerte! En tiempo de ejecución existe una tabla llamada _tblErrorMessages que contiene todos los posibles mensajes de error. _tblErrorMessages[codigo_error]). gracias al número de error como "1182". "C:\\Temp\\Mi Archivo.GetLastError(). la siguiente secuencia de comandos no produce un mensaje de error: File. indexado por los códigos de error.dat".Message("Error". . Por ejemplo. Usted puede hacer lo que quieras cuando se produce un error. aquí hay un script modificado para mostrar la cadena de error: File. Imagine al usuario ver un mensaje como este: Sería mucho mejor que en realidad se ofrezca información al usuario sobre el problema exacto. Usted puede utilizar fácilmente el último número de error para obtener un mensaje de error que dará más sentido para el usuario.Algún tipo de error ha ocurrido! Dialog.. "Error al copiar archivo:\n" . end Ahora la ejecución produce el siguiente mensaje de error: Mucha y mejor información! Sólo recuerde que el valor del último error se restablece cada vez que una acción es ejecutada. pero ilustra el punto.dat". if (codigo_error ~= 0) then -. Application. Bueno.47 los errores deben ser manejados. El script de arriba tiene un posible problema.bak"). codigo_error = Application. al igual que se pide una función diferente o cualquier cosa que usted puede soñar.Copy("C:\\Temp\\Mi Archivo. ShowWindow AutoPlay Media Studio en tiempo de ejecución tiene la capacidad de mostrar una ventana de depuración que se pueden utilizar para mostrar mensajes de depuración..Message restablecer el último número de error a 0. pruebe el siguiente script: Debug.Print Esta acción imprime el texto de su elección en la ventana de depuración. .48 "C:\\Temp\\Mi Archivo. Si es verdadero.. Esta ventana existe en toda la ejecución de su solicitud..Message("Error".Algún tipo de error ha ocurrido! Dialog. codigo_error = Application. ahora el último número de error se toma de la acción Dialog. pero nada más llega realmente a suceder. Si llama a este script. "Hola Mundo"). if (codigo_error ~= 0) then -. for i = 1.Message. pero. si es falsa. Por ejemplo. end Debug. la ventana de depuración se muestra. Application. Ahí es donde las siguientes acciones de depuración entran en escena.ShowWindow(true).GetLastError() podría ser no cero. -. la ventana de depuración aparecerá en la parte superior de su aplicación. y las siguientes líneas de captura no cualquier Error que ocurrió en la acción File. _tblErrorMessages [codigo_error]).Copy. "Error al copiar archivo:". 10 do . Por ejemplo: -. -----Vaya. y no de la acción File.Copy.GetLastError().ShowWindow(true).Exit (). Dialog.Message("Hola". pero sólo es visible cuando usted le dice que sea.bak")...Mostrar la ventana de depuración Debug.En este punto Application. la ventana se oculta. La sintaxis es la siguiente: Debug. La acción Dialog.donde show_window es un valor booleano. Debug.ShowWindow(show_window). GetLastError() si la línea implica llamar a una acción incorporda. incluyendo el valor de Application.SetTraceMode: Debug.SetTraceMode(turn_on). Aquí está un ejemplo: Debug.. Usted puede rastrear a su vez. .Print("i = " .SetTraceMode AutoPlay Media Studio puede ejecutar un modo especial de "rastrear" en tiempo de ejecución que se imprimirá la información sobre cada línea del script que es ejecutado a la ventana de depuración... Pueden ser muy valiosos cuando se trata de depurar sus scripts o su más reciente prueba de algoritmo.) Usted puede usar \r\n en la ventana de depuración cada vez que desee insertar una nueva línea. El script de arriba producirá la siguiente salida en la ventana de depuración: Puede utilizar este método para imprimir todo tipo de información en la ventana de depuración. end El "\r\n" es en realidad dos secuencias de escape que se utilizan para iniciar una nueva línea.49 Debug. Debug. i .donde turn_on es un valor booleano que indica si el programa a su vez. este modo de encendido o apagado mediante el uso de la acción Debug. Algunos usos son típicos para imprimir el contenido de una variable para que puedas ver lo que contiene en tiempo de ejecución. o para imprimir sus propios mensajes de depuración como "dentro de exterior para bucle" o "iniciar la función foo(). traza el modo de encendido o apagado. "\r\n")..ShowWindow(true). . (Esto es técnicamente llamado "retorno de carro/nueva línea" par." Estos mensajes forman un sendero como migas de pan que se puede rastrear con el fin de entender lo que está sucediendo detrás de las escenas en su proyecto. De hecho. En la sección Vista Preliminar (Preview). incluso con esta opción habilitada. end File. (Seleccione Herramientas (Tools)>Preferencias (Preferences) y haga clic en la categoría Construir (Build). Debug.ext".Copy("C:\\fake_file. hay una opción en AutoPlay Media Studio compilar preferencias que le permite activar automáticamente el modo de rastreo cada vez que se de la vista previa. for i = 1. a menos que usted lo especifiqué a su vez que en su secuencia de comandos (script). a su vez activar la opción llamada "Mostrar ventana de depuración. El número después de la "Trace:" es el número de línea que está siendo ejecutado en el script.Print.GetEventContext Esta acción se utiliza para obtener una cadena descriptiva sobre el evento que está siendo ejecutado.SetTraceMode(true).bak"). Volviendo sobre el modo de rastrear es algo que usted probablemente no quiere hacer en su final.") Sin embargo. 3 do Dialog. La ejecución de este script produce la siguiente salida en la ventana de depuración: Observe que cada línea producida por la función de rastreo se inicia con el modo de "Trace:" Esto es lo que les puedo decir aparte de todas las líneas que va a enviar la ventana de depuración con Debug. traza el modo de no ser activada en la versión que se construyó cuando publique su proyecto.50 Debug. Esto puede ser útil si se define una función en . "C:\\fake_file. i).Message ( "Número ". a distribuir la aplicación. pero puede realmente ayudar a encontrar problemas durante el desarrollo. y por una buena razón. simplemente haga clic en la acción y pulse la tecla F1 en su teclado. y que desea estar en condiciones de decir que la función se llama desde en un momento dado. Puede acceder al archivo de ayuda en cualquier momento seleccionando Ayuda> Ayuda de AutoPlay Media Studio.. .Message("Contexto del evento". Consideraciones finales Esperemos que este documento ha ayudado a comprender la programación de scripting en AutoPlay Media Studio. . y para el entorno de diseño propio. Esta es una gran acción de utilizar a lo largo de su código cuando se está tratando de localizar un problema. Debug. Ustedes han visto esta acción utiliza en este documento. Guía del usuario La guía del usuario es una fantástica manera de empezar con AutoPlay Media Studio. si se ejecuta este script de un botón en el evento Click sobre Página1: Dialog. Otro consejo útil: si se encuentra en el Editor de secuencias de comandos y desea obtener más información acerca de una acción.Message. Por ejemplo. Una vez que se cuelgue de la misma. Está escrito en una forma fácil de seguir formato de tutorial.51 un solo lugar. es una muy divertida y potente forma de hacer las cosas.Message Esto nos lleva a una buena ole' Dialog. verás algo como esto: Dialog.GetEventContext()). Archivos de ayuda El archivo de ayuda de AutoPlay Media Studio está lleno de buenos materiales de referencia para todos los eventos y acciones apoyadas por AutoPlay Media Studio. Otros recursos Aquí está una lista de otros lugares que usted puede acudir para obtener ayuda con scripting en AutoPlay Media Studio. pero lo llaman en algún otro lugar.. en el menú Ayuda. . Sólo las funciones enumeradas en la ayuda en línea cuentan con el apoyo de Indigo Rose Software. Sitio Web de AutoPlay Media Studio El sitio web de AutoPlay Media Studio se encuentra en http://www.lua.com. están documentadas en el Lua 5.52 le enseña acerca de los eventos. Una manera rápida de acceder a los foros en línea es elegir Ayuda> Foros de usuarios de AutoPlay Media Studio en el menú Ayuda. no dude en visitar http://support. Se le despegue y el funcionamiento en ninguna hora! Puede acceder a la guía del usuario seleccionando Ayuda> de AutoPlay Media Studio Guía del Usuario en el menú. Puede obtener más información sobre Lua y su historia oficial en el sitio web de Lua: http://www. acciones y secuencias de comandos.indigorose. Aunque no podemos escribir scripts para usted o para depurar sus scripts.org Esto también es donde usted puede encontrar la documentación más reciente sobre el lenguaje Lua. Lua se ha diseñado y ejecutado por un equipo de Tecgraf.0 Manual de Referencia. junto con tutoriales y una realmente amistad de la comunidad de desarrolladores de Lua. El sitio Web de Lua El motor de scripting de AutoPlay se basa en un popular lenguaje de scripting llamado Lua. The Computer Graphics Technology Group de la PUC-Rio (la Pontificia Universidad Católica de Río de Janeiro en Brasil). Asegúrese de verificar los foros de usuarios donde se pueden leer las preguntas y respuestas de los usuarios y los compañeros de Indigo Rose. Estas funciones. usted debe utilizar por completo por su cuenta. Tenga en cuenta que puede haber otras funciones incorporadas que existen en Lua y en AutoPlay Media Studio que no están soportadas de forma oficial. así como hacer preguntas de su propia cuenta. en su caso. Cualquier otra función "indocumentada" que usted puede encontrar en la documentación de Lua no son compatibles. Aunque estas funciones pueden trabajar. estaremos encantados de responder cualquier pregunta general de secuencias de comandos que tenga.indigorose. Indigo aumentó el apoyo técnico Si necesita ayuda con cualquier secuencia de comandos o conceptos tienen un bloqueo mental a través de empujar.com. 53 .