Lua es un lenguaje de programacin extensible diseado para una programacin procedimental general con utilidades para la descripcin de datos. Tambin ofrece un buen soporte para la programacin orientada a objetos, programacin funcional y programacin 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 comn de ANSI C y C++).
2008 Henry Daz Gutirrez
2 CONTENIDO AUTOPLAY MEDIA STUDIO 7.X.X ---------------------------------------------------------------------- 4 GUA DE SCRIPTING (CDIGO) ------------------------------------------------------------------------ 4 INTRODUCCIN ------------------------------------------------------------------------------------------------- 4 UN RPIDO EJEMPLO DE SCRIPT EN AUTOPLAY MEDIA STUDIO. ------------------------------ 4 IMPORTANTE CONCEPTOS DE SCRIPTING ------------------------------------------------------- 6 SCRIPT ES GLOBAL ----------------------------------------------------------------------- 6 EL SCRIPT ES SENSIBLE A MAYSCULAS Y MINSCULAS (CASE-SENSITIVE) ------------------- 6 COMENTARIOS --------------------------------------------------------------------------- 7 LA DELIMITACIN DE LAS DECLARACIONES ------------------------------------------------- 7 VARIABLES --------------------------------------------------------------------------------------------------------- 8 CULES SON LAS VARIABLES? ------------------------------------------------------------ 8 MBITO DE APLICACIN VARIABLE --------------------------------------------------------- 9 Variables locales -------------------------------------------------------------------- 9 NOMBRES DE VARIABLES ----------------------------------------------------------------10 PALABRAS CLAVE (RESERVADAS) ---------------------------------------------------------11 TIPOS Y VALORES -----------------------------------------------------------------------11 Nmero (Number) -----------------------------------------------------------------12 Ninguna (Nil) ----------------------------------------------------------------------15 Boolean (Si o No) ------------------------------------------------------------------15 Funcin (Function) ----------------------------------------------------------------15 Arreglos (Table) -------------------------------------------------------------------16 Ejemplo 1: -------------------------------------------------------------------------------- 16 Ejemplo 2: -------------------------------------------------------------------------------- 16 ASIGNACIN A VARIABLE ----------------------------------------------------------------17 EXPRESIONES Y OPERADORES ----------------------------------------------------------------------- 18 OPERADORES ARITMTICOS --------------------------------------------------------------18 OPERADORES RELACIONALES -------------------------------------------------------------18 CONCATENACIN -----------------------------------------------------------------------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 CMO CREAR TABLES --------------------------------------------------------------------24 ARRAYS NUMRICOS --------------------------------------------------------------------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 FUNCIN ----------------------------------------------------------32 VALORES DE RETORNO ------------------------------------------------------------------33 MLTIPLES VALORES DE RETORNO --------------------------------------------------------33 REDEFINICIN DE FUNCIONES ------------------------------------------------------------34 PONER FUNCIONES EN LAS TABLAS -------------------------------------------------------34 MANIPULACIN DE CADENAS ------------------------------------------------------------------------- 35 CONCATENAR CADENAS ------------------------------------------------------------------35 COMPARACIN DE CADENAS -------------------------------------------------------------36 CONTAR CARACTERES -------------------------------------------------------------------37 BUSCAR CADENAS -----------------------------------------------------------------------37 EXTRACCIN EN CADENAS ---------------------------------------------------------------38 CONVERSIN DE CADENAS NUMRICAS EN NMEROS ---------------------------------------39 OTRAS FUNCIONES PRE-CONSTRUIDAS INCORPORADAS ---------------------------- 41 SCRIPT DE FUNCIONES -----------------------------------------------------------------41 DOFILE ---------------------------------------------------------------------------------41 REQUIRE -------------------------------------------------------------------------------42 TYPE -----------------------------------------------------------------------------------42 ACCIONES ------------------------------------------------------------------------------43 LA DEPURACIN DE SUS SCRIPTS ----------------------------------------------------------------- 43 MANIPULACIN DE ERRORES -------------------------------------------------------------44 ERRORES DE SINTAXIS ------------------------------------------------------------------44 ERRORES FUNCIONALES -----------------------------------------------------------------45 LAS ACCIONES DE DEPURACIN ----------------------------------------------------------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 GUA DEL USUARIO ----------------------------------------------------------------------51 SITIO WEB DE AUTOPLAY MEDIA STUDIO -------------------------------------------------52 INDIGO AUMENT EL APOYO TCNICO -----------------------------------------------------52 EL SITIO WEB DE LUA -------------------------------------------------------------------52
4 AutoPlay Media Studio 7.X.X Gua de Scripting (Cdigo) Introduccin Una de las potentes funciones de AutoPlay Media Studio es su motor de scripting. Este documento le presentar el nuevo entorno del lenguaje de programacin.
El Scripting de AutoPlay es muy simple, con slo un puado 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 slo una demostracin. No se preocupe si usted no entiende todava.)
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 accin 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 rpido ejemplo de Script en AutoPlay Media Studio. Aqu est un breve tutorial que muestra cmo 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 botn.
3. En la ventana de Properties(Propiedades), en la categora Actions(Acciones), dirjase al evento On Clic(Clic) del objeto botn y seleccinelo. Al lado derecho se mostrara un pequeo botn de edicin junto a la palabra "-- None --"(Ninguno).
4. Haga clic en el botn 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 ("Ttulo", "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 aplicacin, haga clic en el botn que has creado.
Esto har que se ejecute el evento Clic del objeto botn, de modo que el codigo (Script) que ha introducido se llevar a cabo. Deberas ver el siguiente cuadro de dilogo al dar clic en el botn:
6
Felicidades! Usted acaba de hacer su primer script. Aunque se trata de un simple ejemplo, que slo le muestra lo fcil que es hacer que algo suceda en su aplicacin AutoPlay. Puede utilizar el mtodo anterior para probar cualquier script que desee en AutoPlay Media Studio. 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. Script es Global El motor de scripting es global para el entorno en tiempo de ejecucin. Esto significa que todos los eventos de su voluntad "saber" acerca de otras variables y funciones declarados en el resto del producto. Por ejemplo, si asigna "mivar = 10;" en el proyecto en el evento On Startup, mivar ser igual a 10, cuando el prximo evento es activado. Hay formas en torno a esta naturaleza mundial, pero es generalmente cierto en el caso del motor de scripting. El Script es sensible a maysculas y minsculas (Case- sensitive) El motor de scripting es sensible entre maysculas y minsculas. Esto significa que caracteres maysculas y minsculas son importantes para cosas como palabras clave, nombres de variables y nombres de las funciones.
Por ejemplo:
ABC = 10; aBC = 7;
En el script de arriba, ABC y aBC se refieren a dos diferentes variables, y pueden tener diferentes valores. La minscula "a" en "aBC" hace que sea completamente diferente de "ABC" en la medida de que AutoPlay las invoca.
El mismo principio se aplica tambin a los nombres de las funciones. Por ejemplo:
Dialog.Message ("Hola", "Hola mundo");
... se refiere a una funcin construida para AutoPlay. Sin embargo,
DIALOG.Message ("Hola", "Hola mundo");
7
... no ser reconocido como una funcin construida, porque DIALOG y dialog se consideran como dos nombres completamente diferentes.
Nota: Es totalmente posible tener dos funciones con la misma ortografa, pero diferentes de capitalizacin - por ejemplo, GreetUser y gREeTUSeR sera visto como dos funciones totalmente diferentes. Aunque es definitivamente posible de esas funciones a coexistir, generalmente es mejor dar nombres completamente diferentes a funciones para evitar cualquier confusin. Comentarios Puede insertar comentarios no ejecutables en sus escrituras para explicar y documentar el cdigo. En un script, cualquier texto despus de dos guiones (--) en una lnea ser ignorado. Por ejemplo:
-- Asignar 10 a la variable abc abc = 10;
... o:
abc = 10; -- Asignar 10 a abc
Los dos ejemplos anteriores hacen exactamente la misma cosa, los comentarios no afectan a los script en modo alguno.
Tambin puede crear multi-lnea mediante el uso de comentarios -- [[ y ]] - - a ambos lados del comentario:
-- [[Esto es un comentario multi-lnea]] -- a = 10;
Usted debe usar los comentarios para explicar sus escrituras en la medida de lo posible, a fin de que sean ms fciles de entender por usted mismo y otros. La delimitacin de las declaraciones Cada una nica declaracin puede ser en su propia lnea y / o separados por un punto y coma (;). Por ejemplo, todas de las siguientes secuencias de comandos son vlidas:
Script 1:
a = 10 Mivar = a
Script 2:
a = 10; mivar = a;
8
Script 3:
a = 10; Mivar = a;
Sin embargo, le recomendamos que todas las declaraciones finalicen con un punto y coma (como en los script 2 y 3).
Variables Cules son las variables? Las variables son muy importantes para los script en AutoPlay. Las variables son, simplemente, "apodos" o "marcadores" de los valores que deben ser modificados o reutilizados en el futuro. Por ejemplo, la siguiente secuencia de comandos asigna el valor 10 a una variable llamada "cantidad".
cantidad = 10;
Nota: Nosotros decimos que los valores son "asignados a" o "depositados en" variables. Si, una variable de la imagen de un contenedor donde se puede almacenar un valor, asignando un valor a una variable es como "depositamos" el valor en un contenedor. Puede cambiar este valor en cualquier momento, al asignar un valor diferente a la variable, el nuevo valor simplemente reemplaza al antiguo. Esta capacidad de mantener la informacin cambiante es lo que hace que las variables sean tan tiles.
Aqu hay un par de ejemplos que demuestran cmo se puede operar sobre la variable "cantidad":
Esta expresin asigna 10 a la variable llamada cantidad, y luego aade 20 al valor que mantiene, y entonces finalmente muestra un mensaje donde el valor actual de dicha variable ser 30.
Tambin puede asignar una variable a otro:
a = 10; b = a; Dialog.Message ("Valor", b);
Esto har que aparezca un cuadro de mensaje con el nmero 10 en el mismo. La lnea "b = a;" asigna el valor de "a" (que es 10) a "b."
9 mbito de aplicacin variable Como se mencion anteriormente en este documento, todas las variables en AutoPlay Media Studio son globales por defecto. Esto significa que existen en todo el proyecto, y mantienen sus valores para prximos script. En otras palabras, si un valor es asignado a una variable en un script, la variable todava tiene su valor cuando el siguiente script es ejecutado.
Por ejemplo, si introduce este script:
foo = 10;
... en la pgina actual en el evento On Open, y a continuacin escriba:
Dialog.Message ("El valor es:", foo);
... en un objeto botn en el evento On Clic, el segundo script utilizar el valor que se asign a "foo" en el primer script. Como resultado de ello, cuando se hace clic en el objeto botn, un cuadro de mensaje aparecer con el nmero 10 en el mismo.
Tenga en cuenta que el orden de ejecucin es importante... para que un script pueda utilizar el valor que se asigna a la variable en otro script, este otro script que tiene que ser ejecutado primero. En el ejemplo anterior, en el evento de la pagina On Open es disparado antes del evento On Click del botn, por lo que el valor 10 ya est asignado a foo cuando se ejecuta el evento On Click en el script.
Variables locales Por naturaleza global del motor de script, significa que una variable conservar su valor en todo el proyecto. Sin embargo, puede hacer que las variables no sean globales, utilizando las palabras clave "local." Poner la palabra "local" en frente de una asignacin a variable crea una variable que es local a la actual funcin o script.
Por ejemplo, digamos que usted tiene los siguientes tres script en el mismo proyecto:
Script 1:
-- Asignamos el valor 10 a x x = 10;
Script 2:
local x = 500; Dialog.Message ("El valor local de x es:", x); x = 250; -- esto cambia a local a x, no es Global Dialog.Message ("El valor local de x es:", x);
Script 3:
10 -- Mostrar el valor global de x Dialog.Message ("El valor global de x es:", x);
Supongamos que estos tres script se realizan una tras otro. El primer script da el valor 10 a x. Dado que todas las variables son globales por defecto, x tendr este valor dentro de todos los dems script tambin. El segundo script hace una sesin local de x, dndole el valor de 500, pero slo dentro de ese script. Si cualquier otra cosa dentro de ese script quiere tener acceso al valor de x, se vera el valor local en lugar del valor global. Esto sucede porque la variable "x" ha sido sustituida temporalmente por otra variable que se ve igual, pero tiene un valor diferente.
(Esto me recuerda a las pelculas Caper, donde en el banco, los ladrones poner una foto delante de la cmaras de seguridad por lo que el guardia no ver que la bveda est vaca. Slo en este caso, es como el banco robado, crear una nueva bveda de trabajo, al igual que el original, y a continuacin, la desmantelan cuando se van.)
Cuando le pide mostrar el contenido de x, la primera accin Dialog.Message dentro del script # 2 mostrar 500, ya que es el valor local de x cuando la accin se lleva a cabo. La siguiente lnea asigna el valor local de 250 a x, note que una vez que usted haga una variable local, esta reemplaza completamente la variable global para el resto del script.
Por ltimo, el tercer script muestra el valor global de x, que sigue siendo 10.
Nombres de Variables Los nombres de variables pueden estar compuestos de cualquier combinacin de letras, dgitos y guin bajo (underscores), siempre que no comiencen con un nmero y no entren en conflicto con palabras clave (reservadas).
Ejemplos vlidos de nombres de variables:
un strNombre _Mi_Variable dato1 dato_1_23 ndice bReset nContar
Ejemplos no vlidos de nombres de variables:
1 1dato %% MiValor $ strDato
11 para local _PrimNombre + Apellidos_ Nombre de usuario Palabras clave (Reservadas) Las siguientes palabras son reservadas y no se puede utilizar para nombrar variables, constantes o las funciones:
and break do else elseif end false for function if in local nil not or repeat return table then true until while Tipos y Valores El lenguaje de scripting de AutoPlay es dinmicamente tipado. No hay ningn tipo de definiciones - en lugar de ello, cada valor tiene su propio tipo.
Lo que esto significa es que usted no tiene que declarar una variable a ser de un determinado tipo antes de usarlo. Por ejemplo, en C++, si desea utilizar un nmero, usted tiene que declarar primero el tipo de la variable y, a continuacin, asignar un valor a la misma:
int j; j = 10;
El ejemplo de C++ declara a j como un entero, y a continuacin, asigna 10 a la misma.
Como hemos visto, en AutoPlay slo se puede asignar un valor a una variable sin declarar su tipo. En realidad las variables no tienen tipos de cambio, es dentro de los valores que se consideran los tipos, entre un tipo u otro. Por ejemplo:
j = 10;
... esto crea automticamente la variable llamada "j" y asigna el valor 10 a la misma. Aunque este valor tiene un tipo (es un nmero), la variable es todava typeless. Esto significa que usted puede dar vuelta alrededor y asignar un tipo diferente de valor a j, de este modo:
j = "Hola";
Esto sustituye al nmero 10 que se almacena en j con la cadena "Hola." El hecho de que una cadena es un tipo diferente de dato no importa, la variable j no le importa qu tipo de dato tiene, slo le importa lo que puso en l.
Hay seis tipos de datos bsicos en AutoPlay: number, string, nil,
12 boolean, function y table. En las secciones siguientes se explicar cada tipo de dato con ms detalle. Nmero (Number) Un nmero es exactamente eso: un valor numrico. El nmero representa el tipo de nmeros reales, concretamente, valores de doble precisin de punto flotante. No hay distincin entre enteros y nmeros de punto flotante (tambin conocidos como "fracciones ")... todos ellos son slo" nmeros. He aqu algunos ejemplos de nmeros vlidos:
4 4. .4 0.4 4.57e-3 0.3e12
Cadena de Caracteres (String) Una cadena es simplemente una secuencia de caracteres. Por ejemplo, "Joe2" es una cadena de cuatro caracteres, comenzando con la letra "J" y termina con el nmero "2." Una cadena puede variar ampliamente en longitud, una cadena puede contener una sola letra, ni una sola palabra, o el contenido de un libro en su totalidad.
Las cadenas pueden contener espacios y an ms caracteres especiales, tales como retornos de carro y saltos de lnea. De hecho, las cadenas pueden contener cualquier combinacin vlida de 8 bits de caracteres ASCII, incluyendo los caracteres nulos ("\0"). AutoPlay gestiona automticamente string de memoria, de forma que nunca tenga que preocuparse de la asignacin o de la asignacin de memoria para las cadenas.
Las cadenas pueden ser bastante utilizadas intuitivas y naturales. Estas deben ser delimitadas por comillas simples coincidentes o comillas dobles. Aqu hay algunos ejemplos que utilizan las cadenas de caracteres:
Normalmente se utilizan comillas dobles para las cadenas, pero puede ser til usar comillas simples (), si usted tiene una cadena que contiene comillas dobles dentro de dicho string. Cualquiera que sea el tipo de cita que utilice, puede incluir el otro tipo de comillas dentro de la cadena, sin escapar de ella. Por ejemplo:
comillasDobles = "Qu hay de nuevo?"; comillasSimples = 'Ella dijo "Hable con la mano", y yo era todo como "Dude!"';
Si utiliza comillas dobles para delimitar el string y dentro de este tambin las usara, el string debe quedar de la siguiente manera para que el motor de script no finalice el string en la segunda comilla doble. Se vera as:
escapado = "Ella dijo \" Hable con la mano, \"y yo estaba con todos los \" Amigos! \"";
13 Normalmente, el motor de script ve comillas dobles como el marcador de inicio o final de una cadena de caracteres. Con el fin de incluir comillas dobles dentro de una cadena de caracteres encerrados en comillas dobles, y que necesita para escapar de ellos con una barra invertida (\). Esto le dice al motor de script que desee incluir una cita de carcter real en la cadena de caracteres.
La barra invertida y la comilla doble (\") son conocidas como una secuencia de escape. 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.
Las secuencias de escape que puede utilizarse en AutoPlay son:
\a - campana \b - de retroceso \f - salto de pagina \n - nueva lnea \r - retorno de carro \t - tabulacin horizontal \v - tabulacin vertical \\ - barra invertida \" - comillas \' - apstrofe \[ - corchete izquierdo \] - corchete derecho
As, por ejemplo, si desea mostrar tres lneas de texto en una nica cadena, haga lo siguiente:
Lineas = "Lnea uno. \nLinea dos. \nLinea tres"; Dialog.Message ("Aqu se muestra un String", Lineas);
Este asigna una cadena a una variable denominada Lneas, y utiliza la nueva secuencia de escape para iniciar una nueva lnea despus de cada frase. La funcin Dialog.Message muestra el contenido de la variable Lineas en un cuadro de mensaje, como este:
Otro ejemplo comn es cuando se quiere representar una ruta de acceso a un archivo, tales como C: \Mi Documentos\Mis Datos.txt. Slo tiene que recordar hacer una secuencia de escape de las barras, como en el siguiente ejemplo: MyPath = "C:\\Mis Documentos\\Mis Datos.txt";
14
Cada doble barra representa una nica barra cuando se utiliza dentro de una cadena.
Si conoce la tabla ASCII, puede utilizar una barra invertida seguida de un nmero de hasta tres dgitos para representar el valor de cualquier carcter ASCII. Por ejemplo, el valor ASCII de un carcter de nueva lnea es de 10 (el valor de a minscula en la tabla ASCII), por lo que las dos lneas siguientes hacer exactamente lo mismo:
Sin embargo, usted no tendr que utilizar este formato muy a menudo, o nunca.
Tambin se puede definir cadenas en varias lneas con/entre doble corchetes ([[y]]). Una cadena entre doble corchetes no necesita ningn carcter de escape. El estar entre doble corchetes le permite a la cadena usar todo tipo de caracteres especiales como barras, saltos de lnea y comillas simples y dobles en la cadena de caracteres. Por ejemplo:
Lineas = [[Lnea uno. Lnea dos. Lnea tres.]];
es equivalente a:
Lineas = "Lnea uno. \nLinea dos. \nLinea tres";
Esto puede ser til si usted tiene pre-texto que desea utilizar como una cadena, y no desea tener que convertir todos los caracteres especiales en secuencias de escape.
La ltima cosa importante a saber acerca de las cadenas es que el motor de scripting proporciona conversin automtica entre nmeros y cadenas de caracteres en tiempo de ejecucin. Cuando una operacin numrica se aplica a una cadena de caracteres, el motor intenta convertir la cadena a un nmero para la operacin. Por supuesto, esto slo tendr xito si la cadena contiene algo que puede interpretarse como un nmero.
Por ejemplo, las siguientes lneas son vlidas:
a = "10" + 1; -- es de 11 Resultados b = "33" * 2; -- es de 66 Resultados
Sin embargo, las siguientes lneas no le dan el mismo resultado de la conversin:
a = "10 +1"; -- El resultado es la cadena "10 +1" b = "hola" + 1; -- Error, no se puede transformar "hola" a un nmero
15 Ninguna (Nil) Ninguna es un tipo dato de valor ausente. Bsicamente representa la ausencia de cualquier otro tipo de valor.
Puede asignar cero a una variable, al igual que cualquier otro valor. Tenga en cuenta que esto no es lo mismo que la asignacin de las letras "cero" a una variable, como en una cadena. Al igual que otras palabras clave, Nil debe ser escrita al lado derecho de la variable con el fin de ser reconocidos como un tipo de valor. Tambin debe ser escrita en letras minsculas.
Nil siempre se evala como falsas cuando se utiliza en una condicin:
a = nil; if a then -- Ingrese ac todas las lneas -- Esta expresin no se ejecutar end
Tambin puede ser utilizado para "eliminar" el valor de una variable:
y = "Henry Diaz"; y = nil;
En el ejemplo anterior, "y" ya no contienen un valor despus de la segunda lnea.
Boolean (Si o No) Las variables de tipo Boolean puede tomar uno de dos valores: cierto o falso, si o no, true o false. Se pueden utilizar en condiciones y llevar a cabo operaciones de lgica booleana. Por ejemplo:
boolybooly = true; if boolybooly then -- Cualquier script de aqu ser ejecutado. end
Esto establece una variable llamada boolybooly en verdadera, y a continuacin, ejecuta una declaracin en base al valor devuelto. Del mismo modo:
a = true; b = false; if (A y B) then -- Cualquier script de aqu no se ejecutar porque -- verdadero y falso es falso. end
Esta vez, si la declaracin de necesidades, tanto "a" y "b" para ser verdad para las lneas dentro de l a ser ejecutado. En este caso, que no va a ocurrir porque "b" se ha establecido en falso.
Funcin (Function)
16 El motor de scripts le permite definir sus propias funciones (o "sub- rutinas"), que son esencialmente pequeos pedazos de script que puede ser ejecutado en la demanda. Cada funcin tiene un nombre que se utiliza para identificar la funcin. Usted puede utilizar el nombre de la funcin como un valor de tipo especial, con el fin de almacenar una "referencia" para esa funcin en una variable, o pasar a otra funcin. Este tipo de referencia es el valor del tipo function (funcin). Arreglos (Table) Las tablas o arreglos son una forma muy poderosa para almacenar listas de valores indexados bajo un nombre. Las tablas son en realidad arrays asociativos, es decir, que son arreglos que pueden ser indexados, no slo con nmeros, sino con cualquier tipo de valor (incluyendo cadenas).
He aqu algunos ejemplos rpidos. Ejemplo 1: nombres = {"Henry", "Evert", "Paguada"}; Dialog.Message ("Segundo nombre en la lista", nombres[2]);
Esto mostrar un cuadro de mensaje con la palabra "Everth" en el. Ejemplo 2: t = {}; t.Nombre = "Henry"; t.Apellido = "Daz"; t.Ocupacion = "Programador"; Dialog.Message(t.Nombre, t.Ocupacion);
Esto mostrar el mensaje siguiente cuadro:
Se pueden asignar tablas con otras variables como as. Por ejemplo:
Los arreglos se pueden indexar utilizando notacin matriz (mi_arreglo [1]),
17 o por la notacin punto en vez de indexados por nmeros (mi_arreglo.Apellido).
Tenga en cuenta que al asignar un arreglo a otro, como en la lnea siguiente:
arreglo_dos = arreglo_uno;
... esto en realidad no copia arreglo_dos en arreglo_uno. En lugar de ello, arreglo_dos y arreglo_uno ambos se refieren al mismo arreglo.
Esto se debe a que el nombre de un arreglo en realidad se refiere a una direccin en la memoria donde los datos dentro del arreglo se almacenan. As que cuando le puede asignar el contenido de la variable arreglo_uno a la variable arreglo_dos, ests copiando la direccin, y no los datos reales. Usted est vinculando esencialmente las dos variables al mismo "punto" donde se encuentran los datos del arreglo.
Con el fin de copiar el contenido de un arreglo, lo que necesitas para crear un nuevo arreglo y, a continuacin, copia todos los datos sobre un tema en un momento. Asignacin a variable Las variables pueden tener los nuevos valores asignados a ellos mediante el operador de asignacin (=). Esto incluye copiar el valor de una variable en otra. Por ejemplo:
a = 10; b = "Soy feliz"; c = b;
Es interesante observar que el motor de scripts soporta mltiples tareas de asignacin:
a, b = 1, 2;
Despus del script, la variable "a" contiene el nmero 1 y la variable "b" contiene el nmero 2.
Los arreglos y las funciones son parte de un caso especial: cuando se utiliza el operador de asignacin sobre una arreglo o funcin, se crea un alias que apunta al mismo arreglo o funcin, es cuando la variable comienza a "copiarse". Muchos programadores llaman a este modo Por Referencia que es distinto al otro mtodo de copiado llamado Por Valor.
18 Expresiones y operadores Una expresin es todo lo que se evala como un valor. Esto puede incluir un nico valor, como "6" o un valor complejo construido con los operadores tales como "1 + 3". Puede utilizar parntesis para "agrupar" las expresiones y control del orden en el que se evalan las expresiones con sus operadores. Por ejemplo, las siguientes lneas al ser evaluadas, todas devuelven el mismo valor:
a = 10; a = (5 * 1) * 2; a = 100 / 10; a = 100 / (2 * 5);
Operadores aritmticos Operadores aritmticos se utilizan para realizar operaciones matemticas sobre los nmeros. Los siguientes son los operadores matemticos soportados:
a = 5 + 2; b = a * 100; veintitresPorciento = 23 / 100; nega = -29; posi = -nega;
Operadores relacionales Operadores relacionales le permiten comparar cmo se relaciona un valor a otro. 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, nmeros o cadenas. Todos los dems valores slo puede usar el operador == para ver si son iguales.
Los operadores relacionales retornan valores booleanos, (verdadero o falso). Por ejemplo:
Un punto importante a mencionar es que los operadores == y ~= al completar la prueba de igualdad, son case-sensitive, lo que significa que en cualquier cadena, al hacer comparaciones con los operadores, distinguen entre maysculas y minsculas. Por ejemplo:
Operadores lgicos Operadores lgicos se utilizan para realizar operaciones booleanas sobre los valores booleanos. Los siguientes operadores lgicos son compatibles:
and (devuelve verdadero si ambos valores son verdaderos) or (devuelve verdadero si 1 de los 2 son verdaderos) not (devuelve el contrario del valor)
Por ejemplo:
a = true; b = false; c = A and B; - falso d = cero and nil; - falso e = not b; - verdadero
Tenga en cuenta que slo los valores nulos y falsos se consideran falsas, y todos los dems valores son verdaderos.
Por ejemplo:
soyinvisible = nil; if soyinvisible then -- Las lneas de aqu no va a ocurrir -- Porque soyinvisible se considera falsa Dialog.Message ("Usted no puede verme!", "Yo soy invisible !!!!"); end
if "Brett" then -- Las lneas de aqu se ejecutaran, porque Brett no es negativa, ni falsa -- Se consideran falsas ... cualquier otra cosa, incluyendo cadenas, -- se consideran verdaderas. Dialog.Message ("Qu pasa con las cadenas?", "Las cadenas
20 son verdaderas."); end Concatenacin En los script de AutoPlay, el operador de concatenacin es de dos perodos (..). Se utiliza para combinar (unir) dos o ms cadenas de caracteres. Usted no tiene que poner espacios antes y despus de los perodos, pero se puede si lo desea.
Por ejemplo:
name = "Henry".."Diaz"; --asigna "Henry Diaz" a la variable name b = name .." es nmero" .. 1; --asigna "Henry Diaz es el nmero 1" a b
Precedencias de los operadores Se dice que los operadores tendrn preferencia (precedencia), que es una manera de describir las normas o reglas que determinan que operacin en una expresin se realiza en primer lugar. Un simple ejemplo sera la expresin 1 + 2 * 3. La operador (*) multiplicacin tiene mayor precedencia que el operador (+) suma, por lo que esta expresin es equivalente a 1 + (2 * 3). En otras palabras, la expresin 2 * 3 se realiza en primer lugar, y entonces 1 + 6 se lleva a cabo, por lo que el valor final es 7.
Puede invalidar el orden natural de precedencia mediante el uso de parntesis. Por ejemplo, la expresin (1 + 2) * 3 devuelve 9. El parntesis crea del conjunto una sub-expresin "1 + 2" la izquierda el valor del operador (*) multiplicar. Esencialmente, la sub-expresin 1 + 2 se evala en primer lugar, y el resultado es entonces utilizado en la expresin 3 * 3.
Precedencias de los operadores sigue el siguiente orden, de menor a mayor prioridad:
and or < > <= >= ~= == .. + -- * / not - (unario) ^
Los operadores tambin tienen asociatividad, que es una manera de describir las expresiones que se realizan en primer lugar cuando los operadores tengan igualdad de precedencia. En el motor de scripting, todos los operadores binarios son asociativos a izquierda, lo que significa que cada vez que dos operadores tienen la misma prioridad, la operacin de la izquierda se lleva a cabo en primer lugar. La excepcin es el operador de exponenciacin (^), que es asociativo derecho.
En caso de duda, siempre puedes utilizar parntesis explcitos de control de precedencia. Por ejemplo:
a + 1 < b/2 + 1
21 ... es el mismo:
(a + 1) < ((b/2) + 1)
... y puede utilizar parntesis para cambiar el orden de los clculos, tambin:
a + 1 < b/(2 + 1)
En este ltimo ejemplo, en lugar del 1 que se aade a la mitad de B, B se divide por 3.
Estructuras de control El motor de scripts soporta las siguientes estructuras de control: if, while, repeat y for If (Si) Una declaracin if evala su condicin y a continuacin, slo ejecuta parte del cdigo despus de then si la condicin es verdadera. Una declaracin if es terminada por la palabra clave end. La sintaxis bsica es la siguiente:
if condicin then hacer algo aqu end
Por ejemplo:
x = 50; if x > 10 then Dialog.Message ("resultado", "x es mayor que 10"); end
y = 3; if ((35 * y) < 100) then Dialog.Message ( "", "y es 35 veces inferior a 100"); end
En el script de arriba, slo el primer mensaje de dilogo que aparezca, porque si la segunda condicin no es verdadero... 35 veces 3 es 105, y 105 no es inferior a 100.
Tambin puede utilizar else y elseif para aadir ms posibles retornos a la declaracin if:
x = 5; if x > 10 then Dialog.Message ("", "x es mayor que 10"); else Dialog.Message ("", "x es igual o inferior a 10"); end
22 En el ejemplo anterior, el segundo mensaje es el que se muestra, ya que 5 no es superior a 10.
x = 5; if x == 10 then Dialog.Message ( "", "x es exactamente igual a 10"); elseif x == 11 then Dialog.Message ( "", "x es exactamente igual a 11"); elseif x == 12 then Dialog.Message ( "", "x es exactamente igual a12"); else Dialog.Message ( "", "x no es igual a 10, 11 o 12"); end
En este ejemplo, el ltimo mensaje de dilogo se muestra, ya que x no es igual a 10, o 11, o 12.
While (Mientras) La declaracin While se utiliza para ejecutar el mismo "bloque" del script una y otra vez hasta que se cumple una condicin. Al igual que la declaracin if, la declaracin while se finaliza con la palabra clave end. La sintaxis bsica es la siguiente:
while condicin do hacer algo aqu end
El resultado de la declaracin 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 declaracin while seguir el bucle siempre cuando esta condicin es verdadera. As es como funciona:
Si la condicin es verdadera, todas las acciones entre el "mientras" y el correspondiente "fin" se llevarn a cabo. Cuando el "fin" se alcanza, la condicin ser reevaluado y, si es cierto, las acciones entre el "mientras" y el "fin" se llevarn a cabo de nuevo. Las acciones seguirn como este bucle hasta que la condicin se evala como falsa.
Por ejemplo:
a = 1; while a < 10 do a = a + 1; end
En el ejemplo anterior, el "a = a + 1;" la lnea se llevar a cabo a 9 veces.
Usted puede salir de un bucle while en cualquier momento utilizando la palabra clave "break". Por ejemplo:
contador = 1; while contador < 100 do contador = contador + 1;
23 if contador == 50 then break; end end
Aunque la declaracin while que est dispuesta a contar del 1 al 99, la declaracin if causa que este bucle termine tan pronto como llegue a contar con 50.
Repeat (Repita) La declaracin Repeat es similar a la declaracin while, salvo que la condicin se comprueba al final de la estructura en lugar de al principio. La sintaxis bsica es la siguiente:
repeat hacer algo aqu until condicin
Por ejemplo:
i = 1; repeat i = i + 1; until i > 10
Esto es similar a uno de los anteriores bucles while, pero esta vez, el bucle se realiza 10 veces. La expresin "i = i + 1; es ejecutado antes de que la condicin determina que 1 es ahora mayor que 10.
Usted puede salir de un bucle de repeticin en cualquier momento utilizando la palabra clave "break". Por ejemplo:
contador = 1; repeat contador = contador + 1; if contador == 50 then break; end until contador > 100
Una vez ms, lo que provoca la salida del bucle es tan pronto como es evaluado que contador es igual a 50.
For (Para) La declaracin For es usado para repetir un bloque de script de un nmero especfico de veces. La sintaxis bsica es la siguiente:
for variable = inicio, fin, steep do hacer algo aqu end
24 La variable usada en la declaracion For puede llevar cualquier nombre, o el que desee. Se utiliza una variable, en este caso contador para "contar" el nmero de vueltas que debe procesar el bucle for. Se inicia en el parmetro que va despus del signo igual, con el valor que usted especifique y a continuacin, los cambios en el importe en el paso despus de cada viaje a travs del bucle. En otras palabras, el paso se aade al valor en la variable despus de las lneas entre el final y se llevan a cabo. Si el resultado es menor que o igual al valor final, el bucle sigue desde el principio.
Por ejemplo:
- Este bucle cuenta de 1 hasta 10: for x = 1, 10 do Dialog.Message ("Nmero", x); end
El ejemplo anterior muestra 10 mensajes de dilogo en una fila, contando del 1 al 10. Tenga en cuenta que el paso es opcional, si no se declara un valor para el paso, por defecto el valor sera1.
He aqu un ejemplo que utiliza el paso de un "-1" para hacer el bucle para contar hacia atrs:
- Este bucle cuenta a partir del 10 hasta 1: for x = 10, 1, -1 do Dialog.Message ("Nmero", x); end
Ese ejemplo se muestra 10 mensajes de dilogo en una fila, contando a partir del 10 de vuelta y va todo el camino a 1.
Usted puede salir de un bucle para en cualquier momento utilizando la palabras clave "break". Por ejemplo:
for i = 1, 100 do if contar == 50 then break; end end
Una vez ms, lo que la salida del bucle tan pronto como fue igual a 50.
Tambin hay una variacin en el bucle para que funcione en los cuadros.
Tables (Arrays) | Tablas (Matrices) Las tablas o matrices son muy tiles. Se pueden utilizar para almacenar cualquier tipo de valor, incluidas las funciones o incluso otras tablas.
Cmo crear tables En general, existen dos formas de crear una tabla a partir de cero. El primero utiliza llaves para especificar una lista de valores:
Accediendo a los elementos de la Tabla. Cada "registro" de la informacin almacenada en una tabla es conocido como un elemento. Cada elemento consta de una clave, que sirve de ndice en la tabla, y un valor que est asociado con esa clave.
En general, existen dos formas de acceder a un elemento: puede usar la notacin matriz, o punto de notacin. La Notacin de Matriz se suele utilizar con arrays numricos, que son simplemente el que todos los cuadros de las claves son los nmeros. La Notacin de Punto se suele utilizar con arrays asociativos, que son los cuadros donde las llaves son cadenas.
Aqu est un ejemplo de Notacin de Matriz:
t = {"uno", "dos", "tres"}; Dialog.Message ("El elemento uno contiene:", t[1]);
Aqu est un ejemplo de Notacin de Punto:
t = {primero ="uno", segundo ="dos", tercero ="tres"}; Dialog.Message ("Elemento primero contiene:", t.primero);
Arrays numricos Uno de los usos ms comunes de las tablas es como Matrices. Una Matriz es una coleccin de valores que estn indexados por llaves numricas. En el motor de scripting, las matrices numricas son basadas en uno. Es decir, que comienzan en el ndice 1.
He aqu algunos ejemplos numricos utilizando matrices:
Arreglos asociativos Arreglos asociativos son los mismos que los arreglos numricos, salvo que los ndices pueden ser nmeros, cadenas o incluso funciones.
Aqu est un ejemplo de una matriz asociativa que utiliza un apellido como un ndice y un nombre como el valor:
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 nmero de empleados:
Empleados = {}; --Construir una tabla vaca para el nmero de empleados
-- Almacenando la informacin del empleado en su propio tabla.
-- Almacenando informacin de cada empleado de la tabla -- En el nmero apropiado de la tabla Empleados Empleados[100099] = Empleado1; Empleados[137637] = Empleado2;
-- Ahora a escribir "Empleado [100099]" es lo mismo que escribir "Employee1" Dialog.Message ( "Cumpleaos", Empleados[100099].Cumpleanos);
El mensaje de dilogo resultante se vera as:
Uso de For para enumerar tablas Hay una versin especial de la declaracin de que le permite rpida y fcilmente enumerar el contenido de una matriz. La sintaxis es la siguiente:
for indice,valor in tabla do --operar en el ndice y el valor end
Por ejemplo:
miTabla = {"Uno", "Dos", "Tres"};
-- Mostrar un mensaje para cada elemento del array for j,k in miTabla do Dialog.Message ("Item del Arreglo", j .. "=" .. k); end
El resultado sera de tres mensajes de dilogo en fila, una para cada uno de los elementos en el arreglo miTabla, as:
28
Recuerde hacer la declaracin encima, porque es una manera rpida y fcil de inspeccionar los valores en una tabla. Si slo quieres los ndices de una tabla, puede dejar de lado la parte del valor de la declaracin:
a = {Uno=1,Dos=2,Tres=3};
for k in a do Dialog.Message("ndice de la Tabla", k); final
El script de arriba mostrar tres mensajes del array en una fila, con el texto "Uno", "Tres", y a continuacin, "Dos".
Espera, pues, por qu no son elementos de la tabla en orden? La razn de esto es que internamente el motor de scripting no almacena tablas como matrices, pero en una super-eficiente estructura conocida como una tabla hash. (No te preocupes, me confunde sobre tablas hash demasiado.) Lo importante a saber es que cuando se define los elementos de la tabla, que no necesariamente son almacenados en el orden que usted defina o agrege, a menos que usted use una matriz numrica (es decir, una tabla indexada con los nmeros del 1 al cualquiera que sea).
Copiando Tablas (Arrays) Copiar Tabla es un poco diferente de la copia de otros tipos de valores. A diferencia de las variables, no puedes utilizar el operador de asignacin para copiar el contenido de un cuadro a otro. Esto se debe a que el nombre de una tabla en realidad se refiere a una direccin en la memoria donde los datos dentro de la tabla se almacenan. Si intenta copiar una tabla a otra utilizando el operador de asignacin, te acaba copiando la direccin, y no los datos reales.
Por ejemplo, si usted quera copiar una tabla y a continuacin, modificar la copia, puede ser que usted intente algo como esto:
-- Modificar la copia tabla_dos.temperatura = "fra";
Dialog.Message("Tabla 1, temperatura es:", tabla_uno.temperatura); Dialog.Message("Tabla 2, temperatura es:", tabla_dos.temperatura);
Si ejecut este script, usted vera los dos siguientes dilogos:
Espera un minuto... cambiar la "temperatura" del elemento en tabla_dos cambiado tambin en tabla_uno. Por qu cambio tanto?
La respuesta es simplemente porque los dos son, en realidad, la misma tabla.
Internamente, el nombre de una tabla slo hace referencia a una ubicacin de memoria. Cuando se crea tabla_uno, una porcin de memoria se reserva para almacenar su contenido. La ubicacin (o "direccin"), de esta memoria es lo que se asigna a la variable denominada tabla_uno.
La asignacin de tabla_uno a tabla_dos esta solo copia la direccin de memoria - no la propia memoria.
Es como escribir la direccin de una biblioteca en un pedazo de papel y, a continuacin, entregar ese documento a su amigo. Usted no ha de entregar toda la biblioteca, ms estantes de libros y de todos... slo el lugar donde se encuentra.
Si realmente quera copiar la biblioteca, usted tendra que crear un nuevo
30 edificio, fotocopia individualmente cada uno de los libros y, a continuacin, guardar las fotocopias en la nueva ubicacin.
Eso es ms o menos cmo es con tablas, tambin. Con el fin de crear una copia completa de una tabla, todos los contenidos y, lo que necesitas para crear una nueva tabla y luego copiar todos los elementos, un elemento a la vez.
Afortunadamente, para la declaracin hace muy fcil de hacer. Por ejemplo, aqu una versin modificada de nuestro ejemplo anterior, que crea una "verdadera" copia de tabla_uno.
-- Crear una copia tabla_dos = {}; for indice, valor in tabla_uno do tabla_dos[indice] =valor; end
-- Modificar la copia tabla_dos.temperatura = "Fra";
Dialog.Message ( "Tabla 1, temperatura es:", tabla_uno.temperatura); Dialog.Message ( "Tabla 2, temperatura es:", tabla_dos.temperatura);
Esta vez, los dilogos muestran que la modificacin de tabla_dos no afecta a todos los tabla_uno:
Funciones Table (Tabla) Hay una serie de funciones Table (Tabla) incorporadas a su disposicin, que puede utilizar para hacer cosas tales como la insercin de elementos en una tabla, la eliminacin de elementos de una tabla, y contando el nmero de elementos en una tabla. Para obtener ms informacin sobre estas
31 funciones de tabla, por favor, vase el Programa de Referencia / Acciones / Tabla en la ayuda en lnea.
Funciones Una de las principales y ms poderosas de las caractersticas del motor de scripting son las funciones. Usted ya ha visto una gran cantidad de funciones utilizadas a lo largo de este documento, tales como "Dialog.Message." Las Funciones son simplemente trozos de cdigo en el script que puede definir, darle un nombre y a continuacin, llamar desde cualquier otro lugar.
A pesar de que hay un montn de funciones incorpordas en AutoPlay, tambin puede hacer sus propias funciones personalizadas que se adapte a sus necesidades especficas. En general, las funciones se definen de la siguiente manera:
function nombre_de_funcion (argumentos) codigo de la funcion aqu return valor_retorno; end
La primera parte es la palabra clave "function". Esto le dice al motor de scripting que lo que sigue es la definicin de una funcin. El nombre_de_funcion es simplemente un nombre nico para su funcin. Los argumentos son los parmetros (o valores) que se pasan a la funcin cada vez que se llama. Una funcin puede recibir cualquier nmero de argumentos de 0 a infinito (bueno, no infinito, pero no se tcnicamente cuantos). La palabra clave return le dice a la funcin que debe de volver uno o ms valores al trozo de cdigo (script) que lo llam.
La forma ms sencilla de aprender acerca de las funciones es trabajar en algunos ejemplos. En este primer ejemplo, vamos a hacer una simple funcin que muestra un cuadro de mensaje. No tiene ningn argumento y no devuelve nada.
function HolaMundo () Dialog.Message ( "Bienvenido", "Hola Mundo"); end
Observe que si usted escribe en un evento la funcin y ejecuta la vista previa de su aplicacin, no pasa nada. Bueno, eso es cierto y no es cierto. Es cierto que nada de lo que ocurre visible, pero la magia est en lo que no se ve. Cuando el evento se dispar y el script de la funcin se ejecuta, la funcin llamada "HolaMundo" se convierte en parte del motor de scripting. Esto significa que est ahora disponible para el resto de la aplicacin y atender la solicitud en cualquier otro script.
Esto trae a colacin un punto importante acerca de secuencias de comandos en AutoPlay Media Studio. Al realizar una funcin, la funcin no se "interpreta" en el motor hasta que el script se ejecuta. Esto significa que si
32 defines HolaMundo() en el evento On Click de un boton, pero este evento nunca es invocado (porque el usuario no haga clic en el botn), la funcin HolaMundo() nunca existira. Es decir, no se le puede llamar desde cualquier otro lugar.
Es por ello que, en general, es mejor definir sus funciones globales en el script global del proyecto. (Para acceder al script, seleccione Proyecto> Global Functions en el men.)
Ahora, de regreso a las buenas cosas. Vamos a aadir una lnea a la realidad, llamar a la funcin:
function HolaMundo() Dialog.Message ( "Bienvenido", "Hola Mundo"); final
HolaMundo();
La linea "HolaMundo();" le dice al motor de scrpting "ir a realizar la funcin llamada HolaMundo." Cuando esa lnea es ejecutada, debe ver un mensaje de bienvenida con el texto "Hola Mundo" en ella.
Argumentos de una Funcin Vamos a aprovechar esto un poco ms y decirle al cuadro de mensaje, que el texto para mostrar sera mediante la adicin de un argumento a la funcin.
function HolaMundo(Mensaje) Dialog.Message ("Bienvenido", Mensaje); end
HolaMundo("Este es un argumento");
Ahora el cuadro de mensaje muestra el texto que fue "pasado" a la funcin.
En la definicin de la funcin, "Mensaje" es una variable que recibir automticamente cualquier argumento pasado a la funcin. En la llamada a la funcin, pasamos la cadena "Este es un argumento" como el primer (y nico) argumento para la funcin de HolaMundo.
Aqu est un ejemplo de la utilizacin de mltiples argumentos.
function HolaMundo(Titulo, Mensaje) Dialog.Message(Titulo, Mensaje); end
HolaMundo("Este es argumento uno", "Este es argumento dos"); HolaMundo("Bienvenido", "Hola");
Esta vez, la definicin de la funcin utiliza dos variables, una para cada uno
33 de sus dos argumentos... y cada llamada a la funcin, pasa dos cadenas a la funcin HolaMundo.
Tenga en cuenta que cambiando el contenido de esas cadenas, puede enviar diferentes argumentos a la funcin, y lograr resultados diferentes.
Valores de Retorno El siguiente paso es hacer la funcin de valores de retorno de vuelta al ser llamada por el script. Aqu esta una funcin que acepta un nmero como su nico argumento y a continuacin, devuelve una cadena que contenga todos los nmeros de uno a ese nmero.
function Contador(n)
-- Se empezar a cabo con una cadena de retorno en blanco CadenaRetorno = "";
for num = 1,n do -- Agregar el nmero actual (NUM) a la final de la cadena de retorno CadenaRetorno = CadenaRetorno..num;
-- Si este no es el ltimo nmero, a continuacin, agregue una coma y un espacio para separar los nmeros un poco en la cadena de retorno if (num ~= n) then CadenaRetorno = CadenaRetorno..", "; end end
-- Devolver la cadena que hemos construido return CadenaRetorno; end
Las dos ltimas lneas del script de arriba utilizan la funcin Contador para construir una cadena a partir de 1 a 10, lo almacena en una variable llamada CadenaContador y a continuacin, muestra el contenido de esa variable en un dilogo cuadro de mensaje.
Mltiples valores de Retorno Puede devolver mltiples valores en funciones, como por ejemplo:
function NumerosCortos(Numero1, Numero2) if Numero1 <= Numero2 then return Numero1, Numero2 else return Numero2, Numero1
El script de arriba crea una funcin llamada NumerosCortos que toma dos argumentos y devuelve dos valores. El primer valor devuelto es el nmero ms pequeo, y el segundo valor devuelto es el ms grande. Tenga en cuenta que se especifican dos variables para recibir los valores de retorno de la funcin llamada en la segunda ltima lnea. La ltima lnea del script muestra los dos nmeros en el orden en que fueron ordenados por la funcin.
Redefinicin de funciones Otra cosa interesante acerca de las funciones es que se puede anular una definicin de funcin anterior simplemente por volver a definirla.
function HolaMundo() Dialog.Message("Mensaje", "Hola Mundo"); end
function HolaMundo() Dialog.Message("Mensaje", "Hola Tierra"); end
HolaMundo();
El script de arriba muestra un cuadro de mensaje que dice "Hola Tierra," y no "Hola Mundo". Esto se debe a que la segunda versin de la HolaMundo() funcin anula la primera.
Poner funciones en las Tablas Una cosa muy poderosa acerca de las tablas es que pueden ser utilizados para celebrar funciones, as como otros valores. Esto es importante porque le permite asegurarse de que su nica funciones y nombres son lgicamente agrupados. (As es como todas las funciones de AutoPlay Media Studio son implementadas.) Aqu est un ejemplo:
-- Realizar las funciones: function HolaTierra() Dialog.Message ("Mensaje", "Hola Tierra"); end
function HolaLuna() Dialog.Message ("Mensaje", "Hola Luna"); end
-- Definir una tabla vaca: Hola = {};
35
-- Asignar las funciones a la tabla: Hola.Tierra = HolaTierra; Hola.Luna = HolaLuna;
-- Tiene la palabra las funciones: Hola.Tierra (); Hola.Luna ();
Tambin es interesante notar que puede definir funciones de derechas en su definicin de tabla:
Hola = { Tierra = function() Dialog.Message("Mensaje", "Hola Tierra") end, Luna = function() Dialog.Message("Mensaje", "Hola Luna") end };
-- Ahora llamamos las funciones: Hello.Earth (); Hello.Moon ();
Manipulacin de cadenas En esta seccin vamos a cubrir brevemente algunas de las ms comunes tcnicas de manipulacin de cadenas, como la concatenacin de cadenas y comparaciones.
(Para obtener ms informacin sobre las funciones de cadena que tiene a su disposicin en AutoPlay Media Studio, vase el Programa de Referencia / Acciones / cadena en la ayuda en lnea.)
Concatenar cadenas Ya hemos cubierto la concatenacin de cadenas, pero esta as vale la pena repetir. El operador de concatenacin de cadenas es de dos perodos en una fila (..). Por ejemplo:
NombreCompleto = "Daz".." Henry"; -- NombreCompleto es ahora "Daz Henry"
-- Tambin puede concatenar nmeros en cadenas. DiasDelAo = 365; CadenaAo = "Hay "..DiasDelAo.." das en un ao".
Tenga en cuenta que usted puede poner espacios a ambos lados de los puntos, o por un lado, o no poner ningn espacio en absoluto. Por ejemplo, las siguientes cuatro lneas logran la misma cosa:
Comparacin de Cadenas Junto a la concatenacin, una de las cosas ms comunes que se quiere hacer con las cadenas es comparar una cadena a otra. Dependiendo de lo que constituye un "match", esta puede ser muy simple, o simplemente un poco difcil.
Si desea realizar una distincin entre maysculas y minsculas comparacin, entonces todo lo que tienes que hacer es utilizar el operador igual (==). Por ejemplo:
strUno = "Guatemala"; strDos = "Guatemala";
if strUno == strDos then Dialog.Message("Adivina qu?", "Las dos cadenas son iguales!"); else Dialog.Message("Hmmm", "Las dos cadenas son diferentes."); end
Dado que el operador == realiza una distincin entre maysculas y minsculas comparacin cuando se aplica a cadenas de texto, el script de arriba mostrar un cuadro de mensaje que proclama que las dos cadenas son iguales.
Si desea realizar una comparacin entre maysculas y minsculas, entonces usted necesita tomar ventaja de cualquiera de las funciones String.Upper o String.Lower, a fin de asegurar que ambas cadenas tienen el mismo caso antes de compararlos. La funcin String.Upper devuelve todo en maysculas de la cadena que se da, y la funcin String.Lower devuelve toda la cadena en minsculas. Tenga en cuenta que no importa la funcin que utiliza en su comparacin, siempre y cuando se utiliza la misma funcin en ambos lados del operador == en su declaracin if.
Por ejemplo:
strUno = "GUatEmaLa"; strDos = "Guatemala";
if String.Upper(strUno) == String.Upper(strDos) then Dialog.Message("Adivina qu?", "Las dos cadenas son iguales!"); else Dialog.Message("Hmmm", "Las dos cadenas son diferentes."); end
En el ejemplo anterior, la funcin String.Upper convierte strUno a "GUATEMALA" y strDos a "GUATEMALA" y a continuacin, la declaracin if
37 compara los resultados. (Nota: las dos cadenas originales siguen siendo lo mismo.) De esta forma, no importa lo que en las cadenas originales tenan; todo lo que importa es si las letras son las mismas.
Contar caracteres Si alguna vez ha querido saber cun larga es una cadena, se puede contar el nmero de caracteres que contiene. Basta con utilizar la funcin String.Length, as:
trabalenguas = "Si un plato de madera, podra plato de madera, cunto sera...um..."; num_caracteres = String.Length (trabalenguas); Dialog.Message ( "Cuanto mide el Trabalengua", nm_caracteres .. " caracteres!");
... que se produce el siguiente cuadro de dilogo mensaje:
Buscar cadenas Otra cosa que usted quiere hacer con las cadenas es buscar una cadena dentro de otra. Esto es muy simple al hacer uso de la funcin String.Find.
Por ejemplo:
strBuscarEn = "No es un da maravilloso fuera?"; strBuscarPara = "maravillo";
-- Bsqueda de strBuscarEn dentro strBuscarPara nEncuentraPos = String.Find (strBuscarEn, strBuscarPara);
if nEncuentraPos ~= nil then -- Encontr! Dialog.Message("Resultados de la bsqueda","\"".. strBuscarPara .."\"".. " se encuentra en la posicin " .. nEncuentraPos); else -- Mala suerte Dialog.Message("Resultados de la bsqueda", strBuscarPara .. " no se ha encontrado!"); end
... podra causar el siguiente mensaje que se mostrar:
38
Consejo: Trate de experimentar con diferentes valores para strBuscarPara y strBuscarEn.
Reemplazar en Cadenas Una de las cosas ms poderosas que usted puede hacer con las cadenas es llevar a cabo una operacin para bsqueda y reemplazo sobre ellas. El siguiente ejemplo muestra cmo puede utilizar la accin String.Replace para sustituir a cada ocurrencia de una cadena con otro objetivo dentro de una cadena.
strContiene = "Lua el mejor. Dentro de los lenguajes script!"; strBuscarPara = "mejor"; strReemplazarCon = "Profesional"; strNuevaCadena = String.Replace(strContiene, strBuscarPara, strReemplazarCon); Dialog.Message("Despus de buscar y reemplazar", strNuevaCadena);
-- Crear una copia de la cadena sin espacios en esta. strNoEspacios = String.Replace(strContiene, " ", ""); Dialog.Message("Despus de remover los espacios:", strNoEspacios);
El ejemplo anterior se muestra la siguiente dos mensajes:
Extraccin en Cadenas Hay tres funciones de cadena que le permiten "extraer" una parte de una cadena, en lugar de copiar toda la cadena de s mismo. Estas funciones son String.Left, String.Right, y String.Mid.
39
String.Left copias un nmero de caracteres desde el comienzo de la cadena. String.Right hace lo mismo, pero contando desde el extremo derecho del lugar de la cadena. String.Mid le permite copiar un nmero de caracteres a partir de cualquier posicin en la cadena.
Puede utilizar estas funciones para llevar a cabo todo tipo de operaciones avanzadas en cadenas.
He aqu un ejemplo bsico que muestra cmo funcionan:
strOriginal = "Es realmente bueno verte de nuevo"
-- Copia las primeras 13 caracteres en strIzquierda. strIzquierda = String.Left (strOriginal, 13);
-- Copia los ltimos 18 caracteres en strDerecha. strDerecha = String.Right (strOriginal, 20);
-- Crear una nueva cadena con los dos pedazos. strClon = strIzquierda .. "re" .. strDerecha .. "te.";
-- Copia la palabra "bueno" en strCualquiera. strCualquiera = String.Mid(strOriginal, 14, 6);
--Mostramos los resultados en un cuadro de mensaje. Dialog.Message("Extraer en Cadenas", strOriginal .. "\n" .. strIzquierda .. "\n" .. strDerecha .. "\n" .. strClon .. "\n" .. strCualquiera);
El ejemplo anterior muestra el siguiente cuadro de mensaje:
Conversin de cadenas numricas en nmeros Puede haber ocasiones en las que tienen una cadena numrica, y que usted necesita para convertir a un nmero.
Por ejemplo, si usted tiene un campo de entrada donde el usuario puede entrar en su edad, y leer el texto que escribi, puede obtener un valor como "31". Debido a que en el escrito, sin embargo, este valor es en realidad una cadena compuesta de los caracteres "3" y "1".
40
Si se trat de comparar este valor con un nmero, usted obtendra un error de sintaxis que s se trat de comparar un nmero con una cadena.
Por ejemplo, el siguiente script:
edad = "31"; if edad > 18 then Dialog.Message("", "Eres mayor de 18 aos."); end
... se produce el siguiente mensaje de error:
El problema en este caso es la lnea que compara el contenido de la variable "edad" con el nmero 18:
if edad > 18 then
Esto genera un error porque la edad contiene una cadena, y no un nmero. El motor de script no le permite comparar los nmeros con las cadenas de esta manera. No tiene manera de saber si quera tratar de edad como un nmero o el tratamiento de 18 aos como una cadena.
La solucin es simplemente convertir el valor de la variable edad a un nmero antes de comparar. Hay dos maneras de hacer esto. Una forma es utilizar la funcin String.ToNumber.
La funcin String.ToNumber traduce una cadena numrica en el nmero equivalente, por lo que se puede utilizar en una comparacin numrica.
edad = "31"; if String.ToNumber(edad) > 18 then Dialog.Message("", "Eres mayores de 18 aos."); end
La otra forma de aprovecha el motor de scripting en la capacidad para convertir nmeros en cadenas cuando se sabe lo que son sus intenciones. Por ejemplo, si usted realiza una operacin aritmtica (por ejemplo, la adicin de dos nmeros), el motor convierte automticamente cualquier cadena numrica en nmeros para usted:
edad = "26" + 5; --El resultado es un valor numrico
El ejemplo anterior no generar ningn error, porque el motor de scripting entiende que la nica forma en que la declaracin tiene sentido, si se
41 pretende utilizar la cadena numrica, es como un nmero. Como resultado de ello, el motor convierte automticamente la cadena numrica a un nmero para que pueda realizar el clculo.
Sabiendo esto, podemos convertir una cadena numrica a un nmero sin cambiar su valor, simplemente por la adicin de 0 a l, de este modo:
edad = "31"; if (edad + 0) > 18 then Dialog.Message("", "Eres mayor de 18 aos."); end
En el ejemplo anterior, al agregar cero a la variable, le pide al motor para convertir el valor a un nmero, y a continuacin el resultado es comparado con 18. No ms error.
Otras Funciones Pre-Construidas incorporadas Script de Funciones Hay otras tres funciones incorporadas que puedan resultar de utilidad: dofile, require, y type.
dofile Carga y ejecuta un archivo de script. El contenido del archivo ser ejecutado como si fuera escrito directamente en el area de scripting. La sintaxis es la siguiente:
dofile(direxion_archivo);
Por ejemplo, escriba el siguiente script en un archivo llamado miScript.lua (slo un archivo de texto que contiene este script, creado con el Bloc de notas u otro editor de texto):
Dialog.Message("Hola", "Mundo");
Ahora arrastrar y soltar el archivo en la carpeta principal de AutoPlay Media Studio. (Esto copia el archivo en la carpeta del proyecto llamada Scripts.) Aparecer un dilogo que le preguntar si queremos aadir nuestro script. Haga clic en "No" por ahora. Vamos a explicar los requisitos declaracin ms tarde.
Ahora, aada dondequiera la siguiente lnea de script, pero en un evento:
... este archivo de script ser ledo y ejecutado de inmediato. En este caso, usted vera un cuadro de mensaje con el titulo "Hola y el mensaje Mundo".
42
Sugerencia: Utilice la funcin dofile para salvarse de tener que volver a escribir o volver a pegar un script en sus proyectos una y otra vez.
require Carga y ejecuta un archivo de script en el motor de scripting. Es similar a dofile la salvedad de que slo se carga un archivo de una vez por perodo de sesiones, mientras que dofile volver a la carga y volver a ejecutar el archivo cada vez que se utiliza. La sintaxis es la siguiente:
require(direxion_archivo);
As, por ejemplo, incluso si requiere hacer dos en una fila:
require("foo.lua"); require("foo.lua"); -- esta lnea no hace nada
...slo el primero de ellos se ejecuta. Despus de eso, el motor de scripting sabe que el archivo ha sido cargado y luego ejecutado, y las futuras convocatorias para exigir el archivo, no tendr ningn efecto.
Tenga en cuenta que el archivo .lua debe estar en la carpeta Scripts de su proyecto, que ni siquiera tiene que proporcionar una ruta completa al archivo. Por ejemplo:
Dado que slo requieren una determinada carga de archivo de script una vez por perodo de sesiones, que es el ms adecuado para la carga de scripts que contienen slo las variables y funciones. Dado que las variables y funciones son globales por defecto, slo tendr que "cargar" una vez, en repetidas ocasiones la carga de la misma definicin de funcin termina en una prdida de tiempo.
Esto hace que la funcin requiera una buena forma de cargar script de bibliotecas externas. Cada script que necesita una funcin de un archivo externo puede exigir condiciones de seguridad con require(), y el archivo en realidad slo se carga la primera vez que se necesita.
type Esta funcin le dir el tipo de valor que figura en una variable. Esta devuelve una cadena con el nombre del tipo de variable. Los valores validos de retorno son "nil", "number", "string", "boolean", "table" o "function". Por ejemplo:
43
a = 989; strTipo = type(a); --establece strType a "nmero"
a = "Hola"; strTipo = type(a); -- establece strType a la "cadena"
El tipo de funcin es especialmente til al escribir sus propias funciones que necesitan determinados tipos de datos para operar. Por ejemplo, el siguiente script usa la funcin type() para asegurarse de que sus dos argumentos son nmeros:
-- Encontrar el mximo de dos nmeros function Max(Num1, Num2)
-- Asegrese de que ambos argumentos son numricos if (type(Num1) ~= "nmero") or (type(Num2) ~= "nmero") then Dialog.Message("Error", "Por favor, introduzca un nmero"); return nil - Indica que estamos usando valores nulos. else if Num1 >= Num2 then return Num1; else return Num2; end end end
Acciones AutoPlay Media Studio viene con un gran nmero de funciones incorporadas. En la interfaz del programa, estas funciones incorporadas son comnmente denominadas acciones. Para efectos de scripting, acciones y funciones son esencialmente los mismos, sin embargo, el trmino "acciones" es generalmente reservado para las funciones que se construyen en el programa y se incluyen en la lista por orden alfabtico de las acciones en la ayuda en lnea. Al referirse a las funciones que han sido creados por otros usuarios o usted mismo, el trmino "funciones" se prefiere.
La depuracin de sus Scripts Scripting (o cualquier tipo de programacin) es relativamente fcil una vez que te acostumbras a ella. Sin embargo, incluso los mejores programadores pueden cometer errores, y necesita proteger de errores ocasionales a su cdigo. Ser bueno en la depuracin de scripts reducir el tiempo de salida al mercado para sus proyectos y aumentar la cantidad de sueo que podemos encontrar en la noche. Por favor, lea esta seccin de consejos sobre el uso inteligentemente y eficazmente de AutoPlay Media Studio como sea posible!
En esta seccin se explicar los mtodos de manipulacin de errores de AutoPlay Media Studio, as como cubrir una serie de tcnicas de depuracin.
44
Manipulacin de Errores Todas las acciones incorpordas de AutoPlay Media Studio utilizan las mismas tcnicas de manipulacin de errores. Sin embargo, esto no es necesariamente cierto en el caso de cualquier funcin, mdulo, o scripts, incluso scripts desarrollados por Indigo Rose Corporation que no estn construidas en el producto. Aunque estos scripts desarrollados externamente pueden hacer uso de AutoPlay y manipular errores del sistema, puede que no necesariamente deba hacerlo. Por lo tanto, usted siempre debe consultar a un scripts o autor de modulo o la documentacin con el fin de averiguar cmo es el manejo de errores, y as manipulados.
Existen dos tipos de errores que puede tener en sus escrituras cuando se llama a las acciones de AutoPlay Media Studio: errores de sintaxis, los errores y funcional.
Errores de sintaxis Los errores de sintaxis se producen cuando la sintaxis (o "gramtica") de un script es incorrecta, o una funcin recibe argumentos que no son apropiadas. Algunos errores de sintaxis son capturados por AutoPlay Media Studio cuando usted compile o de vista previa de su aplicacin.
Por ejemplo, considere el siguiente script:
foo =
Esto es incorrecto porque no hemos asignado nada a la variable foo -el script esta incompleto. Esto es bastante obvio un error de sintaxis, y sera capturado por el motor de script en tiempo de ejecucin (cuando compile y ejecute el proyecto).
Otro tipo de error de sintaxis es cuando no se pase el tipo o el nmero de argumentos a una funcin. Por ejemplo, si usted intenta ejecutar este script:
Dialog.Message("Hola");
...el proyecto mientras se compila ser multado, debido a que no hay evidentes errores de sintaxis en el script. En lo que respecta al motor de scripting puede decir, la llamada a la funcin est bien formada. El nombre es vlido, abierto y cerrado partido entre parntesis, las comillas estn en los lugares correctos, y hay incluso poner fin a una punto y coma al final. Parece bueno!
Sin embargo, en tiempo de ejecucin es que se vea algo como lo siguiente:
45 Parece que no era tan bueno despus de todo. Tenga en cuenta que el mensaje dice que dos argumentos son necesarios para la funcin Dialog.Message. Ah. Nuestro script slo tiene un argumento.
De acuerdo a la funcin prototipo de Dialog.Message, parece que la funcin puede aceptar hasta cinco argumentos:
Mirando de cerca la funcin prototipo, vemos que los tres ltimos argumentos tienen valores por defecto que se utilizar si los argumentos se omiten en la llamada a la funcin. Los dos primeros argumentos el ttulo (Title) y el texto (Text) -no tienen valores por defecto, por lo que no puede ser omitido sin generar un error. Para hacer un largo cuento, algo corto, est bien llamar a la accin Dialog.Message con cualquier del 2do. al 5to. argumentos... pero 1 argumento no es suficiente.
Afortunadamente, errores de sintaxis como estas son suelen ser capturados en el tiempo de ejecucin o de prueba de su aplicacin. Los mensajes de error suelen ser muy claro, por lo que es fcil para usted para localizar e identificar el problema.
Errores funcionales Los errores funcionales son aquellos que se producen debido a la funcionalidad si la accin propia falla. Ellos se producen cuando a una accin se da informacin incorrecta, como la ruta de acceso a un archivo que no existe. Por ejemplo, el siguiente cdigo producir un error funcional:
Si pone este script en un evento ahora mismo y lo prueba, ver que nada parece suceder. Esto se debe a que en AutoPlay Media Studio los errores funcionales no se muestran automticamente como se muestran los errores de sintaxis. Dejamos a ustedes para manejar (o a no manejar), tales errores funcionales.
La razn de esto es que puede haber momentos en que no le importa si una funcin falla. De hecho, puede que se espera. Por ejemplo, el siguiente cdigo intenta eliminar una carpeta llamada C:\Mi carpeta Temp:
Folder.Delete("C:\\Mi carpeta Temp");
Sin embargo, en este caso no le importa si realmente se elimina, o si la carpeta no existe en primer lugar. Usted slo quiere asegurarse de que si esa carpeta existe, ser eliminado. Si la carpeta no existe, la accin Folder.Delete causa un error funcional, porque no puede encontrar la
46 carpeta que le dijo que eliminara... pero ya que el resultado final es exactamente lo que quera, no es necesario a hacer nada al respecto. Y desde luego no queremos que el usuario vea los mensajes de error.
Por el contrario, puede haber ocasiones en las que es muy importante para usted saber si una accin falla. Si, por ejemplo, usted desea copiar un archivo muy importante:
En este caso, usted realmente quiere saber si falla y pueden querer incluso salir del programa o informar al usuario. Aqu es donde las acciones de depuracin entran en escena.
Las acciones de depuracin AutoPlay Media Studio viene con algunas funciones muy tiles para depurar sus aplicaciones. En esta seccin se ver una serie de ellas.
Application.GetLastError Esta es la accin ms importante a utilizar cuando se trata de averiguar si un problema se ha producido. En tiempo de ejecucin siempre hay un valor interno que almacena el estado de la ltima accin que fue ejecutada. En el inicio de una accin, este valor se establece en 0 (el nmero cero). Esto significa que todo est bien. Si un error se produce funcional dentro de la accin, el valor se cambia a algunos no cero.
A este ltimo valor de error se puede acceder en cualquier momento utilizando la accin Application.GetLastError.
codigo_error = Application.GetLastError (); if (codigo_error ~= 0) then -- Algn tipo de error ha ocurrido! Dialog.Message("Error", "Error al copiar archivo:"..codigo_error); Application.Exit (); end
El script de arriba informar al usuario que se ha producido un error y luego saldr de la aplicacin. Esto no es necesariamente la manera en que todos
47 los errores deben ser manejados, pero ilustra el punto. Usted puede hacer lo que quieras cuando se produce un error, al igual que se pide una funcin diferente o cualquier cosa que usted puede soar.
El script de arriba tiene un posible problema. Imagine al usuario ver un mensaje como este:
Sera mucho mejor que en realidad se ofrezca informacin al usuario sobre el problema exacto. Bueno, usted est de suerte! En tiempo de ejecucin existe una tabla llamada _tblErrorMessages que contiene todos los posibles mensajes de error, indexado por los cdigos de error. Usted puede utilizar fcilmente el ltimo nmero de error para obtener un mensaje de error que dar ms sentido para el usuario, gracias al nmero de error como "1182".
Por ejemplo, aqu hay un script modificado para mostrar la cadena de error:
codigo_error = Application.GetLastError(); if (codigo_error ~= 0) then -- Algn tipo de error ha ocurrido! Dialog.Message("Error", "Error al copiar archivo:\n" .. _tblErrorMessages[codigo_error]); Application.Exit (); end
Ahora la ejecucin produce el siguiente mensaje de error:
Mucha y mejor informacin!
Slo recuerde que el valor del ltimo error se restablece cada vez que una accin es ejecutada. Por ejemplo, la siguiente secuencia de comandos no produce un mensaje de error:
File.Copy("C:\\Temp\\Mi Archivo.dat",
48 "C:\\Temp\\Mi Archivo.bak");
-- En este punto Application.GetLastError() podra ser no cero, pero...
Dialog.Message("Hola", "Hola Mundo");
-- Vaya, ahora el ltimo nmero de error se toma de la accin -- Dialog.Message, y no de la accin File.Copy. La accin -- Dialog.Message restablecer el ltimo nmero de error a 0, -- y las siguientes lneas de captura no cualquier -- Error que ocurri en la accin File.Copy.
codigo_error = Application.GetLastError();
if (codigo_error ~= 0) then -- Algn tipo de error ha ocurrido! Dialog.Message("Error", "Error al copiar archivo:".. _tblErrorMessages [codigo_error]); Application.Exit (); end
Debug.ShowWindow AutoPlay Media Studio en tiempo de ejecucin tiene la capacidad de mostrar una ventana de depuracin que se pueden utilizar para mostrar mensajes de depuracin. Esta ventana existe en toda la ejecucin de su solicitud, pero slo es visible cuando usted le dice que sea.
La sintaxis es la siguiente:
Debug.ShowWindow(show_window);
...donde show_window es un valor booleano. Si es verdadero, la ventana de depuracin se muestra, si es falsa, la ventana se oculta. Por ejemplo:
-- Mostrar la ventana de depuracin Debug.ShowWindow(true);
Si llama a este script, la ventana de depuracin aparecer en la parte superior de su aplicacin, pero nada ms llega realmente a suceder. Ah es donde las siguientes acciones de depuracin entran en escena.
Debug.Print Esta accin imprime el texto de su eleccin en la ventana de depuracin. Por ejemplo, pruebe el siguiente script:
Debug.ShowWindow(true);
for i = 1, 10 do
49 Debug.Print("i = " .. i .. "\r\n"); end
El "\r\n" es en realidad dos secuencias de escape que se utilizan para iniciar una nueva lnea. (Esto es tcnicamente llamado "retorno de carro/nueva lnea" par.) Usted puede usar \r\n en la ventana de depuracin cada vez que desee insertar una nueva lnea.
El script de arriba producir la siguiente salida en la ventana de depuracin:
Puede utilizar este mtodo para imprimir todo tipo de informacin en la ventana de depuracin. Algunos usos son tpicos para imprimir el contenido de una variable para que puedas ver lo que contiene en tiempo de ejecucin, o para imprimir sus propios mensajes de depuracin como "dentro de exterior para bucle" o "iniciar la funcin foo()." Estos mensajes forman un sendero como migas de pan que se puede rastrear con el fin de entender lo que est sucediendo detrs de las escenas en su proyecto. Pueden ser muy valiosos cuando se trata de depurar sus scripts o su ms reciente prueba de algoritmo.
Debug.SetTraceMode AutoPlay Media Studio puede ejecutar un modo especial de "rastrear" en tiempo de ejecucin que se imprimir la informacin sobre cada lnea del script que es ejecutado a la ventana de depuracin, incluyendo el valor de Application.GetLastError() si la lnea implica llamar a una accin incorporda. Usted puede rastrear a su vez, este modo de encendido o apagado mediante el uso de la accin Debug.SetTraceMode:
Debug.SetTraceMode(turn_on);
...donde turn_on es un valor booleano que indica si el programa a su vez, traza el modo de encendido o apagado.
Aqu est un ejemplo:
Debug.ShowWindow(true);
50 Debug.SetTraceMode(true);
for i = 1, 3 do Dialog.Message ( "Nmero ", i); end
La ejecucin de este script produce la siguiente salida en la ventana de depuracin:
Observe que cada lnea producida por la funcin de rastreo se inicia con el modo de "Trace:" Esto es lo que les puedo decir aparte de todas las lneas que va a enviar la ventana de depuracin con Debug.Print. El nmero despus de la "Trace:" es el nmero de lnea que est siendo ejecutado en el script.
Volviendo sobre el modo de rastrear es algo que usted probablemente no quiere hacer en su final, a distribuir la aplicacin, pero puede realmente ayudar a encontrar problemas durante el desarrollo. De hecho, hay una opcin en AutoPlay Media Studio compilar preferencias que le permite activar automticamente el modo de rastreo cada vez que se de la vista previa. (Seleccione Herramientas (Tools)>Preferencias (Preferences) y haga clic en la categora Construir (Build). En la seccin Vista Preliminar (Preview), a su vez activar la opcin llamada "Mostrar ventana de depuracin.") Sin embargo, incluso con esta opcin habilitada, traza el modo de no ser activada en la versin que se construy cuando publique su proyecto, a menos que usted lo especifiqu a su vez que en su secuencia de comandos (script).
Debug.GetEventContext Esta accin se utiliza para obtener una cadena descriptiva sobre el evento que est siendo ejecutado. Esto puede ser til si se define una funcin en
51 un solo lugar, pero lo llaman en algn otro lugar, y que desea estar en condiciones de decir que la funcin se llama desde en un momento dado. Por ejemplo, si se ejecuta este script de un botn en el evento Click sobre Pgina1:
Dialog.Message("Contexto del evento", Debug.GetEventContext());
... vers algo como esto:
Dialog.Message Esto nos lleva a una buena ole' Dialog.Message. Ustedes han visto esta accin utiliza en este documento, y por una buena razn. Esta es una gran accin de utilizar a lo largo de su cdigo cuando se est tratando de localizar un problema.
Consideraciones finales Esperemos que este documento ha ayudado a comprender la programacin de scripting en AutoPlay Media Studio. Una vez que se cuelgue de la misma, es una muy divertida y potente forma de hacer las cosas.
Otros recursos Aqu est una lista de otros lugares que usted puede acudir para obtener ayuda con scripting en AutoPlay Media Studio.
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, y para el entorno de diseo propio. Puede acceder al archivo de ayuda en cualquier momento seleccionando Ayuda> Ayuda de AutoPlay Media Studio, en el men Ayuda.
Otro consejo til: si se encuentra en el Editor de secuencias de comandos y desea obtener ms informacin acerca de una accin, simplemente haga clic en la accin y pulse la tecla F1 en su teclado.
Gua del usuario La gua del usuario es una fantstica manera de empezar con AutoPlay Media Studio. Est escrito en una forma fcil de seguir formato de tutorial,
52 le ensea acerca de los eventos, acciones y secuencias de comandos. Se le despegue y el funcionamiento en ninguna hora! Puede acceder a la gua del usuario seleccionando Ayuda> de AutoPlay Media Studio Gua del Usuario en el men.
Sitio Web de AutoPlay Media Studio El sitio web de AutoPlay Media Studio se encuentra en http://www.indigorose.com. Asegrese de verificar los foros de usuarios donde se pueden leer las preguntas y respuestas de los usuarios y los compaeros de Indigo Rose, as como hacer preguntas de su propia cuenta.
Una manera rpida de acceder a los foros en lnea es elegir Ayuda> Foros de usuarios de AutoPlay Media Studio en el men Ayuda.
Indigo aument el apoyo tcnico Si necesita ayuda con cualquier secuencia de comandos o conceptos tienen un bloqueo mental a travs de empujar, no dude en visitar http://support.indigorose.com. Aunque no podemos escribir scripts para usted o para depurar sus scripts, estaremos encantados de responder cualquier pregunta general de secuencias de comandos que tenga.
El sitio Web de Lua El motor de scripting de AutoPlay se basa en un popular lenguaje de scripting llamado Lua. Lua se ha diseado y ejecutado por un equipo de Tecgraf, The Computer Graphics Technology Group de la PUC-Rio (la Pontificia Universidad Catlica de Ro de Janeiro en Brasil). Puede obtener ms informacin sobre Lua y su historia oficial en el sitio web de Lua:
http://www.lua.org
Esto tambin es donde usted puede encontrar la documentacin ms reciente sobre el lenguaje Lua, junto con tutoriales y una realmente amistad de la comunidad de desarrolladores de Lua.
Tenga en cuenta que puede haber otras funciones incorporadas que existen en Lua y en AutoPlay Media Studio que no estn soportadas de forma oficial. Estas funciones, en su caso, estn documentadas en el Lua 5.0 Manual de Referencia.
Slo las funciones enumeradas en la ayuda en lnea cuentan con el apoyo de Indigo Rose Software. Cualquier otra funcin "indocumentada" que usted puede encontrar en la documentacin de Lua no son compatibles. Aunque estas funciones pueden trabajar, usted debe utilizar por completo por su cuenta.