JavaScript para desarrolladores de C#

Slides:



Advertisements
Presentaciones similares
Introducción a la programación (Clase 2)
Advertisements

Introducción a la programación
Métodos y parámetros.
Introducción a C#.
JavaScript Rogelio Ferreira Escutia. 2 JavaScript Wikipedia, noviembre 2009http://es.wikipedia.org/wiki/Javascript.
Exceptions y Assertions Introducción a la terminología Bloques: try, catch Uso de finally Bloques: try, catch, finally Categorías de Exceptions Excepciones.
Introducción a JavaScript (js)
Scripting en el lado del Cliente
CI-2413 Desarrollo de aplicaciones para Internet
Tablas. Descripción general Introducción a las tablas Creación de tablas Uso de tablas.
Uso de variables de tipo referencia
Asynchronous JavaScript and XML.  No es una nueva forma de programar, es una forma de utilizar los estándares disponibles.  Es el arte de intercambiar.
Desarrollo de Aplicaciones para Internet
Tema 2: Lenguaje PHP básico
Tipo de Dato Abstracto Tipos de datos:
JSP Copyright ISIPE – Instituto de Servicios Informáticos para Empresas – Universidad Siglo 21 – Cualquier copia u otro uso debe ser autorizado expresamente.
BackBone JS Una introducción.
Informática II Prof. Dr. Gustavo Patiño MJ
Genéricos en Java Jaime Ramírez, Ángel Lucas González
Programación Web en Servidor Curso INEM 2010 CSS y jQuery Santiago González Tortosa.
Tipos de Datos.
Encapsulamiento y Abstracción
Fundamentos de Javascript Desarrollo de Aplicaciones para Internet.
CURSO DE VISUAL BASIC .NET MODO GRAFICO
Las variables en PHP Programación en Internet II.
Tema 7: Polimorfismo Antonio J. Sierra. Índice Introducción. Sobrecarga de métodos. Objetos como parámetros. Paso de argumentos. Devolución de objetos.
CONCEPTOS INTRODUCTORIOS DE JAVASCRIPT Preparado por: Prof. Nelliud D. Torres 14/octubre/2004.
PROGRAMACIÓN ORIENTADA A OBJETOS
TRAMPAS EN EL DISEÑO DE LENGUAJES CON RELACIÓN A LOS NOMBRES - REGLAS DE ALCANCE - COMPILACIÓN POR SEPARADO CONTROL DE FLUJO - EVALUACIÓN DE EXPRESIONES.
Eventos. Ejemplos de Eventos Un click del mouse Carga de una imagen o página web Pasar el mouse por encima de un punto del documento Seleccionar un campo.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SCJP 6.0 SEMANA CINCO CONSOLE.
Tema 6: Clases Antonio J. Sierra.
Al término de la clase, el alumno reconoce las ventajas de usar JAVASCRIPT para un proyecto web.
Javascript, DOM y Ajax.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6. SEMANA TRES ASIGNACION.
El lenguaje de programación Java
INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS Objetos.
SCJP SUN CERTIFIED PROGRAMMER FOR JAVA 6
Laboratorio 1 JavaScript.
Análisis de Algoritmos
Análisis y Diseño de Algoritmos. Propiedades : f ( n )  O ( f ( n ) ) a ) O ( f ( n ) )  O ( g ( n ) )  f ( n )  g ( n )
Java. Java nació el año 1991, por un par de ingenieros de la Sun Microsystems.
Estructura de Datos y Algoritmos
Introducción a las redes e Internet Unidad 7: Páginas web dinámicas Clase 1 Unidad 7: Páginas web dinámicas Clase 1.
Sintaxis de C# (Declaraciones y Tipos)
PHP TODO SOBRE PHP.
Contenido: 1- Que es el .Net Framework 2- Arquitectura en .Net
INTRODUCCIÓN A AJAX. ¿Qué es AJAX? Acrónimo de Asynchronous JavaScript And XML No es ninguna tecnología, ni lenguaje de programación. Es una técnica de.
JavaScript Luis Zarza. JavaScript, Historia  Inicialmente se llamaba LiveScript  Lenguaje de guiones (script)  Respaldado por SUN en 1995: JavaScript.
Elementos básicos del lenguaje
PROFESORA: LAURA PATRICIA PINTO PRIETO.  JavaScript es un lenguaje de programación interpretado que se encuentra dentro de una página web HTML. Un lenguaje.
Asesorías sitio web Introducción a JavaScript Ing. Tito Fernando Ale Nieto
Programación avanzada en Java Miguel Ángel Corella 16 de Septiembre de 2005.
Introducción al Lenguaje. ¿ Qué es PHP ? O Hypertext Pre-processoes (PHP) es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en.
ESMERALDA LIMÓN ESCUTIA AURORA MENDOZA PASTRANA RUTH LÓPEZ muñoz I.S.C
PROGRAMACIÓN ORIENTADA A OBJETOS Unidad 1 GENERICIDAD
1 Asignación Dinámica de Memoria Agustín J. González ELO 329.
Tratamiento de excepciones
Práctica Profesional PHP.
I.LENGUAJE DE PROGRAMACIÓN JAVASCRIPT. El JavaScript es un lenguaje de programación interpretado, lo que significa que no necesita ser compilado. Proviene.
Desarrollador Profesional de Juegos Programación III Unidad I Capturar Excepciones.
Programación orientada a objetos La programación orientada a objetos o POO (OOP según sus siglas en inglés) es un paradigma de programación que usa objetos.
2015-BM5A. Introducción Durante años, los programadores se han dedicado a construir aplicaciones muy parecidas que resolvían una y otra vez los mismos.
Estructuras de control selectivas Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Versión Práctica 3.
LICETH CAJAS 3RO ASI 26/10/2010. Es un lenguaje de programación diseñado para crear una amplia gama de aplicaciones que se ejecutan en.NET Framework,
Las interfaces Predicate y Function Versión Unidad Didáctica 17 Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos.
Programación en Java Introducción a Java. Reseña histórica Surge en 1991 por Sun Microsystems Desarrollado para electrodomésticos Se buscaba un código.
Concepto de Tipo y Subtipo Diseño e Implementación Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 10 Versión.
Arrays, Cadenas y Vectores Tipos Genéricos Fundamentos de Programación Departamento de Lenguajes y Sistemas Informáticos Unidad Didáctica 5 Versión
Transcripción de la presentación:

JavaScript para desarrolladores de C# Edin Kapić

JavaScript != C# Edin Kapić

JavaScript: “With or Without You” Brendan Eich “El padre de la criatura”

¿Cómo llegamos hasta aquí? 1995 Netscape Navigator 2.0 Mocha/LiveScript 1996 Internet Explorer 3.0 JScript 1997 ECMAScript

1999 XMLHttpRequest (OWA Exchange 2000) 2005 Jesse James Garrett AJAX 2006 John Resig jQuery

TypeScript 2009 PhoneGap 2010 Node.js 2011 Windows 8 2012 SharePoint 2013 TypeScript

Hay que saltar de una vez

Las herramientas Firebug / IE Dev Tools JSLint JSHint JsFiddle Firebug Lite Las herramientas https://getfirebug.com/firebug-lite.js

JavaScript es bueno ... Lenguaje dinámico Notación literal potente “Loose-typed” “JS is Lisp in C Clothing” (Douglas Crockford) http://bit.ly/Qn0qLi

... pero tiene cosas malas Variables globales implícitas Variable hoisting Function hoisting Prototype Leaking == '' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true ' \t\r\n ' == 0 // true

JavaScript != C#

C# JavaScript Corta el pan Tiene mecanismos de seguridad Es complejo Te puedes hacer daño Es un trozo de metal con un mango

Bueno en C#, malo en JS La sintaxis parecida nos puede llevar a hacer lo que en C# son buenas prácticas ...pero en JS pueden tener consecuencias graves “If it walks like a duck...”

JS != C# 1: Tipos de datos Simples Complejos Number String Boolean Undefined Null Object Array Function RegExp Date Undefined = No sé de que m’estàs parlant o no m’has donat cap valor inicial Null = M’has dit que no té cap valor, explícitament Typeof(null) == object (és un bug de JS) Els wrappers també son objects, però és millor no fer-los servir

JS != C# 2: Variables globales Toda variable no asignada a un objeto, se asigna a window var a = 1; window.a = 1; http://jsfiddle.net/wQDwN/

JS != C# 3: “Variable Hoisting” Sólo dos niveles: global i función { } no crea ámbito de variable (como C#) La variable declarada sube hasta el inicio de la función en la que está declarada /*.....*/ var a = 1; var a; /*.....*/ a = 1; http://jsfiddle.net/NE2Km/3/

Recomendación Ser consciente de los tipos de datos No contaminar window Declarar variables lo más arriba possible (hacer hoisting explícito)

Test var imAGlobal = true; function globalGrabber() { imAGlobal = false; return imAGlobal; } console.log(imAGlobal); console.log(globalGrabber()); console.log(imAGlobal); // true o false?

Test var imAGlobal = true; function globalGrabber() { var imAGlobal = false; return imAGlobal; } console.log(imAGlobal); console.log(globalGrabber()); console.log(imAGlobal); // true o false? http://jsfiddle.net/JxESg/

JS != C# 4: this this apunta al objeto contenedor de la función en la que está (en ejecución) y es modificable console.log(this); // window var myFunction = function() { console.log(this); } myFunction(); // window http://jsfiddle.net/UsCtz/ y http://jsfiddle.net/8tBEM/

JS != C# 5: Wrappers JS estilo C# JS estilo puro var myVar = new Object(); var myArr = new Array(); JS estilo puro var myVar = {}; var myArr = [];

Recomendación No usar wrappers innecesariamente Aprender la notación literal de objetos de JS

Test var a = new Object(); a.nombre = 'Edin'; console.log(a.nombre);

Test var a = { nombre: 'Edin' }; console.log(a.nombre);

Test var a = function() { this.nombre = 'Edin'; return this; }(); console.log(a.nombre);

Test var a = function() { this.nombre = 'Edin'; return this; }(); console.log(a.document.URL);

Test var a = function() { var obj = {}; obj.nombre = 'Edin'; return obj; }(); console.log(a.document.URL);

JS != C# 6: Truthy / Falsey Valores que dan true Valores que dan false "0" "false" Objetos vacíos Todos los demás false "" null undefined NaN

Recomendación Simplificar los condicionales if(myVar != "" || myVar != undefined) if(myVar) Inicializar los valores por defecto if(myVar == "") { myVar = "Hola"; } myVar = myVar || "hola";

JS != C# 7: Operador == Comparación if(false == 0) // true if(false === 0) // false El operador == intenta convertir los valores y casi siempre es algo que no queremos

Comparación “indeterminista” (false == 0); // true (false == ""); // true (0 == ""); // true (null == false); // false (null == null); // true (undefined == undefined); // true (undefined == null); // true (NaN == null); // false (NaN == NaN); // false

Recomendación Usar los operadores === i !== por defecto No hacen la conversión de valores Se comportan como los operadores “habituales” == y != de C#

JS != C# 8: Otras “perlas” parseInt() Operador + http://jsfiddle.net/tbMX2/ NaN http://jsfiddle.net/vVgB9/ “Prototype Leak” Inserción de ; Parseint leading 0  octal

Funciones

Funciones de JavaScript Son objetos, por tanto se les pueden agregar propiedades Se pueden pasar como parámetros a otras funciones Hay dos maneras de declarar funciones

Manera 1: Declaración La declaración de la función se hace con function foo() { /* .... */ } La función declarada hace “hoisting” y està disponible en todo el código JS, independientemente del orden de ejecución Validar amb JSLint per a veure el warning http://jsfiddle.net/TQ6LG/

Manera 2: Expresión También podemos asignar la función a una variable mediante una expresión: var foo = function () { /* ... */ }; En este caso no hay “hoisting” Podemos pensar que una declaración es realmente una expresión puesta al principio http://jsfiddle.net/NrQhM/

Equivalencias function foo() { /* .... */ } var foo = function () { /* ... */ }; var foo = function foo () { /* ... */ }; var foo = function bar () { /* ... */ }; Las dos últimas se usan para funciones recursivas Las expresiones hacen explícita la declaración

Código de un solo uso (IIFE) Podemos asignar una función anónimamente y no recogerla como resultado Útil para ejecutar un código privado y de una sola vez (function () { /* ... */ })(); http://jsfiddle.net/YAe9S/1/

Anidamiento de funciones Las funcions son objetos y pueden contener otras funciones var foo = function() { function bar() { /* ... */ } return bar(); }; foo(); http://jsfiddle.net/XUswD/

Cierres (Closures) El cierre es una manera de asociar la función con sus parámetros de entrada Es el mantenimiento de las variables locales después de que la función haya acabado var bind = function(x) { return function(y) { return x + y; }; } var plus5 = bind(5); alert(plus5(3)); http://jsfiddle.net/xWAm4/

Recomendaciones Dedicar tiempo para jugar con las funciones en JS es imprescindible Hay muchos ejemplos que se pueden probar con JsFiddle Comprender los cierres es importante para entender los event handlers y encapsulamiento (http://jsfiddle.net/GBfPf/)

JavaScript en el siglo XXI

¿Vamos tirando?

¿O estamos al día?

Regla #1: Unobtrusive JavaScript El JS se tieen que añadir sin impactar el HTML de la página <input type="text" name="date“ onchange="validateDate()" /> window.onload = function() { document.getElementById('date').onchange = validateDate; };

Regla #2: Modularidad No colisionar con otros JS presentes (es decir, “comportarnos bien”) Encapsulemos nuestro código en namespaces Usemos try/catch

Métodos de encapsulamiento Ninguno (objeto window) Todo privado (función anónima auto-ejecutada) Todo público (objeto literal) Mezcla público/privado (Revealing Module)

Objeto literal var car = { status: "off", start: function() { this.status = "on"; }, getStatus: function() { return "the car is " + this.status; } }; car.start(); alert(car.getStatus()); http://jsfiddle.net/DY2Zw/

Revealing Module var car = (function() { var pubCar = {}, var innerStatus = "off"; pubCar.start = function() { innerStatus = "on"; } pubCar.status = function() { return "the car is “ + innerStatus; } return pubCar; }()); car.start(); alert(car.status()); http://jsfiddle.net/AUzNT/

Recomendaciones Usar Revealing Module para tenir el encapsulamiento totalmente controlado por nosotros Aislarnos de otras librerías http://jsfiddle.net/uKuLw/ Usar objetos literales para objetos sencillos (p.ej. DTOs) La sintaxis es diferente

Regla #3: Abstracción Nos abstraeremos de los detalles del navegador concreto Existen librerías que unifican y abstraen las diferencias: jQuery, AmplifyJS, Modernizr

Microsoft TypeScript Es un lenguaje basado en JavaScript Añade la comprobación en tiempo de compilación de referencias, tipos, clases e interfaces (Trans)compila a JavaScript “puro” Disponible para VS2012 http://www.typescriptlang.org/

Resumen

Recomendaciones Invertir tiempo en aprender los principios de JS y experimentar con los ejemplos Repasar el código existente con JSHint Tener en cuenta las librerías de JS como factor arquitectónico en las aplicaciones JS está aquí para quedarse

Bibliografia Douglas Crockford “JavaScript: The Good Parts” (O’Reilly) Addy Osmani “JavaScript Design Patterns” http://bit.ly/bMyoQ9 http://jsbooks.revolunet.com/ http://superherojs.com