JavaScript para desarrolladores C#
Luis Ruiz Pavón
Back-End Developer
http://geeks.ms/blogs/lruiz
@luisruizpavon
DISCLAIMER
No soy un ninja!!!
¿Cuál es el
problema con
JavaScript?
¿Por qué
debemos
aprender
Javacript?
Comparando los lenguajes
C#
Tipado fuerte
Estático
Herencia clásica
Clases
Constructores
Métodos
JavaScript
Tipado débil
Dinámico
Herencia por prototipos
Funciones
Funciones
Funciones
Demo
Comparación de lenguajes
Duck Typing
Duck typing
public class Persona
{
public string Name { get; set; }
}
public class Educado
{
public void Saluda(Persona persona)
{
Console.WriteLine("Hola {0}", persona.Name);
}
}
Duck typing
var Persona = function (name) {
this.name = name;
}
function educado(arg1) {
console.log('Hola ' + arg1.name);
}
var p = new Persona("Luis");
educado(p);
educado({ name: "Juan" });
JavaScript
Tipos
• Tipos por valor
• boolean
• string
• number
• Tipos por referencia
• object
• Delegados
• function
• Especiales
• null
• undefined
http://jsfiddle.net/luisruizpavon/3NkD3
Ámbito global
Toda variable no asignada a un objeto se asigna por defecto a window.
http://jsfiddle.net/luisruizpavon/y7Wpa/
var myVar = 1;
function myFunction() {
alert(myVar);
alert(window.myVar);
}
myFunction();
Variable hoisting
Los { } no crean ámbito como en C# (Sólo las funciones)
public MainPage()
{
if (true)
{
var title = "Main";
}
this.InitializeComponent();
}
La variable declarada dentro de una función sube hasta el principio de la función.
http://jsfiddle.net/luisruizpavon/BXv7F/
this
C#
• La palabra clave this hace referencia a la instancia actual de la clase.
JS
• Hace referencia al propietario de la función que la está invocando y se
puede modificar haciendo uso de call/apply
http://jsfiddle.net/luisruizpavon/q2GeU/
this - Patrón de invocación por método
Una función es almacenada como propiedad de un objeto
convirtiéndose así en lo que denominamos un método.
var myObj = {
name: 'Luis',
lastName: 'Ruiz',
fullName: function () {
return this.name + ' ' + this.lastName;
}
};
alert(myObj.fullName());
Truthy y Falsy
• Valores que siempre dan false:
• false
• 0
• ""
• null
• undefined
• NaN
Todos los demás valores son siempre true, incluyendo “0”, “false”,
funciones vacías, arrays vacíos y objetos vacíos.
Los operadores ==/!=
Estos 2 operadores no funcionan igual que en C#. Determinan la
igualdad con type coalescing (Intenta convertir el valor cast)
alert("ola ke ase" == "ola ke ase");
alert(1 == 1);
alert(1 == "1");
Usar siempre === y !=== (.Equals() de C#)
http://jsfiddle.net/luisruizpavon/RXaU3/
Funciones I
Pueden parecernos que son como los métodos en C#, pero no es así:
http://jsfiddle.net/luisruizpavon/smGvY/
function myFunction(arg1, arg2, arg3) {
alert(arg1);
alert(arg2);
alert(arg3);
}
myFunction(1);
Funciones II
• ¿Sobrecarga de funciones?
http://jsfiddle.net/luisruizpavon/rQ6mf/
function myFunction(arg1) {
alert("Uno");
}
function myFunction(arg1, arg2) {
alert("Dos");
}
function myFunction(arg1, arg2, arg3) {
alert("Tres");
}
myFunction(1);
Funciones III
• El objeto “arguments”
• Sólo está disponible en el cuerpo de la función
http://jsfiddle.net/luisruizpavon/MjDVm/
function myFunction(arg1) {
alert(arguments.length);
}
myFunction(1);
Funciones IV
• Todas las funciones retornan un valor
• Sino está definido, retorna ‘undefined’
• return; También retorna ‘undefined’
http://jsfiddle.net/luisruizpavon/VmeSf/
function myFunction() {
return;
}
var my = myFunction(1);
alert(typeof my);
Funciones V
• Las funciones son objetos. Tienen propiedades y funciones.
• Podemos pasar como parámetros de una función otras funciones.
http://jsfiddle.net/luisruizpavon/MwsbC/
function myFunction(arg1) {
alert(arg1);
}
alert(myFunction.length);
alert(myFunction.toString());
Patrón módulo
• Nos ayuda a mantener el contexto global lo más limpio y seguro
posible.
• Bootstraper
• Un ejemplo de uso son los plugins de jQuery.
http://jsfiddle.net/luisruizpavon/Mjkpc/
Frameworks
• Require.js – Cargador de módulos JavaScript (ServiceLocator)
• Underscore.js – Utilidades (Métodos extensores)
• jQuery
• TypeScript
• linq.js - LINQ for JavaScript
• Backbone - MVC
• Knockout - MVVM
• AngularJS – Google
• Handlebars.js
• …
http://jsfiddle.net/luisruizpavon/Qd96w/
Herramientas
• Developer Tools
• Firebug
• Chrome Developer Tools
• JSHint - http://jshint.com
• jsfiddle - http://jsfiddle.net
• Visual Studio
• WebStorm - Jetbrains
http://jsfiddle.net/luisruizpavon/Mjkpc/
Demo
Beezy
Q&A
Luis Ruiz Pavón
Back-End Developer
http://geeks.ms/blogs/lruiz
@luisruizpavon
GRACIAS POR SU ATENCIÓN
JavaScript para desarrolladores c#

JavaScript para desarrolladores c#

  • 1.
  • 2.
    Luis Ruiz Pavón Back-EndDeveloper http://geeks.ms/blogs/lruiz @luisruizpavon
  • 3.
  • 4.
    ¿Cuál es el problemacon JavaScript?
  • 5.
  • 8.
    Comparando los lenguajes C# Tipadofuerte Estático Herencia clásica Clases Constructores Métodos JavaScript Tipado débil Dinámico Herencia por prototipos Funciones Funciones Funciones
  • 9.
  • 10.
  • 11.
    Duck typing public classPersona { public string Name { get; set; } } public class Educado { public void Saluda(Persona persona) { Console.WriteLine("Hola {0}", persona.Name); } }
  • 12.
    Duck typing var Persona= function (name) { this.name = name; } function educado(arg1) { console.log('Hola ' + arg1.name); } var p = new Persona("Luis"); educado(p); educado({ name: "Juan" });
  • 13.
  • 14.
    Tipos • Tipos porvalor • boolean • string • number • Tipos por referencia • object • Delegados • function • Especiales • null • undefined http://jsfiddle.net/luisruizpavon/3NkD3
  • 15.
    Ámbito global Toda variableno asignada a un objeto se asigna por defecto a window. http://jsfiddle.net/luisruizpavon/y7Wpa/ var myVar = 1; function myFunction() { alert(myVar); alert(window.myVar); } myFunction();
  • 16.
    Variable hoisting Los {} no crean ámbito como en C# (Sólo las funciones) public MainPage() { if (true) { var title = "Main"; } this.InitializeComponent(); } La variable declarada dentro de una función sube hasta el principio de la función. http://jsfiddle.net/luisruizpavon/BXv7F/
  • 17.
    this C# • La palabraclave this hace referencia a la instancia actual de la clase. JS • Hace referencia al propietario de la función que la está invocando y se puede modificar haciendo uso de call/apply http://jsfiddle.net/luisruizpavon/q2GeU/
  • 18.
    this - Patrónde invocación por método Una función es almacenada como propiedad de un objeto convirtiéndose así en lo que denominamos un método. var myObj = { name: 'Luis', lastName: 'Ruiz', fullName: function () { return this.name + ' ' + this.lastName; } }; alert(myObj.fullName());
  • 19.
    Truthy y Falsy •Valores que siempre dan false: • false • 0 • "" • null • undefined • NaN Todos los demás valores son siempre true, incluyendo “0”, “false”, funciones vacías, arrays vacíos y objetos vacíos.
  • 20.
    Los operadores ==/!= Estos2 operadores no funcionan igual que en C#. Determinan la igualdad con type coalescing (Intenta convertir el valor cast) alert("ola ke ase" == "ola ke ase"); alert(1 == 1); alert(1 == "1"); Usar siempre === y !=== (.Equals() de C#) http://jsfiddle.net/luisruizpavon/RXaU3/
  • 21.
    Funciones I Pueden parecernosque son como los métodos en C#, pero no es así: http://jsfiddle.net/luisruizpavon/smGvY/ function myFunction(arg1, arg2, arg3) { alert(arg1); alert(arg2); alert(arg3); } myFunction(1);
  • 22.
    Funciones II • ¿Sobrecargade funciones? http://jsfiddle.net/luisruizpavon/rQ6mf/ function myFunction(arg1) { alert("Uno"); } function myFunction(arg1, arg2) { alert("Dos"); } function myFunction(arg1, arg2, arg3) { alert("Tres"); } myFunction(1);
  • 23.
    Funciones III • Elobjeto “arguments” • Sólo está disponible en el cuerpo de la función http://jsfiddle.net/luisruizpavon/MjDVm/ function myFunction(arg1) { alert(arguments.length); } myFunction(1);
  • 24.
    Funciones IV • Todaslas funciones retornan un valor • Sino está definido, retorna ‘undefined’ • return; También retorna ‘undefined’ http://jsfiddle.net/luisruizpavon/VmeSf/ function myFunction() { return; } var my = myFunction(1); alert(typeof my);
  • 25.
    Funciones V • Lasfunciones son objetos. Tienen propiedades y funciones. • Podemos pasar como parámetros de una función otras funciones. http://jsfiddle.net/luisruizpavon/MwsbC/ function myFunction(arg1) { alert(arg1); } alert(myFunction.length); alert(myFunction.toString());
  • 26.
    Patrón módulo • Nosayuda a mantener el contexto global lo más limpio y seguro posible. • Bootstraper • Un ejemplo de uso son los plugins de jQuery. http://jsfiddle.net/luisruizpavon/Mjkpc/
  • 27.
    Frameworks • Require.js –Cargador de módulos JavaScript (ServiceLocator) • Underscore.js – Utilidades (Métodos extensores) • jQuery • TypeScript • linq.js - LINQ for JavaScript • Backbone - MVC • Knockout - MVVM • AngularJS – Google • Handlebars.js • … http://jsfiddle.net/luisruizpavon/Qd96w/
  • 28.
    Herramientas • Developer Tools •Firebug • Chrome Developer Tools • JSHint - http://jshint.com • jsfiddle - http://jsfiddle.net • Visual Studio • WebStorm - Jetbrains http://jsfiddle.net/luisruizpavon/Mjkpc/
  • 29.
  • 30.
  • 31.
    Luis Ruiz Pavón Back-EndDeveloper http://geeks.ms/blogs/lruiz @luisruizpavon GRACIAS POR SU ATENCIÓN

Notas del editor

  • #11 El Duck Typing, en los lenguajes de programación, es una técnica para determinar si un objeto es una instacia de una determinada clase basándose únicamente en los métodos que implementa.
  • #15 typeof operator Null & undefined example
  • #16 Recomendación: No contaminar window
  • #17 Recomendación: Hacer hoisting explicito
  • #20 Recomendación con ejemplo: Simplificar los condicionales, Incializar valores por defecto (Namespaces)
  • #26 Podemos almacenarla en una variable y luego invocarla (Delegado anónimo)