JavaScript Inicio
JavaScript Inicio
JavaScript está
en todas
parte
navegadores, televisiones, teléfonos,
s servidores, robots…
Java es una opción
JavaScript
es una imposición
(es el lenguaje de la web)
Si no puedes con tu
enemigo, únete a él
Java y
JavaScript son
“casi”
iguales…
no?
no hay problema…
Java y
JavaScript son
“casi”
iguales…
no?
vamos al lío…
El lenguaje JavaScript
(en los navegadores web)
El lenguaje JavaScript
• Ejecución
Inicialmente interpretado
Actualmente se ejecuta con máquinas virtuales
(V8 en GoogleChrome)
Librerías JavaScript
• DOM (Document Object Model)
Librería para manipular el documento HTML
cargado en el navegador (eventos, elementos,
estilos…)
• BOM (Browser Object Model)
Librería para gestionar aspectos del navegador:
historial, peticiones de red AJAX, etc…
* https://blogs.oracle.com/jrose/entry/fixnums_in_the_vm
Tipos de datos básicos
• Number
Números enteros y reales de cualquier precisión
Si no estuviéramos tan preocupados de la eficiencia en Java sería
así
• String
Cadenas de caracteres
Inmutable (como en Java)
Operador + (como en Java)
Como no hay tipo caracter, se usa un string de tamaño 1
Comillas simples o dobles
• Boolean
true o false (como en Java)
Tipos de datos básicos
• Variables
Es un lenguaje dinámico (con tipado dinámico)
Las variables se tienen que declarar pero no se indica
el tipo
//La variable edad tendrá un valor de 34
var edad = 34;
var encontrado = false;
• Diferentes a Java
¿Dos variables apuntan al mismo objeto? === (en java es ==)
¿Dos variables apuntan a distintos objetos? !== (en java es !=)
En strings se comporta como equals en Java
En arrays se comporta como == en Java
Arrays (y listas)
Arrays
• Igual que en Java
El acceso para lectura o escritura es con [ ]
Tienen la propiedad length
Empiezan por cero
La asignación de variables no copia el array, las
variables apuntan al mismo objeto
El operador === compara si son el mismo objeto (no
que tengan el contenido igual)
Los arrays de varias dimensiones son arrays de arrays.
Hay que crear de forma explícita los niveles.
Arrays
• Diferente a Java
Los literales son con [ ] en vez de { }
No se pone new en el literal
var array = new Array();
var empty = [];
var numbers = ['zero','one','two','three']
} catch (e) {
alert (e);
return false;
} finally {
//do cleanup, etc here
}
empieza la fiesta…
Funciones
Funciones
• JS es un lenguaje funcional en el sentido de
que las funciones son ciudadanos de primera
clase
• Se pueden declarar con nombre
function func(param){
console.log(param);
}
func(4); // Imprime 4
Funciones
• Se pueden declarar sin nombre (anónimas) y
asignarse a una variable o usarse como
parámetro
func(4); // Imprime 4
Funciones
• En Java también tenemos funciones*
func.apply(4); // Imprime 4
func.apply(4); // Imprime 4
func(3);
a.uno; // Valor 1
a.tres; // Valor 3
a.toString() // Ejecuta el método toString
nombre: "Pepe",
salario: 700,
toString: function(){
return "Nombre:"+this.nombre+",Salario:"+this.salario;
}
};
//Devuelve 700
var salario = empleado.salario;
return empleado;
}
Orientación a Objetos
• Crear muchos objetos con la misma estructura
Esa función de construcción se utilizaría:
//Devuelve 700
var salario = empleado.salario;
var prototipoEmpleado = {
toString: function(){
return "Nombre:"+this.nombre+",Salario:"+this.salario;
}
};
Empleado.protoype.toString = function(){
return "Nombre:"+this.nombre+",
Salario:"+this.salario;
};
Orientación a Objetos
• Simulación de clases en JS
http://micaelgallego.github.io/blog/Orientacion-a-Objetos-en-JavaScript-comparado-con-Java/
Orientación a Objetos
• Simulación de clases con prototipos
Es la que hemos visto en los ejemplos anteriores
Se basa en tratar a los prototipos como si fueran
clases
El primer objeto de la cadena tiene los atributos (con
los valores particulares)
El prototipo de ese objeto actúa como su clase y tiene
los métodos
Dos objetos de “la misma clase” tienen el mismo
prototipo y por tanto los mismos métodos
Orientación a Objetos
Clase en Java Simulación de clase en JS con prototipos
public class Empleado { function Empleado(nombre, salario){
prototype prototype
Pepe: Jefe
nombre = “Pepe”
salario = 500
despacho = “D34” En JavaScript todo
Son objetos. No hay clases
Herencia
Simulación de clase hija en JavaScript
Jefe.prototype = Object.create(Empleado.prototype);
Jefe.prototype.toString = function(){
return Empleado.prototype.toString.call(this)+"
Despacho:"+this.despacho;
};
Herencia
Simulación de clase hija en JavaScript
Llamada al
function Jefe(nombre, salario, despacho){ constructor de la
Empleado.call(this, nombre, salario); clase padre
this.despacho = despacho;
} Hacemos una
llamada como si
Jefe.prototype = Object.create(Empleado.proto type);
fuera una función
normal (no como
Jefe.prototype.toString = function(){
constructor),
return Empleado.prototype.toString.call(th is)+"
Despacho:"+this.despacho; asociando this al
}; objeto que se está
creando
Herencia El prototipo de todos
los objetos Jefe es un
objeto Empleado
Simulación de clase hija en JavaScript
De esta forma, los
métodos que no
function Jefe(nombre, salario, despacho){ estén en “la clase”
Empleado.call(this, nombre, salario); Jefe se buscarán en la
this.despacho = despacho;
“clase Empleado”
}
Jefe.prototype = Object.create(Empleado.prototype);
Jefe.prototype.toString = function(){
return Empleado.prototype.toString.call(this)+"
Despacho:"+this.despacho;
};
Herencia
Simulación de clase hija en JavaScript
Jefe.prototype = Object.create(Empleado.prototype);
Jefe.prototype.toString = function(){
return Empleado.prototype.toString.call(this)+"
Despacho:"+this.despacho;
}; Llamada al método de la clase
padre desde la redefinición del
método en la clase hija
si no hay clases...
_.each(primeNumbers, listIn('#primenumbers'));
var square = function(num) { return num * num; };
_.each(
_.map(primeNumbers, square), listIn('#theirsquares'));
});
Estructura de una aplicación
• En JavaScript es bastante natural llamar a las
funciones o los métodos como $ o _
• Es también muy habitual “abusar” de la
sobrecarga de funciones y hacer que se
comporten de forma radicalmente diferente
dependiendo del tipo del parámetro
• No tienen método estáticos, pero usan objetos
sin estado accesibles globalmente con
métodos “de utilidad”
vamos a hacer las
paces
JavaScript en I
la JVM
JavaScript en la JVM
• Oracle (y antes Sun) son conscientes de que su
fuente de ingresos es la plataforma, no tanto el
lenguaje (que también)
• Soportan oficialmente JRuby
• Han modificado la JVM para que sea
“dynamic language friendly”
• Ellos también quieren ser modernos como
nosotros
Proyecto Nashorn (Rhino)
JavaScript en la JVM
• Ejecución nativa en la JVM (con generación de
bytecode e invokedynamic)
• Estándar completo ECMAScript 5.1
• Interoperabilidad completa Java y JavaScript
• Ejecución de código JavaScript en aplicaciones
Java con la librería de scripting JSR 223
• Se publica oficialmente con Java 8
JavaScript en la JVM
• Herramienta de ejecución en línea de
comandos
jjs -fx fxscript.js
try {
e.put("x", 10);
e.put("y", 20);
e.eval("var z = x + y;");
System.out.println(((Number) e.get("z")).intValue());
https://avatar.java.net/
*casi
Muchas
gracias!!
JavaScript
para Javeros
I Cómo ser moderno
y no morir en el
intento ;)