Este punto es una breve revisión a cuestiones muy relacionadas con aspectos de programación tanto en una como en otra herramienta de las que nos ocupan aquí. Este apartado introduce los aspectos de programación más básicos de los lenguajes MetaTalk (MetaCard) y Transcript (Revolution), de forma breve se hace un repaso de las características que más sorprenden al programador aconstrumbrado a un lenguaje imperativo, así como de los conceptos que relacionan a estos lenguajes con las metodologías orientadas a objetos (aunque ya aviso que no lo son) y aprovecharé para recordarle algunas cosas que ha podido ver en las referencias mencionadas hasta ahora, o las que se ha perdido.
Concretando, nos vamos a centrar en:
Introducir el concepto de contenedor, del que una variable es un caso particula.
Exponer las sentencias de control de la secuencia de la ejecución.
Introducir el concepto de paso de mensajes como pieza clave de estas herramientas y de estos lenguajes. Como lo son todas las que se enmarcan bajo el paraguas del paradigma de "tarjetas y guiones".
Mostrar un ejemplo de edición de la propia herramienta de autor para facilitarnos una tarea muy habitual como es el cambio de modo de edición a ejecución y, que en MetaCard, se realiza generalmente con el ratón y los controles de la "Menu Bar" .
No espere una iniciación a la programación en esta sección, si no puntos de conexión con sus referencias anteriores a algún lenguaje de programación. Si necesita empezar con lo básico, como referencia le sugiero la serie de pilas MetaTalk Programmer de MetaCard Corp. Esta "serie" está compuestra por dos pilas, que se muestran en la Figura 3-1: mtp.mc para el aprendizaje autónomo de cuestiones de programación y el mtpguide.mc para ayudar a planificar y dirijar esta actividad de forma externa al estudiante. Las puede encontrar en el sitio FTP de MetaCard.
Entre bromas y veras, MetaTalk Programmer, le obligará a seguir una trayectoria de aprendizaje en la que avanzará conforme vaya completando etapas. Si quiere saltarse la necesidad de contraseña o la secuencialidad tendrá que saber ya un poco de programación y otro poco de MetaCard; lo que querrá decir que puede dar por superada esta etapa. También encontrará apoyo si su papel es el de promotor de este proceso: con la ayuda de las lecciones básicas del Teacher's Manual dispone de un material ordenado y didáctico de instrucción en temas de programación, por supuesto aplicados sobre MetaCard, que construye sobre la anterior aplicación un curso básico con contenidos, lecciones, ejercicios, etc.
Figura 3-1. Puede aprender a programar con el propio MetaCard y su MetaTalk Programmer (izquierda) o dirigir este proceso con la ayuda de las lecciones básicas del (derecha) MetaTalk Programmer Teacher's Manual .
Las variables en MetaCard no se definen con un tipo de datos, sino que son un ejemplo de contenedores (containers). Estos pueden almacenar tanto valores alfabéticos como númericos y en MetaCard/Revolution se definen cinco clases: campos de texto, botones, imágenes, direcciones URLy variables.
Podemos hablar de sus características y diferencias con sentencias que puedan se ejecutadas en la "Message Box" y, en general, estos elementos admiten:
Ser destinatarios de un flujo de datos, por ejemplo:
put "hola" into varAux put 3 into varAux put "hola" && 3 into varAux put URL "http://www.w3c.org" into varAux
Ser el origen de un flujo de datos, por ejemplo para ver el resultado de cada sentencia vista anteriormente habrá de ejecutarse la orden
put varAux
Ser manipuladas por trozos. Hasta ahora sólo he utilizado el modificador into que hace que se borre cualquier contenido anterior. Pero, como seguramente ya habrá intuido, la ayuda de la orden put le confirmará que también puede escribir al principio o al final de lo que haya en el contenedor. Este a su vez puede ser direccionado por líneas, items, palabras o caracteres. Por lo tanto se admiten desde procesos globales a otros de detalle fino.
put 33 into varAux; put "Antes del que n'hi ha" before varAux; put varAux
Nota: En otros lenguajes de programación se utiliza la orden write para escribir un texto. Aquí se puede utilizar también para escribir en ficheros o a un socket. Por ejemplo, si ha ejecutado MetaCard desde un terminal en su sistema operativo preferido y quiere mostrar un texto en este, puede ejecutar la siguiente orden desde la "Message Box":
write "hola" to stdoutAquí utilizaremos la orden put por su mayor versatilidad y así reduciremos el número de órdenes a aprender.
Habrá que tener presente que existen diferencias particulares asociadas a cada tipo de contenedor:
Los campos de texto, los botones y las imágenes son capaces de mostrar la información que contienen, cada uno con sus peculiaridades. En particular, en el caso de los botones se utiliza para crear menús.
Los campos de texto, además pueden permitir al usuario la edición de su contenido y recuperar su contenido con (htmlText) o sin formato (text).
Las imágenes son contenedores de datos binarios y si el formato es soportado por la herramienta se muestran en pantalla si más. Es posible procesar los datos con la propiedad imageData y obtener así los bytes que componen cada punto de una imagen y, por supuesto, modificarlos si es el caso.
El contenedor de tipo URL sirve para acceder a ficheros en la máquina local y también a máquinas remotas. Para ello se espeficará el protocolo adecuado. Por ejemplo:
put varAux into URL("file:tmp.txt")
Volcará sobre el fichero tmp.txt, en el directorio actual, el contenido de la variable varAux
Así como la operación contraria se realiza simplemente con:
put URL("file:tmp.txt") into varAux
Que leerá el contenido del fichero, en el directorio actual, y lo dejará en la variable indicada.
Nota: No es obligatorio declarar las variables, pero puede ayudar (activando la opción Tools|Explicit variables del editor de scripts) para detectar omisiones al escribir el nombre de una variable no declarada. De esta forma, el sistema mostrará un error al encontrar una variable no declarada. En caso de no estar activa, el comportamiento por defecto es crear un variabe local con el nombre encontrado y que, inicialmente, tiene contenido vacío.
Además, estas líneas no se cuentan a la hora de aplicar el límite de 10 instrucciónes del Starter Kit, así que no se preocupe. Puede aprovechar para comentar su cometido junto a su declaración.
En lo que respecta a las variables cabe decir que estas no se pueden utilizar para mostrar información directamente en pantalla. Lo único que se puede declarar de ellas es su ámbito de validez, esto es: si sólo es visible y modificable su contenido en el presente script (local) o en cualquier otro script en que se repita la declaración utilizando la orden global. Tras cada una de estas órdenes puede ir tantos nombres de variables separados por comas como se desee.
Sugerencia: Existe otra acepción de variables: las de entorno. Estas hacen referencia a las que el sistema operativo ofrece a una aplicación en ejecución. Depende su número y nombre por tanto de su plataforma de ejecución, pero entre otros sirve para acceder a parámetros que se le pasen en la línea de órdenes. La sintáxis es la misma que en sistemas UNIX. Volveremos sobre esto cuando abordemos el tema de la construcción de CGIs con MetaCard