1. INTRODUCCIÓN JavaScript es una de las múltiples aplicaciones que han surgido para extender las capacidades del Lenguaje HTML. JavaScript es un lenguaje script orientado a documento. Nunca podrá hacer un programa, tan sólo podrá mejorar sus páginas Web. ¿Qué es JavaScript? JavaScript es un lenguaje de script multiplataforma [cross-platform] orientado a objetos. Es un lenguaje pequeño y ligero; no es útil como un lenguaje independiente, más bien está diseñado para una fácil incrustación en otros productos y aplicaciones, tales como los navegadores Web. Dentro de un entorno anfitrión, JavaScript puede ser conectado a los objetos de su entorno para proveer un control programable sobre éstos. NORMAS DEL CODIGO EN JAVASCRIPT Las normas para poder escribir cualquier código de JavaScript se basan en 5 puntos básicos y que debemos cumplir siempre. Estas normas son las siguientes: 1. 2. 3. 4. 5. Todo el código (sentencias) esta dentro de funciones. Las funciones se desarrollan entre las etiquetas <script> y </script>. Las etiquetas "<script>" deben colocarse entre las etiquetas <head> y </head>. Las etiquetas "<title>" no pueden estar colocadas entre las de "<script>". La llamada a la función se hace a través de un evento de un elemento del documento. ¿Cómo nace Javascript? Javascript nació con la necesidad de permitir a los autores de sitio web crear páginas que permitan intercambiar con los usuarios, ya que se necesitaba crear webs de mayor complejidad. El HTML solo permitía crear páginas estáticas donde se podía mostrar textos con estilos, pero se necesitaba interactuar con los usuarios. En los años de 1990, Netscape creo Livescript; las primeras versiones de este lenguaje fueron principalmente dedicadas a pequeños grupos de diseñadores Web que no necesitaban utilizar un compilador, o sin ninguna experiencia en la programación orientada a objetos. A medida que estuvieron disponibles nuevas versiones de este lenguaje incluían nuevos componentes que dan gran potencial al lenguaje, pero lamentablemente esta versión solo funcionaba en la última versión del Navigator en aquel momento. En diciembre de 1995, Netscape y Sun Microsystems (el creador del lenguaje Java) luego de unirse objetivo de desarrollar el proyecto en conjunto, reintroducen este lenguaje con el nombre de Javascript. En respuesta a la popularidad de Javascript, Microsoft lanzo su propio lenguaje de programación a base de script, VBScript (una pequeña versión de Visual Basic). En el año de 1996 Microsoft se interesa por competir con Javascript por lo que lanza su lenguaje llamado Jscript, introducido en los navegadores de Internet Explorer. A pesar de las diferentes críticas que se le hacen al lenguaje Javascript, este es uno de los lenguajes de programación más populares para la web. Desde que los navegadores incluyen el Javascript, no necesitamos el Java Runtime Environment (JRE), para que se ejecute. El Javascript es una tecnología que ha sobrevivido por más de 10 años, es fundamentales en la web, junto con la estandarización de la “European Computer Manufacturers Association” (ECMA) (adoptada luego por la ISO) y W3C DOM, Javascript es considerado por muchos desarrolladores web como la fundación para la próxima generación de aplicaciones web dinámicas del lado del cliente. La estandarización de Javascript comenzó en conjunto con ECMA en Noviembre de 1996. Es adoptado este estándar en Junio de 1997 y luego también por la “Internacional Organization for Standardization” (ISO). El DOM por sus siglas en inglés “Modelo de Objetos del Documento” fue diseñado para evitar incompatibilidades. ¿Dónde puedo ver funcionando Javascript? Entre los diferentes servicios que se encuentran realizados con Javascript en Internet se encuentran: Correo Chat Buscadores de Información También podemos encontrar o crear códigos para insertarlos en las páginas como: Reloj Contadores de visitas Fechas Calculadoras Validadores de formularios Detectores de navegadores e idiomas 2) CARACTERISTICAS DEL LENGUAJE HTML: Su sintaxis es similar a la usada en Java y C, al ser un lenguaje del lado del cliente este es interpretado por el navegador, no se necesita tener instalado ningún Framework. Variables: var = “Hola”, n=103 Condiciones: if(i<10){ … } Ciclos: for(i; i<10; i++){ … } Arreglos: var miArreglo = new Array(“12”, “77”, “5”) Funciones: Ppopias del lenguaje y predefinidas por los usuarios Comentarios para una sola línea: // Comentarios Comentarios para varias lineas: /* Comentarios */ Permite la programación orientada a objetos: document.write("Hola"); Las variables pueden ser definidas como: string, integer, flota, bolean simplemente utilizando “var”. Podemos usar “+” para concatenar cadenas y variables. ¿Cómo identificar código Javascript? El código javascript podemos encontrarlo dentro de las etiquetas <body></body> de nuestras páginas web. Por lo general se insertan entre: <script></script>. También pueden estar ubicados en ficheros externos usando: <script type="text/javascript" src="micodigo.js"></script> 3) ESTRUCTURA DE DATOS ¿Cómo introducir JavaScript en el código HTML? Básicamente existen dos formas de introducir un script de JavaScript en una página HTML: Embebido en el código HTML, entre las tags <script> y </script>. El siguiente código muestra un ejemplo de código JavaScript embebido en el HTML de una página. Como se observa, el código JavaScript figura entre las marcas de comentario <!-- y -->, para que no aparezca en la página. Además, delante de la marca de cierre de comentario se insertan los caracteres //, de comentario en JavaScript, para que el intérprete JavaScript no dé error por la línea -->. <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso8859-1"> <TITLE>Introducción a JavaScript</TITLE> <SCRIPT LANGUAGE="JavaScript"> <!-function saludo() { window.alert('Bienvenido a JavaScript') } //--> </SCRIPT> </HEAD> <BODY onLoad="saludo()"> Como archivo .js que se carga con la página HTML. Para ello, debe indicarse en las tags anteriores el nombre y ubicación del archivo .js que contiene el script JavaScript, como en este ejemplo: <HTML> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso8859-1"> <TITLE>Tutorial de JavaScript</TITLE> <SCRIPT LANGUAGE="JavaScript" SRC="scripts/fuente.js"></SCRIPT> </HEAD> USO DE FUNCIONES Las funciones son un conjunto de sentencias (bloque de código) que especifica al programa las operaciones a realizar. Son útiles para evitar la repetición de líneas y modular el código. Para trabajar con ellas hay que desarrollarlas y llamarlas cuando lo necesitemos. SINTAXIS DEL DESARROLLO: function nombre_funcion([var1,var2,varN]) { sentencia(s); } SINTAXIS DE LA LLAMADA: <elemento evento=nombre_funcion([val1,val2,valN]);> nombre_funcion(valor1,valor2,valorN); En el primero de los casos la llamada se realiza desde un elemento del documento. En el segundo caso la llamada se realiza desde el interior de otra función que también es posible. Diferentes Tipos de Datos D3 es muy flexible en cuanto a datos de entrada. Este tema introduce las estructuras de datos que se usan comúnmente en JavaScript y D3. Variables Una variable es un dato, el bloque más pequeño de información. La variable es el cimiento para todas las demás estructuras de datos, que simplemente son configuraciones diferentes de las variable. Las variables se definen mediante la palabra reservada var, que permite definir una o varias variables simultáneamente: var variable1 = 16; var variable2 = "hola", variable3 = "mundo"; var variable4 = 16, variable5 = "hola"; El nombre de las variables debe cumplir las dos siguientes condiciones: El primer carácter debe ser una letra o un guión bajo (_) o un dólar ($). El resto de caracteres pueden ser letras, números, guiones bajos (_) y símbolos de dólar ($). No es obligatorio inicializar una variable al declararla: var variable6; Si la variable no se declara mediante el operador var, automáticamente se crea una variable global con ese identificador y su valor. Ejemplo: var variable1 = 16; variable2 = variable1 + 4; 2.3. Palabras reservadas Como cualquier otro lenguaje de programación, JavaScript utiliza una serie de palabras para crear las instrucciones que forman cada programa. Por este motivo, estas palabras se consideran reservadas y no se pueden utilizar como nombre de una variable o función. El estándar ECMA-262 incluye la lista de las palabras reservadas que utiliza actualmente JavaScript y la lista de las palabras reservadas para su uso futuro. Utilizadas actualmente: break, else, new, var, case, finally, return, void, catch, for, switch, while, continue, function, this, with, default, if, throw, delete, in, try, do, instanceof, typeof Reservadas para su uso futuro: abstract, enum, int, short, boolean, export, interface, static, byte, extends, long, super, char, final, native, synchronized, class, float, package, throws, const, goto, private, transient, debugger, implements, protected, volatile, double, import, public Arreglos Un arreglo es una secuencia de valores, que se almacena muy convenientemente dentro de una sola variable. Manejar datos relacionados en diferentes variables es muy ineficiente: var numberA = 5; var var var var numberB numberC numberD numberE = = = = 10; 15; 20; 25; Al reescribir esto como un arreglo, se vuelven mucho más sencillos estos valores. Los corchetes definen un arreglo y las comas separan cada uno de los valores: var numbers = [ 5, 10, 15, 20, 25 ]; Los arreglos son un componente intrínseco de las visualizaciones de datos, por consiguiente es necesario entenderlos bien. Se puede acceder al valor almacenado en un arreglo, utilizando notación de corchetes: numbers[2] //Devuelve 15 El numeral dentro del corchete se refiere a la posición correspondiente en el arreglo. Recuerde que las posiciones del arreglo comienzan en cero, entonces la primera posición es 0, la segunda es 1 y así sucesivamente. numbers[0] numbers[1] numbers[2] numbers[3] numbers[4] //Devuelve //Devuelve //Devuelve //Devuelve //Devuelve 5 10 15 20 25 Algunas personas encuentran útil pensar en arreglos en términos espaciales, como si tuvieran filas y columnas, como una hoja de cálculo: ID | Valor 0 1 2 3 4 | | | | | 5 10 15 20 25 Los arreglos pueden contener cualquier tipo de datos, no solamente enteros. var percentages = [ 0.55, 0.32, 0.91 ]; var names = [ "Ernie", "Bert", "Oscar" ]; percentages[1] names[1] //Returns 0.32 //Returns "Bert" De qué están hechos los Arreglos. Función for() La visualización de datos basada en código no sería posible sin arreglos y el poderoso loop for(). Juntos, conforman el dúo dinámico de los “geeks” de datos. (En caso de que usted no se considere un “data geek, le recuerdo que está leyendo el documento titulado “Tipos de datos.”). Un arreglo organiza muchos datos en un lugar conveniente. Luego, la función for() puede rápidamente recorrer todos los datos del arreglo y ejecutar alguna acción sobre ellos – tal como mostrar su valor de manera visual. D3 por lo general maneja el recorrido (looping) con su método mágico data(), pero es importante poder escribir nuestros propios loops. No voy a describir la mecánica de los loops for() acá; esto da para otro tutorial entero por separado. Pero tome nota de este ejemplo, el cual recorre los valores del arreglo numbers de arriba. for (var i = 0; i < numbers.length; i++) { console.log(numbers[i]); //Imprime el valor a la consola } Ve ese numbers.length? Esa es la parte bella. Si numbers tiene diez posiciones, el loop correrá diez veces. Si tiene diez millones de posiciones… sí, usted ya sabe. Para esto es que son buenas las computadores: para recibir un grupo de instrucciones y ejecutarlas una y otra vez. Y esto se encuentra en el corazón de por qué son tan satisfactorias las visualizaciones de datos – uno diseña y codifica el sistema de visualización y el sistema responde acorde, aún cuando se le entrega diferentes datos. Las reglas de mapeo del sistema son consistentes, aún cuando los datos no lo son. Objetos Los arreglos son excelentes para listas simples de valores, pero cuando se tienen conjuntos complejos de datos, es deseable almacenar los datos en un objeto. Para nuestro propósito, se debe pensar en un objeto de JavaScript como si fuera una estructura de datos hecha a la medida. Se usan las entre llaves {} para identificar a un objeto. Dentro de las llaves, se incluyen índices y valores. Dos puntos : separan cada índice de su valor, y una coma separa cada par de índice/valor. var fruta = { tipo: "uva", color: "rojo", cantidad: 12, dulce: true }; Para referenciar cada valor, se utiliza la notación de puntos, especificando el nombre del índice. fruta.tipo fruta.color fruta.cantidad fruta.dulce //Devuelve //Devuelve //Devuelve //Devuelve "uva" "rojo" 12 true Piense en el valor como “perteneciendo” al objeto. Mire, una fruta. “Qué tipo de fruta es? puede que se pregunte. Y de veras, fruta.tipoes "uva". Y es dulce? Sí, definitivamente, puesto que fruta.dulce es true. Objetos y Arreglos Es posible combinar estas dos estructura y crear arreglos de objetos, u objetos de arreglos, u objetos de objetos, o básicamente cualquier estructura que tenga sentido para su conjunto de datos. Digamos que hemos adquirido otras frutas y que queremos expandir nuestro catálogo. Utilizamos los corchetes []en la parte de afuera par indicar que es un arreglo, seguido por las entre llaves {}y notación de objetos en la parte de adentro, con una coma separando a cada objeto. var frutas = [ { tipo: "uva", color: "rojo", cantidad: 12, dulce: true }, { tipo: "kiwi", color: "cafe", cantidad: 98, dulce: true }, { tipo: "banano", color: "amarillo", cantidad: 0, dulce: true } ]; Para obtener acceso a estos datos, debemos seguir el sendero de los índices hacia los valores que buscamos. Recuerde, [] significa arreglo, y {} significa objeto.frutas es un arreglo, entonces utilizamos la notación de corchetes primero para especificar el índice del arreglo. fruta[1] Seguido, cada elemento del arreglo es un objeto, entonces se añade un punto y un índice: fruta[1].cantidad //Devuelve 98 Acá está el mapa de cómo acceder a todos los valores del arreglo de objetos denominado frutas: frutas[0].tipo frutas[0].color frutas[0].cantidad frutas[0].dulce == == == == "uva" "rojo" 12 true frutas[1].tipo frutas[1].color frutas[1].cantidad frutas[1].dulce == == == == "kiwi" "cafe" 98 true frutas[2].tipo == "banano" frutas[2].color frutas[2].cantidad frutas[2].dulce == == == "amarillo" 0 true Ciertamente, sabemos que frutas[2].cantidad bananos. JSON En algún punto de su carrera de D3, encontrará la Notación de Objetos de Javascript. Puede leer los detalles, sin embargo JSON es básicamente un tipo de sintaxis específico para organizar datos como objetos de JavaScript. Esta sintaxis se ha optimizado para uso con JavaScript (obviamente) y llamadas AJAX, por eso es que verá muchos de los APIs de la red botando datos en formato JSON. Es más rápido y fácil de descomponer con JavaScript que XML y por supuesto, D3 funciona bien con este formato. Todo esto, y en resumen no se ve mucho más raro que lo que ya hemos visto: var jsonFruta = { "tipo": "uva", "color": "rojo", "cantidad": 12, "dulce": true }; La única diferencia acá es que nuestros índices ahora están rodeados por comillas ” “, de tal forma que todos los valores son cadenas de caracteres. GeoJSON Así como JSON es solamente un formalismo para la sintaxis de objetos de JavaScript existente, GeoJSON es la sintaxis formal de objetos JSON, optimizada para almacenar información geográfica. Todos los objetos GeoJSON son objetos JSON, y todos los objetos JSON son objetos de JavaScript. GeoJSON puede almacenar puntos en un espacio geográfico (típicamente coordenadas longitud/latitud), pero también formas (como líneas y polígonos) y otro tipo de representaciones espaciales. Si tiene bastante información geográfica, vale la pena descomponerla en formato GeoJSON para optimizar su uso en D3. Entraremos en detalles acerca de GeoJSON cuando hablemos de mapas geográficos, pero por el momento, es suficiente con saber que un dato simple en formato GeoJSON puede representarse así: var geodata = { "type": "FeatureCollection", "features": [ { "type": "Feature", "geometry": { "type": "Point", "coordinates": [ 150.1282427, -24.471803 ] }, "properties": { "type": "town" } } ] }; 5. PRIMER PROGRAMA Ahora vamos paso a paso a construir nuestro primer programa, y así podremos ver los elementos principales del lenguaje y su colocación dentro del documento Web. Solo debemos seguir la teoría vista en los temas anteriores. EJEMPLO 1: Llamada a una función desde un elemento del documento. <html> <head> <script> function hola() { alert("Hola a todos"); } </script> <title>Autor:Ricardo Amezua</title> </head> <body onLoad=hola();> </body> </html> EJEMPLO 2: Llamada a una función desde otra. <html> <head> <script> function hola() { alert("Hola a todos"); rehola(); } function rehola() { alert("hola de nuevo a todos"); } </script> <title>Autor:Ricardo Amezua</title> </head> <body onLoad=hola();> </body> </html> Incluir ejemplos de fecha y hopra E incrustar javascript http://www.javascripts.astalaweb.net/_inicio/Tutorial.asp#.VRCk9ixHWCk https://developer.mozilla.org/es/docs/Web/JavaScript/Guide/Obsolete_Pages/Gu%C3% ADa_JavaScript_1.5/Concepto_de_JavaScript http://gcoch.github.io/D3-tutorial/tipos-datos.html http://librosweb.es/libro/ajax/capitulo_3.html http://librosweb.es/libro/ajax/capitulo_2.html https://www.google.co.ve/intl/es/about/products/