Segun geneura.ugr.es JavaScript es un lenguaje interpretado, al igual
que VisualBasic, Perl, TCL... sin embargo, posee una característica que
lo hace especialmente idóneo para trabajar en Web, ya que son los
navegadores que utilizamos para viajar por ella los que interpretan (y
por tanto ejecutan) los programas escritos en JavaScript. De esta
forma, podemos enviar documentos a través de la Web que incorporan el
código fuente de un programa, convirtiéndose de esta forma en
documentos dinámicos, y dejando de ser simples fuentes de información
estáticas.
Los programas en JavaScript no son la primera forma que conoce la
Web para transformar información, dado que el uso de CGIs está
ampliamente difundido. La diferencia básica que existe entre un
programa CGI y uno escrito en JavaScript es que el CGI se ejecuta en el
servidor de páginas Web mientras que el programa en Javascript se
ejecuta en el cliente (es decir, en el navegador). Por regla general,
el CGI necesita unos datos de entrada (que normalmente se proporcionan
mediante un formulario), los procesa y emite un resultado en forma de
documento HTML. Esto implica tres transacciones en la red. La primera
carga la página del formulario, la segunda envía los datos al servidor,
y la tercera recibe la nueva página que ha generado el CGI. Por el
contrario, los programas escritos en JavaScript se ejecutan en el
navegador del cliente, sin necesidad de que intervenga el servidor. De
esta forma, una sola transacción basta para cargar la página en la que
se encuentra tanto el formulario, para los datos de entrada, como el
programa en JavaScript que proporciona los resultados. Sin embargo,
esto no significa (como veremos después) que los CGI vayan a ser
substituidos por JavaScript.
Las dos principales características de JavaScript son, por un lado
que es un lenguaje basado en objetos (es decir, el paradigma de
programación es básicamente el de la programación dirigida a objetos,
pero con menos restricciones), y por otro JavaScript es además un
lenguaje orientado a eventos, debido por supuesto al tipo de entornos
en los que se utiliza (Windows y sistemas X-Windows). Esto implica que
gran parte de la programación en JavaScript se centra en describir
objetos (con sus variables de instancia y métodos de "clase"
y escribir funciones que respondan a movimientos del ratón, pulsación
de teclas, apertura y cerrado de ventanas o carga de una página, entre
otros eventos.
Por último, es necesario resaltar que hay dos tipos de JavaScript.
Por un lado está el que se ejecuta en el cliente. Este es el JavaScript
propiamente dicho, aunque técnicamente se denomina Navigator
JavaScript. Pero también existe un JavaScript que se ejecuta en el
servidor. Este, más reciente, se denomina LiveWire JavaScript. Nos
centraremos solo en el primero, el Navigator JavaScript.
Este tutorial es muy básico, ideal por tanto para aquellas personas
que no hayan tenido ningún contacto con JavaScript. Pretende ser un
primer punto de referencia para aplicaciones más avanzadas, de modo que
se explican en él los conceptos más básicos. Los ejemplos son
extremadamente sencillos e intentan clarificar el uso de un determinado
objeto o función, aunque la aplicación que se les dé no sea muy vistosa
o útil.
En el apéndice se pueden encontrar otros sitios Web en los que podrá encontrar más documentación sobre Javascript.
2. ¿Qué NO es JavaScript?
Ante todo no es un lenguaje de propósito general. No permite un
control absoluto sobre los recursos del ordenador, tal y como estamos
acostumbrados al crear un programa (aunque las últimas innovaciones de
los navegadores en cuestiones de seguridad le están dando un mayor
operatibilidad) . Cada programa en JavaScript solo tiene acceso al
documento HTML en el que va inmerso y, si acaso, a las ventanas en las
que se ejecuta el navegador dentro del cual se está ejecutando el
programa en JavaScript.
Como ya se ha dicho, tampoco es un sustituto de los CGIs. Ciertas
cosas no se pueden hacer en JavaScript, especialmente las relacionadas
con acceso a ficheros en todos sus sentidos. Sin embargo es muy útil
para depurar errores en los datos antes de pasárselos al CGI que los
trata, por lo que el uso combinado de JavaScript y CGIs redunda en un
mejor tratamiento de datos y un menor número de transacciones en la Web
cuando se usan los CGIs.
Por último, no es un lenguaje orientado a objetos, ya que, por
ejemplo, no existe el concepto de clase. Es basado en objetos, de modo
que se trabaja directamente con instancias de objetos.
3. Conceptos fundamentales de programación
Antes de empezar con Javascript como tal, daremos algunsa nociones
fundamentales de programación sin las cuales poco podremos hacer con
Javascript. Estas nociones son comunes al 99% de los lenguajes
actualmente existentes, aunque daremos algunas características
especiales de este lenguaje.
3.1. Datos e instrucciones
Lo primero que hay que tener en cuenta es que programar es
básicamente tomar datos, realizar operaciones con ellos y mostrar
resultados. Claro que dicho así parece que hubiéramos convertido en una
simpleme calculadora nuestro ordenador. Sin embargo, hay que tener en
cuenta que al programar podemos manipular datos de tipo numérico
(enteros y reales), pero también podemos manejar cadenas (string),
caracteres (character), y valores lógicos (los valores true y false,
que no tienen nada que ver con las cadenas), entre otros. Más aún, no
solo podemos trabajar con cada uno de estos datos por separado, sino
que podemos unirlos formando registros (como fichas de biblioteca,
etc), o matrices en las que caben muchos de estos datos más simples.
Normalmente estos datos no pululan a lo largo del programa a su
libre albedrío, sino que se almacenan en variables. Cada variables
tiene un nombre que es una palabra, y contiene un valor (este valor
puede ser un número, una cadena, o cualquier otro tipo de dato). Cuando
operamos con el nombre de una variable, en realidad lo que se hace es
operar con el valor que contiene. Ya veremos en los ejemplos su
utilidad.
Una vez que sabemos con qué datos podemos trabajar, es conveniente
saber qué instrucciones (o sentencias) se les pueden aplicar, las
cuales podemos resumir en las siguientes:
Sentencias secuenciales
* Asignar un dato a una variable. Consiste en introducir un valor
en una variable. El posible valor que contuviera previamente esa
variable desaparecerá, quedando solo el nuevo introducido. Esta
operación se denomina sentencia de asignación.
* Leer un dato que necesita el programa. Consiste igualmente en
asignar un dato a una variable, con la diferencia de que dicho dato lo
introduce el usuario por el teclado, o bien se lee desde el disco, no
obstante hay otras muchas fuentes de las que leer datos. A las
sentencias que realizan esta operación se les llama sentencias de
lectura.
* Escribir un dato para el usuario. El dispositivo más usado es
el monitor, pero también puede ser la impresora, el disco, u otro
cualquiera. A estas sentencias se les denomina de escritura.
* Operaciones lógicas y aritméticas. Producen nuevos datos
mediante la realización de operaciones aritméticas (si se tratan de
datos numéricos) u otro tipo de operaciones (contar cuantas letras
tiene una cadena, y cosas de esas); así como operaciones lógicas de
comparación (datos mayores o menores que otros, etc).
Sentencias condicionales
Este tipo de sentencias se caracteriza por que en ellas se evalua
una condicion; si dicha condicion es cierta se ejecutaran un grupo de
sentencias, y si es falsa se ejecutaran otras. De esta forma, los
programas pueden variar su comportamiento en funcion de los datos que
manejen.
La sentencia m'as usada es la denominada IF condicion THEN
sentencias_verdad ELSE sentencias_falso. Es decir, eval'ua la
condici'on y, si es cierta ejecuta el grupo de sentencias
sentencia_verdad, y si no era cierta ejecuta el grupo de sentencias
sentencias_falso
Sentencias iterativas
Tambi'en llamadas sentencias repetitivas< o bucles. Estas
sentencias se usan cuando queremos que un grupo de instrucciones se
repita varias veces. El n'umero de repeticiones puede ser fijo,
depender de alguna variable (o alg'una operaci'on aritm'etica) o
depender de una determinada condici'on.
Sentencias de este tipo son:
* FOR ( var_contador=valor_inicial; comparaci´on; incremento) {
sentencias_for}. En esta estructura lo que se hace es inicializar la
variable var_contador a un determinado valor inicial, y se ejecutan
sentencias_for mientras la comparaci'on sea verdadera; adem'as, cada
vez que se ejecutan sentencias_for se realiza el incremento
autom'aticamente.
* DO sentencias_do UNTIL condicion;. Es decir, ejecuta sentencias_do hasta que condicion sea verdadera.
* DO {sentencias_do} WHILE condicion;. Es decir, ejecuta
sentencias_do mientras condicion sea verdadera. Se ejecuta siempre como
m'inimo una vez.
* WHILE condicion {sentencias_while};. Es decir, ejecuta
sentencias_while mientras condicion sea verdadera. Se ejecuta cero o
m'as veces (cero si la condicion es falsa desde el primer momento).
que VisualBasic, Perl, TCL... sin embargo, posee una característica que
lo hace especialmente idóneo para trabajar en Web, ya que son los
navegadores que utilizamos para viajar por ella los que interpretan (y
por tanto ejecutan) los programas escritos en JavaScript. De esta
forma, podemos enviar documentos a través de la Web que incorporan el
código fuente de un programa, convirtiéndose de esta forma en
documentos dinámicos, y dejando de ser simples fuentes de información
estáticas.
Los programas en JavaScript no son la primera forma que conoce la
Web para transformar información, dado que el uso de CGIs está
ampliamente difundido. La diferencia básica que existe entre un
programa CGI y uno escrito en JavaScript es que el CGI se ejecuta en el
servidor de páginas Web mientras que el programa en Javascript se
ejecuta en el cliente (es decir, en el navegador). Por regla general,
el CGI necesita unos datos de entrada (que normalmente se proporcionan
mediante un formulario), los procesa y emite un resultado en forma de
documento HTML. Esto implica tres transacciones en la red. La primera
carga la página del formulario, la segunda envía los datos al servidor,
y la tercera recibe la nueva página que ha generado el CGI. Por el
contrario, los programas escritos en JavaScript se ejecutan en el
navegador del cliente, sin necesidad de que intervenga el servidor. De
esta forma, una sola transacción basta para cargar la página en la que
se encuentra tanto el formulario, para los datos de entrada, como el
programa en JavaScript que proporciona los resultados. Sin embargo,
esto no significa (como veremos después) que los CGI vayan a ser
substituidos por JavaScript.
Las dos principales características de JavaScript son, por un lado
que es un lenguaje basado en objetos (es decir, el paradigma de
programación es básicamente el de la programación dirigida a objetos,
pero con menos restricciones), y por otro JavaScript es además un
lenguaje orientado a eventos, debido por supuesto al tipo de entornos
en los que se utiliza (Windows y sistemas X-Windows). Esto implica que
gran parte de la programación en JavaScript se centra en describir
objetos (con sus variables de instancia y métodos de "clase"
y escribir funciones que respondan a movimientos del ratón, pulsación
de teclas, apertura y cerrado de ventanas o carga de una página, entre
otros eventos.
Por último, es necesario resaltar que hay dos tipos de JavaScript.
Por un lado está el que se ejecuta en el cliente. Este es el JavaScript
propiamente dicho, aunque técnicamente se denomina Navigator
JavaScript. Pero también existe un JavaScript que se ejecuta en el
servidor. Este, más reciente, se denomina LiveWire JavaScript. Nos
centraremos solo en el primero, el Navigator JavaScript.
Este tutorial es muy básico, ideal por tanto para aquellas personas
que no hayan tenido ningún contacto con JavaScript. Pretende ser un
primer punto de referencia para aplicaciones más avanzadas, de modo que
se explican en él los conceptos más básicos. Los ejemplos son
extremadamente sencillos e intentan clarificar el uso de un determinado
objeto o función, aunque la aplicación que se les dé no sea muy vistosa
o útil.
En el apéndice se pueden encontrar otros sitios Web en los que podrá encontrar más documentación sobre Javascript.
2. ¿Qué NO es JavaScript?
Ante todo no es un lenguaje de propósito general. No permite un
control absoluto sobre los recursos del ordenador, tal y como estamos
acostumbrados al crear un programa (aunque las últimas innovaciones de
los navegadores en cuestiones de seguridad le están dando un mayor
operatibilidad) . Cada programa en JavaScript solo tiene acceso al
documento HTML en el que va inmerso y, si acaso, a las ventanas en las
que se ejecuta el navegador dentro del cual se está ejecutando el
programa en JavaScript.
Como ya se ha dicho, tampoco es un sustituto de los CGIs. Ciertas
cosas no se pueden hacer en JavaScript, especialmente las relacionadas
con acceso a ficheros en todos sus sentidos. Sin embargo es muy útil
para depurar errores en los datos antes de pasárselos al CGI que los
trata, por lo que el uso combinado de JavaScript y CGIs redunda en un
mejor tratamiento de datos y un menor número de transacciones en la Web
cuando se usan los CGIs.
Por último, no es un lenguaje orientado a objetos, ya que, por
ejemplo, no existe el concepto de clase. Es basado en objetos, de modo
que se trabaja directamente con instancias de objetos.
3. Conceptos fundamentales de programación
Antes de empezar con Javascript como tal, daremos algunsa nociones
fundamentales de programación sin las cuales poco podremos hacer con
Javascript. Estas nociones son comunes al 99% de los lenguajes
actualmente existentes, aunque daremos algunas características
especiales de este lenguaje.
3.1. Datos e instrucciones
Lo primero que hay que tener en cuenta es que programar es
básicamente tomar datos, realizar operaciones con ellos y mostrar
resultados. Claro que dicho así parece que hubiéramos convertido en una
simpleme calculadora nuestro ordenador. Sin embargo, hay que tener en
cuenta que al programar podemos manipular datos de tipo numérico
(enteros y reales), pero también podemos manejar cadenas (string),
caracteres (character), y valores lógicos (los valores true y false,
que no tienen nada que ver con las cadenas), entre otros. Más aún, no
solo podemos trabajar con cada uno de estos datos por separado, sino
que podemos unirlos formando registros (como fichas de biblioteca,
etc), o matrices en las que caben muchos de estos datos más simples.
Normalmente estos datos no pululan a lo largo del programa a su
libre albedrío, sino que se almacenan en variables. Cada variables
tiene un nombre que es una palabra, y contiene un valor (este valor
puede ser un número, una cadena, o cualquier otro tipo de dato). Cuando
operamos con el nombre de una variable, en realidad lo que se hace es
operar con el valor que contiene. Ya veremos en los ejemplos su
utilidad.
Una vez que sabemos con qué datos podemos trabajar, es conveniente
saber qué instrucciones (o sentencias) se les pueden aplicar, las
cuales podemos resumir en las siguientes:
Sentencias secuenciales
* Asignar un dato a una variable. Consiste en introducir un valor
en una variable. El posible valor que contuviera previamente esa
variable desaparecerá, quedando solo el nuevo introducido. Esta
operación se denomina sentencia de asignación.
* Leer un dato que necesita el programa. Consiste igualmente en
asignar un dato a una variable, con la diferencia de que dicho dato lo
introduce el usuario por el teclado, o bien se lee desde el disco, no
obstante hay otras muchas fuentes de las que leer datos. A las
sentencias que realizan esta operación se les llama sentencias de
lectura.
* Escribir un dato para el usuario. El dispositivo más usado es
el monitor, pero también puede ser la impresora, el disco, u otro
cualquiera. A estas sentencias se les denomina de escritura.
* Operaciones lógicas y aritméticas. Producen nuevos datos
mediante la realización de operaciones aritméticas (si se tratan de
datos numéricos) u otro tipo de operaciones (contar cuantas letras
tiene una cadena, y cosas de esas); así como operaciones lógicas de
comparación (datos mayores o menores que otros, etc).
Sentencias condicionales
Este tipo de sentencias se caracteriza por que en ellas se evalua
una condicion; si dicha condicion es cierta se ejecutaran un grupo de
sentencias, y si es falsa se ejecutaran otras. De esta forma, los
programas pueden variar su comportamiento en funcion de los datos que
manejen.
La sentencia m'as usada es la denominada IF condicion THEN
sentencias_verdad ELSE sentencias_falso. Es decir, eval'ua la
condici'on y, si es cierta ejecuta el grupo de sentencias
sentencia_verdad, y si no era cierta ejecuta el grupo de sentencias
sentencias_falso
Sentencias iterativas
Tambi'en llamadas sentencias repetitivas< o bucles. Estas
sentencias se usan cuando queremos que un grupo de instrucciones se
repita varias veces. El n'umero de repeticiones puede ser fijo,
depender de alguna variable (o alg'una operaci'on aritm'etica) o
depender de una determinada condici'on.
Sentencias de este tipo son:
* FOR ( var_contador=valor_inicial; comparaci´on; incremento) {
sentencias_for}. En esta estructura lo que se hace es inicializar la
variable var_contador a un determinado valor inicial, y se ejecutan
sentencias_for mientras la comparaci'on sea verdadera; adem'as, cada
vez que se ejecutan sentencias_for se realiza el incremento
autom'aticamente.
* DO sentencias_do UNTIL condicion;. Es decir, ejecuta sentencias_do hasta que condicion sea verdadera.
* DO {sentencias_do} WHILE condicion;. Es decir, ejecuta
sentencias_do mientras condicion sea verdadera. Se ejecuta siempre como
m'inimo una vez.
* WHILE condicion {sentencias_while};. Es decir, ejecuta
sentencias_while mientras condicion sea verdadera. Se ejecuta cero o
m'as veces (cero si la condicion es falsa desde el primer momento).