JavaScript para Programadores Java

Post on 18-Dec-2014

1.050 views 12 download

description

JavaSc

Transcript of JavaScript para Programadores Java

Arquitectura de Servicios Telemáticos

JavaScript para Programadores Java

Departamento de Ingeniería de Sistemas Telemáticos

JavaScript para Programadores Java 2

Índice●JavaScript vs Java● Sentencias, comentarios● Variables● Estructuras de control● Funciones● Objetos

JavaScript para Programadores Java 3

JavaScript

● Como ya hemos visto, JavaScript no viene de “Java”

● Vamos a ver similitudes y diferencias

JavaScript para Programadores Java 4

Lenguaje compilado vs interpretado

● Java:– Lenguaje compilado → se genera lenguaje

máquina (.class) que se ejecuta en la JVM● JavaScript:

– Lenguaje interpretado por un intérprete • En el navegador (JS en cliente)

• En el servidor (p. ej. node.js)

– ¡No compilamos!• ¡Detectamos errores de sintaxis en tiempo de

ejecución!

JavaScript para Programadores Java 5

Programando...

● Java:– Programamos clases

– El programa 'empieza' cuando llamamos a una clase ejecutable (método main) o a un método público de clase (static) de una clase

● JavaScript:– Programamos 'sentencias', no tienen que ir

'dentro de una clase'.

JavaScript para Programadores Java 6

Sentencias

● Java– Las sentencias terminan en “;”

– Ej. String s = “hola”;● JavaScript

– Las sentencias terminan en ”;”

– Ej. var s = “hola”;

Declarar variables: con var y sin tipo

JavaScript para Programadores Java 7

Comentarios

● Java– De línea //

– De bloque /* … */● JavaScript

– De línea //

– De bloque /* … */

// Comentario de una línea/* Comentario De varias líneas */

¡Igual en Java/Javascript!

JavaScript para Programadores Java 8

Variables Java (I)

● Java es un lenguaje fuertemente tipado: cada variable debe declarar su tipo antes de usarse

●Ej.

String s = “hola”;

JavaScript para Programadores Java 9

Variables JavaScript (II)

● JavaScript es un lenguaje débilmente tipado:

– debemos declarar una variable (mediante var), pero no declaramos su tipo.

– El tipo se infiere del contenido que tenga●Ej. var s;

s = “hola”;s = 9.3;

JavaScript para Programadores Java 10

Tipos de datos Java (I)

● Java distingue dos tipos de datos:– Primitivos: byte, short, int, long, float,

double, char, boolean

– Referencias: objetos, arrays e interfaces

JavaScript para Programadores Java 11

Tipos de datos: JS (II)

● Primitivos:– number

• No distingue entre entero y flotante. Todos son flotantes

– string

– boolean● Tipos compuestos: “Objetos”, funciones,

arrays, null y undefined.

var pi = 3.14159;var nombre = 'pepe'; // o usa “pepe”var abierto = true;

JavaScript para Programadores Java 12

Ejemplo

JavaScript para Programadores Java 13

Operadores

● Son igual que en Java● Aritméticos:

– Incremento/Decremento (++/--)

– Operaciones básicas: + - * / %

– Comparación: < <= > >= == !=

– Asignación: = += -= *= **= /= %= <<= >>=● Lógicos:

– && || !Nuevo, equivale a Math.sqrt()

JavaScript para Programadores Java 14

Operadores – Idéntico/igual● Java

– == // equals● JavaScript

– == (Igual, mismo valor) // !=• Ej. T: “23” == 23; 4 == 4.0; “hola” == “hola”; null == null

• Ej. F: “Pepe” == “pepe”, NaN == NaN,

– === (Idéntico, mismo tipo y mismo valor) // !==• Ej. T: 4 === 4.0

• Ej. F: “23” === 23

Not a Number

Implicit casting: coercion

JavaScript para Programadores Java 15

Conversión de tipos

● Funciones: parseInt(), parseFloat()●Ej.

– var s = 5 + parseInt(“3”); // s = 8

– var s = 5 + parseInt(“3.0”); // s = 8.0● Evaluar una expresión: eval()● Ej. var s = eval(“(5 + 3) * 2”); // s = 16

JavaScript para Programadores Java 16

Estructuras de control● Condicionales

– if

– if /else

– switch● Bucles

– while-do

– do-while

– for

– for-each

JavaScript para Programadores Java 17

Condicional if/else

● Condicional simple Java/JavaScript– if (condición) {expr-if}

– if (condición) {expr-if} else {expr-else};

– s = condición ? expr-if : expr-else;if (nota >= 5) { resultado = “aprobado”;} else { resultado = “suspenso”;}

¡Igual en Java/Javascript!

JavaScript para Programadores Java 18

Condicional switch

switch (opcion) { case 1: direccion = “izda”; break; case 2: direccion = “dcha”; break; default: direccion = “recto”; break;}

switch (color) { case “azul”: case “verde”: color = “frío”; break; case “rojo”: color = “cálido”; break; default: color = “frío”; break;}

En Java7 los switch admiten String¡Igual en Java/Javascript!

JavaScript para Programadores Java 19

Bucle while-do

var i = 0;var s;while (i < 10) { s += i; i++;}

¡Igual en Java/Javascript!

JavaScript para Programadores Java 20

Bucle do-while

var i = 0;var s;do { s += i; i++;} while (i < 10);

¡Igual en Java/Javascript!

JavaScript para Programadores Java 21

Bucle for

int s = 0;for (int i = 0; i < 10; i++){ s += i;}

var s = 0;for (var i = 0; i < 10; i++) { s += i;}

¡Igual en Java/Javascript!

JavaScript para Programadores Java 22

Bucle for-each / for-in

String [] a = {“hola”, “adiós”};for (String s : a){ System.out.println(“Valor “ + s);}

var curso = new Curso(“TEWC”, 2);for (var prop in curso) { document.write(curso[prop]);}

Java: bucle for-each para arrays y coleccionesJavaScript: bucle for-in para propiedades de objetos

JavaScript para Programadores Java 23

Funciones en JS

● En Java no hay funciones, hay métodos dentro de las clases

● En JS, las funciones son un tipo de objeto más.

JavaScript para Programadores Java 24

Funciones en JS

public int suma(int a, int b) { return a + b;}

public void imprime (int a) { System.out.println(“Num “ + a);}

function suma (a, b) { return a + b;}

public int suma (int a, int b) { return a + b;}

function imprime (a) { document.write(“Num “ + a);}

- No indicamos si devuelve (o no) algo una función. - Si no devuelve nada, devuelve undefined- No indicamos tipos- Palabra clave function para definir funciones

JavaScript para Programadores Java 25

Llamando a funciones JS directamente desde HTML

●Desde HTML, en un enlace

● Desde HTML, en un evento

<a href=”JavaScript:hola()”>Pincha aquí</a>

<input type=”button” value=”Di hola” onClick=”hola();” />

<script type=”text/javascript”>function hola() {alert(“¡hola!”);}</script>

JavaScript para Programadores Java 26

Funciones anónimas

● Podemos asignar directamente una función a una variable sin darle nombre

JavaScript para Programadores Java 27

Closures (Clausuras)● Una clausura es una función anónima definida dentro de

otra función– Mientras la función externa exista, devuelve una

referencia a la función interna

– Así podemos llamar a la función interna

– La clausura permite que la función interna acceda a las variables de la función externa, aún cuando esa función haya terminado

– Es decir, la clausura retiene una referencia al entorno donde fue creado (variables locales, etc.)

● No existe en Java (aún) pero sí en otros lenguajes como Perl, Python, Lisp o Scheme

JavaScript para Programadores Java 28

Ejemplo Clausuras

JavaScript para Programadores Java 29

Funciones anónimas que se autollaman (self-invoking)

(function() {...})

(function(){ document.write("hola");}())

JavaScript para Programadores Java 30

Alcance (Scope)

● En JS, si declaramos una variable, tiene ámbito / alcance global

● Las variables definidas dentro de una función son (i) locales si se definen con var o (ii) globales

JavaScript para Programadores Java 31

Excepciones

var edad = prompt("Introduce edad","");document.write("Edad " + edad);try { if ((edad > 100) || (edad < 0)) { throw "FueraRango"; } else if (edad == null) { throw "CampoNull"; } else if (edad == "") { throw "CampoVacio"; } else if (isNaN(edad)) { throw "CampoNoNumerico"; }

}catch(err){ alert ("Error " + err); return;}

if (edad < 18) { alert("Menor de edad");} else if (edad > 65) { alert ("Jubilado");} else { alert("Adulto");}

JavaScript para Programadores Java 32

Excepciones● Sigue el patrón try-catch-finally, pero...●La excepción err del catch es un objeto con campos

err.name y err.message●En JS:

– EvalError: uso incorrecto de eval()

– RangeError: rango incorrecto númerico

– ReferenceError: referencia incorrecta (p.ej. Variable no definida)

– SyntaxError: error de sintaxis en eval()

– TypeError: tipo incorrecto● throw no lanza un objeto excepción, sino un String

JavaScript para Programadores Java 33

Objetos en Java

● Java es un lenguaje orientado a objetos basado en clases

●En Java las clases definen– Atributos comunes

– Métodos comunes● para todos los objetos de una clase● Si queremos añadir una propiedad, hay que

cambiar la clase y añadirlo ahí

JavaScript para Programadores Java 34

Objetos en JavaScript

● JavaScript es un lenguaje orientado a objetos sin clases, se basa en prototipos

● Podemos crear un objeto, y añadirle atributos una vez creado

● Al crearlo, podemos indicar 'un prototipo'● Si añadimos un atributo a un prototipo, se

añade los objetos creados conforme a ese prototipo

JavaScript para Programadores Java 35

Crear objetos - Constructor

var producto = new Object();producto.nombre = “libro”;producto.precio = 3;

● Podemos usar new para construir un objeto seguido de un nombre de una función

●JS tiene varios constructores predefinidos: Object(), Date(), Array(), RegExp()

var p = new Object();var d = new Date(“November 21, 2011”);var a = new Array(“a”, “b”, “c”);Var e = new RegExp(“^[a-zA-Z]”);

JavaScript para Programadores Java 36

Crear objetos - propiedades

var producto;producto.nombre = “libro”;producto.precio = 3;

JavaScript para Programadores Java 37

Crear objeto - literales

var producto = { nombre: 'libro', precio: 3};

JavaScript para Programadores Java 38

Crear métodos

var producto = new Object();producto.nombre = “libro”;producto.precio = 3;producto.muestra = imprimir;function imprimir(){ document.write(“El producto es un “ + producto.nombre + “<br/>”); document.write(“El producto cuesta “ + producto.precio + “<br/>”);}

producto.muestra();producto.precio = 4;producto.muestra();

JavaScript para Programadores Java 39

Clases

● Para definir una clase en JS, simplemente definimos una función (el constructor), y luego creamos los objetos con new seguido del constructor

● Usamos this para acceder al objeto en el constructorfunction Producto(){ this.nombre = “libro”; this.precio = 3;}var producto = new Producto();document.write(“Producto “ + producto.nombre);

JavaScript para Programadores Java 40

Clases con métodos

function Producto(){ this.nombre = “libro”; this.precio = 3; this.muestra = imprimir;}function imprimir(){ document.write(“El producto es un “ + producto.nombre + “<br/>”); document.write(“El producto cuesta “ + producto.precio + “<br/>”);}var producto = new Producto();document.write(“Producto “ + producto.muestra());

JavaScript para Programadores Java 41

Métodos en línea

var producto = { nombre: “libro”, precio: 3, muestra: function(){ document.write(“El producto es un “ + this.nombre + “<br/>”); document.write(“El producto cuesta “ + this.precio + “<br/>”); }};

document.write(“Producto “ + producto.muestra());

JavaScript para Programadores Java 42

Métodos en literales

function Producto(){ this.nombre = “libro”; this.precio = 3; this.muestra = function(){ document.write(“El producto es un “ + this.nombre + “<br/>”); document.write(“El producto cuesta “ + this.precio + “<br/>”);}var producto = new Producto();document.write(“Producto “ + producto.muestra());

JavaScript para Programadores Java 43

Sentencia with

function Producto(){ this.nombre = “libro”; this.precio = 3; this.muestra = function(){ document.write(“El producto es un “ + this.nombre + “<br/>”); document.write(“El producto cuesta “ + this.precio + “<br/>”);}var producto = new Producto();with (producto) { // abreviatura document.write(“Producto “ + nombre + “ “ + precio + “ “ + muestra());

JavaScript para Programadores Java 44

Iterador for-in

function Producto(){ this.nombre = “libro”; this.precio = 3; this.muestra = function(){ document.write(“El producto es un “ + this.nombre + “<br/>”); document.write(“El producto cuesta “ + this.precio + “<br/>”);}function itera(obj){ for (prop in ojb){ document.write(“Prop: “ + prop + “ valor “ + obj[prop]); }}var producto = new Producto();itera(producto);

JavaScript para Programadores Java 45

Ejemplo for/in

JavaScript para Programadores Java 46

Prototipos

●Todos los objetos en JS tienen una propiedad 'prototype'

● Si añadimos una propiedad/método al prototipo, se añade a todos los objetos de la clase

JavaScript para Programadores Java 47

Prototiposfunction Producto(nombre, precio){ this.nombre = nombre; this.precio = precio; this.muestra = function(){ document.write(“El producto es un “ + this.nombre + “<br/>”); document.write(“El producto cuesta “ + this.precio + “<br/>”);}var producto1 = new Producto(“libro”, 3);var producto2 = new Producto(“cuadro”, 4);Producto.prototype.marca = “ACME”;document.write(producto1.nombre + “ es de la marca “ + producto1.marca + “<br/>”);document.write(producto2.nombre + “ es de la marca “ + producto2.marca + “<br/>”);

Cuando accedemos a una propiedad, JS mira en orden: - si el objeto tiene la propiedad, devuelve el valor- si el prototipo del objeto tiene la propiedad, devuelve el valor- si Object tiene la propiedad, devuelve el valor- si no, devuelve undefined

JavaScript para Programadores Java 48

Subclases

JavaScript para Programadores Java 49

Bibliotecas de JavaScript

● JavaScript “Core Objects”– Arrays

– Date

– Math

– String

JavaScript para Programadores Java 50

Arrays

var meses = new Array();meses[0] = “Enero”;meses[1] = “Febrero”;var dias = new Array(3);var dias = {“lunes”, “martes”, “miercóles”};for (var i in dias) {

document.write(“dias[“ + i + “] : ” + dias[i] + “ <br/>”); }var numeros = new Array(10);for (var i = 0; i < numeros.length; i++) { numeros[i] = i;}

String [] meses = new String[3];meses[0] = “Enero”;meses[1] = “Febrero”;String [] dias1 = new String[3];String [] dias = {“lunes”, “martes”, “miercóles”};for (String dia in dias) {

System.out.println(“Día “ + dia); }

Int [] numeros = new int[10];for (int i = 0; i < numeros.length; i++) { numeros[i] = i;}

JavaScript para Programadores Java 51

Arrays bidimensionales (de filas)

var a1 = new Array(new Array(1, 2, 3), new Array(2, 3, 4), new Array(4, 5 6));var a2 = [ [1, 2, 3], [4, 5, 6], [7, 8, 9]];for (var i = 0; i < a1.length; i++) { for (var j = 0; j < a1[0].length; j++) { document.write(“valor “ + a[i][j] + “<br \>”); }}

int [][] a1 = new int [3][3]; // y relleno

int [][] a2 = { {1, 2, 3}, {4, 5, 6}, {7, 8, 9}};for (int i = 0; i < a1.length; i++) { for (int j = 0; j < a1[0].length; j++) { System.out.println(“valor “ + a[i][j]); }}

En JS los arrays también son objetos. Tienen métodos como sort(), toString(), …

No tienen longitud fija

JavaScript para Programadores Java 52

Date

var fecha = new Date();fecha.setFullDate(2011, 10, 24); //24/11/2010, mes empieza en 0var dia = fecha.getDay();var mes = fecha.getMonth();var anno = fecha.getYear();

JavaScript para Programadores Java 53

Objecto Math

Math.PI;Math.abs(num);Math.asin(num);Math.max(num1, num2);Math.min(num1, num2);Math.pow(x, y);Math.random();Math.toString(num);Math.sqrt(num);

JavaScript para Programadores Java 54

Objecto String

String s = “Hola”;System.out.println(“” + s.length();System.out.println(“” + s.toUpperCase();System.out.println(“” + s.substring(2,3);System.out.println(“” + s.charAt(1);

var s = “Hola”;document.write(“” + s.length + “<br\>”);document.write(“” + s.toUpperCase() + “<br\>”);document.write(“” + s.substr(2, 3) + “<br\>”);document.write(“” + s.chartAt(1) + “<br\>”);

JavaScript para Programadores Java 55

Funciones como objetos (I)

● Las funciones en JS son un tipo de objeto como otro cualquiera

● Podemos declarar una función

● Definir una variable de tipo función

function hola() { alert('¡hola!');}

var saluda = hola;saluda();

JavaScript para Programadores Java 56

Funciones en JS (II)

● Añadir propiedades a una función

● Devolver una función desde otra función

hola.idioma = 'español';alert(hola.idioma);alert(hola.constructor);

function holaMatutino() { return hola;}var saludo = holaMatutino();saludo();

JavaScript para Programadores Java 57

Funciones en JS (III)

● Los métodos simplemente son propiedades cuyo tipo es función

var producto = { nombre: 'libro', precio: 3, Imprime: function() { alert('hola'};}};

JavaScript para Programadores Java 58

Referencias