¿Más Té, Vicario?

Fale. En las tres partes anteriores del tutorial, hemos cubierto la mayoría de la especificación del VRML97. Ahora nos movemos hacia un tema completamente nuevo. Nos desplazaremos fuera del lenguaje puramente descriptivo de VRML hacia la programación secuencial. Vamos a aprender a usar la herramienta más poderosa en el todo de VRML97: el scripting.

¿Java, JavaScript, VRMLScript, o ECMAscript?

Hmmm. Parece como si hubiéramos estado aquí antes. Lo primero que necesitamos aclarar es la confusión sobre los nombres, para que sepamos lo sobre que estamos hablando.Estoy convencido de que ya ha oido hablar de Java Y Javascript. Java es un lenguaje de programación completo multiplataforma creado por SUN. Escribes el código, lo compilas en bytecode, y, a partir de ahí, puede ejecutarse en cualquier tipo de máquina que con tal de que tenga una maquina virtual de Java instalada. Java es un idioma de programación completamente desarrollado pensado para soportar grandes aplicaciones. JavaScript es un lenguaje desarrollado por Netscape con una sintaxis similar a Java (es decir, el lenguaje parece el mismo). Sin embargo, es mucho menos completo, y no se compila. Está pensado para usarse como un "script", o "guión" dentro de una pagina Web. Consiste en un lenguaje capaz de integrar diversos objetos externos a él, para proveerlos de una serie de funcionalidades que, por si mismos, no tendrían.

De esta manera, vamos a conseguir relacionarlo con objetos propios de VRML. Cuando se propuso el VRML 2.0, se necesitó un lenguaje sencillo para poder integrar scripts. Evidentemente, dotó al VRML de soporte para Java, pero se quiso además poder incluir soporte para un lenguaje sencillo, pensado para comportamientos de no mucha complejidad. Así, dado que no se necesitaban todos los elementos de JavaScript, se empezó creando una versión reducida del mismo, esencialmente con los componentes centrales del lenguaje. El navegador de VRML proveería a los objetos de interacción de la misma manera en que lo haría un navegador web convencional. Esto es VRMLScript. Sin embargo, antes de que el VRML97 fuera constituido como norma oficial, el propio JavaScript fue regularizado, y fue llamado ECMAScript. Viendo que era básicamente igual que VRMLScript, pero regularizado, VRMLScript se abandonó, y ahora VRML97 soporta sólo Java y ECMAScript en el nodo Script.

Desgraciadamente, las cosas no son tan sencillas. No todos los navegadores se ajustan a la especificación de ECMAScript. Muchos poseen las extensiones al lenguaje que se introdujeron en JavaScript 1.2, mientras algunos todavía sólo soportan VRMLScript básico. Es posible que tu código no funcione de la misma manera en distintos navegadores, a no ser que se ajuste a la escecificación del ECMAscript. Así que, en nuestras primeras aventuras con scripts, sólo voy a enseñar cómo hacerlo con ECMAScript. Pasaremos después a a Java. No es un paso grande, y, para los principiantes, es mucho mejor comenzar con ECMAScript .

Usando ECMAScript en VRML

Debido a todo este jaleo, mientras que los navegadores apoyan ECMAScript en el nodo Script, todavía tendrás que usar "javascript: ..." El protocolo de URL del que hemos hablado hace un par de capítulos. También puedes incluir scripts de VRMLScript, empleando "vrmlscript: ..." exactamente del mismo modo, pero dado que nos hemos fijado el estudio de ECMAscript, dejaremos esto aparcado por el momento. Por ahora, todos nuestros scripts se harán con ECMAScript.

Es posible escribir el código del script en un archivo distinto y posteriormente referenciarlo en el campo url del nodo Script. La extensión común para los archivos de código ECMAScript es .js, por lo que tendríamos un archivo llamado archivo.js. Sin embargo, vamos a usar durante algún tiempo el código en el interior del mismo archivo, de modo que no te preocupes por ello todavia. Aunque es muy útil si tiene muchos nodos Script que usan el mismo código.

La Programación secuencial en ECMAScript

Ahora, yo no puedo pretender enseñarte todo el ECMAScript en este tutorial. Ésta es una guía didáctica de VRML, por lo que todo lo que voy a enseñar son los fundamentos que necesita para hacer scripts en VRML. Cubriremos el material específico para VRML. El resto de esta guía didáctica va a ser en general una introducción básica a la programación secuencial, y si ya conoce ECMAScript u otro idioma similar, probablemente querrá saltárselo.

ECMAScript es un idioma de programación secuencial. En esto es muy diferente al VRML, que es más descriptivo. VRML declara la definición de diversos objetos, cada uno de los cuales con distintos atributos, los cuales, en su conjunto, describen un mundo completo. Un programa de ECMAScript es una sucesión de órdenes que se ejecutan en algún momento para dar lugar a los resultados deseados. Empezaré explicando unos conceptos básicos.

Las declaraciones, Variables y Funciones

Un programa de ECMAScript es una sucesión de sentencias, cada una de los cuales ejecutan ciertas órdenes. Por ejemplo, la sentencia

x = a + b;

toma dos valores a y b, y los suma. El resultado es el valor llamado x. Lo primero que debemos notar es que todas las sentencias de ECMAscript acaban en punto y coma (;). Esto no es estrictamente necesario, pero te ahorrarás problemas posteriores si acabas cada sentencia con un punto y coma. En la sentencia anterior, tiene también un ejemplo del próximo concepto - las variables. Una variable es una manera de guardar datos en su programa. En ECMAScript, las variables pueden ser de varios tipos. Éstos son Undefined, Null, Boolean, Number o String. Los únicos que deben preocuparnos por ahora son Boolean, Number y string. En la declaración anterior, x, a y b son variables que guardan valores. Así, los valores de a y b se suman y el resultado se asigna a x. El igual simple (=) realmente no significa "Esto es igual a esto", sino, más exactamente, "tóma el valor de lo de delante y asígnaselo a lo de atrás" para que x tome el valor de a más b. ¿Bien hasta ahora?

var x;
x = 3;
print(x);
x = x * 5;
print(x);

Éste es un fragmento de código ligeramente más complejo. En primer lugar, declaramos variable llamada x, usando la palabra var. Al igual que con los puntos y comas, esto es no siempre necesario, pero es buena idea usar var para declarar las variables con sus correspondientes nombres. Entonces, asignamos el número 3 a x. Después, usamos una función llamada print para imprimir el valor de x. Esto imprimirá el número 3. En la línea siguiente, asignamos a x el valor de x multiplicado por cinco. Dado que primero efectua las operaciones puestas en la derecha de la asignación, x toma el valor de x (que es 3) por 5, dando el resultado de 15, que es lo que se imprime según la sentencia siguiente. Hasta ahora es todo bastante razonable.

Ahora permite que echemos un vistazo a otro bloque: las funciones. Una función es un fragmento de código que realiza una determinada labor. El operador + es una función, como lo era el print(x) del ejemplo anterior. Aunque se usan de manera diferente, son esencialmente lo mismo. Vamos a concentrarnos en el estilo del print(x) por ahora. Las funciones tienen dos cosas importantes: los parámetros y los valores que devuelven. Los parámetros son las variables que van dentro de los paréntesis que pasas a la función. Y cuando la función se ejecuta, devuelve un valor (como si fuera una variable). Éste es el valor del retorno. Imagina que tenemos una función llamada cuadrado que toma un solo número como un parámetro, lo multiplica por sí mismo, y devuelve el resultado de ésta operación. Lo usaríamos así:

var x, y;
x = 3;
y = cuadrado(x);

Al final de este fragmento de código, x valdrá 3 e y valdrá 9. También aquí, puedes ver cómo podemos crear nuestras propias funciones en ECMAScript:

function cuadrado(valor) {
   var cuad;
   cuad = valor * valor;
   return cuad;
}

La función se declara usando la palabra function, seguido por el nombre de la función, seguido por una lista de parámetros entre paréntesis. Los parámetros dentro de los paréntesis serán las variables accesible de dentro de la función. Las sentencias que constituyen la función se escriben dentro de las llaves. Dentro de la función puedes ver la declaración de una variable, la asignación de esa variable, y la declaración del return. Esto hace hace de la variable cuad el valor de retorno de la función, y la finaliza. La última línea en cualquier función debe ser la declaración del valor de retorno.

Bueno, esto ha cubierto mucho en un espacio muy corto. En el próximo tema voy a cubrir las estructuras básicas que puede usar en ECMAScript, como los bucles, sentencias condicionales, operadores, y objetos. ¡Nos vemos allí!