WTF Javascript - FrontInRio 2011

69
WTF Javascript Leo Balter

description

Slides da palestra apresentada no dia 18 de Junho de 2011 no evento FrontInRio

Transcript of WTF Javascript - FrontInRio 2011

Page 1: WTF Javascript - FrontInRio 2011

WTF Javascript

Leo Balter

Page 2: WTF Javascript - FrontInRio 2011

Leo Balter@leobalter

Page 3: WTF Javascript - FrontInRio 2011
Page 4: WTF Javascript - FrontInRio 2011

Javascript é bom!

Page 5: WTF Javascript - FrontInRio 2011

Design Patterns vs. Padrões

Page 6: WTF Javascript - FrontInRio 2011

Padrões

•Patterns

•Standards

•Default

Page 7: WTF Javascript - FrontInRio 2011

Escala Pentatônica

Page 8: WTF Javascript - FrontInRio 2011

Patterns são modelos funcionais, mas não precisamos adota-los sempre!

Page 9: WTF Javascript - FrontInRio 2011

Anti Padrões

fórmulas perfeitas para seu projeto dar errado!

(1 < 2 < 3); // false!

Page 10: WTF Javascript - FrontInRio 2011

document.all

Page 11: WTF Javascript - FrontInRio 2011

O Javascript já foi assustador no ano passado!

Page 12: WTF Javascript - FrontInRio 2011

O retorno maldito!

Page 13: WTF Javascript - FrontInRio 2011

function(){    return    {        trololo: “document.all”    }}

Page 14: WTF Javascript - FrontInRio 2011

function(){    return;    {        trololo: “document.all”    }}

Page 15: WTF Javascript - FrontInRio 2011

function() {return {trololo: “document.all”

}}

Page 16: WTF Javascript - FrontInRio 2011

Loop desgraçado

Page 17: WTF Javascript - FrontInRio 2011

var nome = [ “Leo”, “Balter” ];for (i in nome) {console.log(nome[i]);

}

Page 18: WTF Javascript - FrontInRio 2011

var nome = [ “Leo”, “Balter” ];for (i in nome) {console.log(nome[i]);

}

Page 19: WTF Javascript - FrontInRio 2011

var nome = [ “Leo”, “Balter” ];for (i in nome) {console.log(nome[i]);

}

Page 20: WTF Javascript - FrontInRio 2011

var pessoa = function (a, b) {    this.nome = a,     this.sobrenome = b };

pessoa.prototype.falar = function () {    console.log("olá");};

var mim = new pessoa("Leo", "Balter");

for (i in mim) {    console.log(mim[i]); // wtf}

Page 21: WTF Javascript - FrontInRio 2011

var pessoa = function (a, b) {    this.nome = a,     this.sobrenome = b };

pessoa.prototype.falar = function () {    console.log("olá");};

var mim = new pessoa("Leo", "Balter");

for (i in mim) {    console.log(mim[i]); // wtf}

Page 22: WTF Javascript - FrontInRio 2011
Page 23: WTF Javascript - FrontInRio 2011

var nome = [ “Leo”, “Balter” ];for (i in nome) {if (nome.hasOwnProperty(i)) {console.log(nome[i]); // wtf

}}

Page 24: WTF Javascript - FrontInRio 2011

Globais e locais

Page 25: WTF Javascript - FrontInRio 2011

imGlobal = 10;

function changeGlobal() { console.log(imGlobal); // 10 (*)    imGlobal = 20;}

changeGlobal();

console.log(imGlobal); // 20

Page 26: WTF Javascript - FrontInRio 2011

imGlobal = 10;

function changeGlobal() {    console.log(imGlobal); // undefined          var imGlobal = "What am I?";}

changeGlobal();

Page 27: WTF Javascript - FrontInRio 2011

imGlobal = 10;

function changeGlobal() {    var imGlobal;

console.log(imGlobal); // undefined          imGlobal = "What am I?";}

changeGlobal();

Page 28: WTF Javascript - FrontInRio 2011

Sempre declare suas variáveis no início da função!

Page 29: WTF Javascript - FrontInRio 2011

imGlobal = 10;

function changeGlobal() {    console.log(window.imGlobal); // 10!          var imGlobal = "What am I?";}

changeGlobal();

Page 30: WTF Javascript - FrontInRio 2011

Conheça seu escopo!

Variáveis dentro de blocos de loop, ifs ou switches não criam um escopo interno!

Page 31: WTF Javascript - FrontInRio 2011

function foo() {    var bar = [ 123, 234, 345 ],            x = 5;    for (var i = 0; i < bar.length; i++) {        var x = i;    }        console.log(i);}foo();

Page 32: WTF Javascript - FrontInRio 2011

function foo() {    var bar = [ 123, 234, 345 ],            x = 5;    for (var i = 0; i < bar.length; i++) {        var x = i;    }        console.log(i, x); // 3, 3}foo();

Page 33: WTF Javascript - FrontInRio 2011

function foo() {    var bar = [ 123, 234, 345 ],            x = 5;    for (var i = 0; i < bar.length; i++) {        var x = i;    }        console.log(i, x); // 3, 3}foo();

Page 34: WTF Javascript - FrontInRio 2011

Valores verdadeiros podem ser falsos!

Page 35: WTF Javascript - FrontInRio 2011

console.log(!!0); // falseconsole.log(!!10); // trueconsole.log(!!"0");  // true

console.log(0 == ""); // trueconsole.log(!!0 == !!""); // true

Page 36: WTF Javascript - FrontInRio 2011

console.log(!!0); // falseconsole.log(!!10); // trueconsole.log(!!"0");  // true

console.log(0 == "0"); // trueconsole.log(!!0 == !!"0"); // false

Page 37: WTF Javascript - FrontInRio 2011

Pare de utilizar == e comece a utilizar === agora!

console.log(90 === "90"); // falseconsole.log(0 !== false); // true

Page 38: WTF Javascript - FrontInRio 2011

Fuja dos números octais!

Page 39: WTF Javascript - FrontInRio 2011

parseInt(“042”); // 34

parseInt(“042”, 10); // 42

Page 40: WTF Javascript - FrontInRio 2011

Cuidado com os tipos

Page 41: WTF Javascript - FrontInRio 2011

120 + “7”; // “1207”

1 < 2 < 3; // false

Page 42: WTF Javascript - FrontInRio 2011

1 < 2 < 3;

(1 < 2) < 3;

true < 3;

Page 43: WTF Javascript - FrontInRio 2011

O eval() é mal!

Page 44: WTF Javascript - FrontInRio 2011

eval(‘/* js dentro de uma string! */’);

Page 45: WTF Javascript - FrontInRio 2011

setTimeout(‘rotina(x);’, 500);

setTimeout(function () { rotina(x);}, 500);

Page 46: WTF Javascript - FrontInRio 2011

Convenções de código

Page 47: WTF Javascript - FrontInRio 2011

Convenções de código

• JSLint se você for o Douglas Crockford

• JSHint se você não for o Douglas Crockford

• e agora também o CSSLint!

Page 48: WTF Javascript - FrontInRio 2011

JSLint

• Douglas Crockford

• “JSLint will hurt your feelings”

• Escreva JS como ele escreve ou não use a ferramenta

• for (var x in y) ...

• http://www.jslint.com

Page 49: WTF Javascript - FrontInRio 2011

JSHint

• Comunidade - fork do JSLint iniciado por Anton Kovalyov

• “does not tyrannize your code”

• Estabeleça as suas convenções!

• Douglas Crockford diz que JSHint é para babacas

• http://jshint.com

Page 50: WTF Javascript - FrontInRio 2011

function(foo) { var i = -1 var str

for (var i = 0; i < 4; i++) { debugger; str += i; }}()

Page 51: WTF Javascript - FrontInRio 2011

The code check failed.

Errors:• Line 1 function(foo) {Missing name in function declaration.

• Line 2 var i = -1Missing semicolon.

• Line 3 var strMissing semicolon.

• Line 5 for (var i = 0; i < 4; i++) {'i' is already defined.

• Line 9 }()Function declarations are not invocable. Wrap the whole function invocation in parens.

• Line 9Stopping, unable to continue. (100% scanned).

Page 52: WTF Javascript - FrontInRio 2011

http://csslint.net/

Page 53: WTF Javascript - FrontInRio 2011

Outras dicas para melhorar seu JS

Page 54: WTF Javascript - FrontInRio 2011

Entenda Javascript

• jQuery

• Mootools

• CoffeScript

• Dojo

• Prototype

Page 55: WTF Javascript - FrontInRio 2011

Use o console!

Page 56: WTF Javascript - FrontInRio 2011

Use o console!

• Opera Dragonfly

• Chrome Developer Tools

• Firefox’s Firebug (extensão)

• Safari’s Developer Tools

• Internet Explorer Developer Tools

Page 57: WTF Javascript - FrontInRio 2011

Largue o alert! Use o console.log e debugger!

Page 58: WTF Javascript - FrontInRio 2011

breakpoint simples!

Page 59: WTF Javascript - FrontInRio 2011

Não se preocupe com a tecnologia server-side

• Ruby

• Python

• PHP

• .NET

• ColdFusion

• ASP

• C / C++

• Perl

• Erlang

• Lisp

• Cobol

• Pseudo-código

Page 60: WTF Javascript - FrontInRio 2011

Mas se puder escolher prefira node.js

• Javascript em server side

• é fácil

• é grátis

• é tendência

• se integra facilmente com ferramentas como CSSLint e JSHint

• http://nodejs.org

Page 61: WTF Javascript - FrontInRio 2011

Passe a ideia adiante!

Page 62: WTF Javascript - FrontInRio 2011

Estude muito!

• Mozilla Developer Network - MDN - https://developer.mozilla.org/

• Google Code University - http://code.google.com/intl/pt-BR/edu/submissions/html-css-javascript/

• Livros! Ex.: “Padrões Javascript”

Page 63: WTF Javascript - FrontInRio 2011
Page 64: WTF Javascript - FrontInRio 2011

Compartilhe seu código e troque experiências!

• Google Code

• Github

• Bitbucket

• jsfiddle.net

• jsbin.com

Page 65: WTF Javascript - FrontInRio 2011

Não leia o W3Schools!

• Leia o http://w3fools.com

• Pior forma de aprender é a errada!

Page 66: WTF Javascript - FrontInRio 2011

Não detecte o browser, mas a funcionalidade

Page 67: WTF Javascript - FrontInRio 2011

Moral da história

Page 68: WTF Javascript - FrontInRio 2011

você já pode transformar o seu maior vilão no seu melhor amigo!