58
Arquitectura de Servicios Telemáticos JavaScript para Programadores Java Departamento de Ingeniería de Sistemas Telemáticos

JavaScript para Programadores Java

Embed Size (px)

DESCRIPTION

JavaSc

Citation preview

Page 1: JavaScript para Programadores Java

Arquitectura de Servicios Telemáticos

JavaScript para Programadores Java

Departamento de Ingeniería de Sistemas Telemáticos

Page 2: JavaScript para Programadores Java

JavaScript para Programadores Java 2

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

Page 3: JavaScript para Programadores Java

JavaScript para Programadores Java 3

JavaScript

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

● Vamos a ver similitudes y diferencias

Page 4: JavaScript para Programadores Java

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!

Page 5: JavaScript para Programadores Java

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'.

Page 6: JavaScript para Programadores Java

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

Page 7: JavaScript para Programadores Java

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!

Page 8: JavaScript para Programadores Java

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”;

Page 9: JavaScript para Programadores Java

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;

Page 10: JavaScript para Programadores Java

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

Page 11: JavaScript para Programadores Java

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;

Page 12: JavaScript para Programadores Java

JavaScript para Programadores Java 12

Ejemplo

Page 13: JavaScript para Programadores Java

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()

Page 14: JavaScript para Programadores Java

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

Page 15: JavaScript para Programadores Java

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

Page 16: JavaScript para Programadores Java

JavaScript para Programadores Java 16

Estructuras de control● Condicionales

– if

– if /else

– switch● Bucles

– while-do

– do-while

– for

– for-each

Page 17: JavaScript para Programadores Java

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!

Page 18: JavaScript para Programadores Java

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!

Page 19: JavaScript para Programadores Java

JavaScript para Programadores Java 19

Bucle while-do

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

¡Igual en Java/Javascript!

Page 20: JavaScript para Programadores Java

JavaScript para Programadores Java 20

Bucle do-while

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

¡Igual en Java/Javascript!

Page 21: JavaScript para Programadores Java

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!

Page 22: JavaScript para Programadores Java

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

Page 23: JavaScript para Programadores Java

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.

Page 24: JavaScript para Programadores Java

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

Page 25: JavaScript para Programadores Java

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>

Page 26: JavaScript para Programadores Java

JavaScript para Programadores Java 26

Funciones anónimas

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

Page 27: JavaScript para Programadores Java

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

Page 28: JavaScript para Programadores Java

JavaScript para Programadores Java 28

Ejemplo Clausuras

Page 29: JavaScript para Programadores Java

JavaScript para Programadores Java 29

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

(function() {...})

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

Page 30: JavaScript para Programadores Java

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

Page 31: JavaScript para Programadores Java

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");}

Page 32: JavaScript para Programadores Java

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

Page 33: JavaScript para Programadores Java

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í

Page 34: JavaScript para Programadores Java

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

Page 35: JavaScript para Programadores Java

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]”);

Page 36: JavaScript para Programadores Java

JavaScript para Programadores Java 36

Crear objetos - propiedades

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

Page 37: JavaScript para Programadores Java

JavaScript para Programadores Java 37

Crear objeto - literales

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

Page 38: JavaScript para Programadores Java

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();

Page 39: JavaScript para Programadores Java

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);

Page 40: JavaScript para Programadores Java

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());

Page 41: JavaScript para Programadores Java

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());

Page 42: JavaScript para Programadores Java

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());

Page 43: JavaScript para Programadores Java

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());

Page 44: JavaScript para Programadores Java

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);

Page 45: JavaScript para Programadores Java

JavaScript para Programadores Java 45

Ejemplo for/in

Page 46: JavaScript para Programadores Java

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

Page 47: JavaScript para Programadores Java

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

Page 48: JavaScript para Programadores Java

JavaScript para Programadores Java 48

Subclases

Page 49: JavaScript para Programadores Java

JavaScript para Programadores Java 49

Bibliotecas de JavaScript

● JavaScript “Core Objects”– Arrays

– Date

– Math

– String

Page 50: JavaScript para Programadores Java

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;}

Page 51: JavaScript para Programadores Java

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

Page 52: JavaScript para Programadores Java

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();

Page 53: JavaScript para Programadores Java

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);

Page 54: JavaScript para Programadores Java

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\>”);

Page 55: JavaScript para Programadores Java

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();

Page 56: JavaScript para Programadores Java

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();

Page 57: JavaScript para Programadores Java

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'};}};

Page 58: JavaScript para Programadores Java

JavaScript para Programadores Java 58

Referencias