SlideShare uma empresa Scribd logo
1 de 73
Baixar para ler offline
JavaScript das Ruas
Tudo o que você não deve fazer
Dan Vitoriano
@dnvtrn
@dnvtrn
BEM LOKO
DOMINA
NINGUÉM SEGURA
ATALHOS
Que que tá
pegando?
@raphamorims
@pokemaobr
Iniciantes
PERIGO!
Esse dia foi loko….
PESQUISA
O que você faz em
JavaScript que te
envergonha?
O que os outros fazem
com JavaScript que
você considera ruim?
Qual a coisa mais bonita que
uma pessoa desenvolvedora
pode fazer em JavaScript mas
geralmente não faz?
BAD PRACTICES
BAD PARTS
GOOD PARTS
VAI MALANDRA
Callback Hell
var bagulhos;
jQuery no meio dos
bagulho
Kilômetros de JavaScript em um único arquivo
If ternário sem dó
bagulhos ? true :
bagulhos === 'Kondzilla' ? true :
bagulhos !== 'Anitta' ? true : null
ZUADO
The Bad Parts
Tipos
console.log(5 == "5"); // true
console.log(25 == "0x19"); // true
console.log(1 == true); // true
console.log(0 == false); // true
console.log(2 == true); // false
Números
> console.log(0.1 + 0.2);
Misericórdia…
= 0.30000000000000004
Variáveis Globais
function foobar() {
var bar = 10;
//
// [...Code...]
//
baz = 20; // Typo. "baz" is now a global variable.
}
undefined != null
undefined != null
Adição e
Concatenação
var x = 10;
var y = 5;
var z = x + y;
console.log(z);
 
15
var x = 10;
var y = "5";
var z = x + y;
console.log(z);
 
"105"
var x = 10;
var y = 5;
var z = x - y;
console.log(z);
 
5
var x = 10;
var y = "5";
var z = x - y;
console.log(z);
 
5
var x = "5";
var y = 5;
var z = x - y;
console.log(z);
 
5
var x = "10";
var y = "5";
var z = x - y;
console.log(z);
 
5
PARTES
ZICA
Prototype
__proto__
Construtores
Polimorfismo
Objetos
Tem métodos
Segue o protótipo
Facilita os testes
Destructuring
function example(metadata) {
var englishTitle = metadata.title,
localeTitle = metadata.translations[0].title;
…; // use englishTitle and localeTitle
}
function example({title: englishTitle, translations: [{title: localeTitle}]}) {
…; // use englishTitle and localeTitle
}
Código Comentado
class Tumbalatum extends TaTumTum.Component {
static propTypes = {
handleSubmit: PropTypes.func
};
handleSubmit = () => {};
render(){
return(
<div>Cê acredita?!</div>
)
}
}
class Tumbalatum extends TaTumTum.Component {
static propTypes = {
handleSubmit: PropTypes.func
};
/* istanbul ignore next */
handleSubmit = () => {};
render(){
return(
<div>Cê acredita?!</div>
)
}
}
Usar o browser pra
debugar os bagulhos
vamos pras idea…
Referências
• https://medium.com/@Rewieer/javascript-the-bad-parts-and-how-to-avoid-them-1a7c9bc5a0dd
• https://whydoesitsuck.com/why-does-javascript-suck/
• https://www.w3schools.com/js/js_mistakes.asp
• https://enmascript.com/articles/2019/09/20/two-exceptional-use-cases-for-the-spread-operator-you-may-
not-know-of
• https://talyssonoc.github.io/2015/11/23/JavaScript-adicione-acucar-a-gosto-e-pare-de-reclamar/
• http://nodebr.com/javascript-nao-e-bagunca/
• http://programadorobjetivo.co/7-problemas-de-estilo-de-codigo-em-javascript/
• https://medium.com/tableless/3-problemas-em-javascript-para-resolver-com-a-
especifica%C3%A7%C3%A3o-spread-operator-c5db0b5b1f6b
• https://medium.com/@madasamy/15-javascript-concepts-that-every-nodejs-programmer-must-to-
know-6894f5157cb7
VAMOS PRAS IDEIAS!
(Obrigado!)
@dnvtrn
@dnvtrn

Mais conteúdo relacionado

Mais procurados

[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos
[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos
[Curso Java Básico] Aula 11: Variáveis - Tipos PrimitivosLoiane Groner
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)Luciano Ramalho
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminMagno Torres
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Rafael Ponte
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Djangofabiocerqueira
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislAdriano Petrich
 
Getna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosGetna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosMaximusmano
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e DjangoOsvaldo Santana Neto
 
Nem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkNem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkRodrigo Matola
 
Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScriptLuis Vendrame
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAfonso Gomes
 
Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFRafael Ponte
 
Introdução a programação I
Introdução a programação IIntrodução a programação I
Introdução a programação IClerton Leal
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsLucas Caton
 

Mais procurados (17)

[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos
[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos
[Curso Java Básico] Aula 11: Variáveis - Tipos Primitivos
 
JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)JavaScript agora é sério (TDC 2011)
JavaScript agora é sério (TDC 2011)
 
Shell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadminShell Tips and Tricks for sysadmin
Shell Tips and Tricks for sysadmin
 
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
Os 10 maus habitos dos desenvolvedores jsf (JustJava e CCT)
 
Testes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e DjangoTestes, deploy e integração continua com Python e Django
Testes, deploy e integração continua com Python e Django
 
TDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fislTDD em django sem desculpas versao fisl
TDD em django sem desculpas versao fisl
 
Getna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dadosGetna: Gerador de Código RubyOnRails apartir de banco de dados
Getna: Gerador de Código RubyOnRails apartir de banco de dados
 
De Zero à Web com Python e Django
De Zero à Web com Python e DjangoDe Zero à Web com Python e Django
De Zero à Web com Python e Django
 
Boas Práticas em jQuery
Boas Práticas em jQueryBoas Práticas em jQuery
Boas Práticas em jQuery
 
Java script
Java scriptJava script
Java script
 
Nem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot FrameworkNem tudo é Pepino: Cucumber x Robot Framework
Nem tudo é Pepino: Cucumber x Robot Framework
 
Java reativo
Java reativoJava reativo
Java reativo
 
Nada sobre JavaScript
Nada sobre JavaScriptNada sobre JavaScript
Nada sobre JavaScript
 
Aprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCDAprender Javascript e jQuery (UFCD
Aprender Javascript e jQuery (UFCD
 
Os 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSFOs 10 maus hábitos dos desenvolvedores JSF
Os 10 maus hábitos dos desenvolvedores JSF
 
Introdução a programação I
Introdução a programação IIntrodução a programação I
Introdução a programação I
 
Desenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on RailsDesenvolvimento ágil de software com Ruby on Rails
Desenvolvimento ágil de software com Ruby on Rails
 

Semelhante a JavaScript das Ruas: Tudo o que não fazer

WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011Leonardo Balter
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - ComparandoWesley Lemos
 
Sábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptSábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptJulio Greff
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticasFrancke Peixoto
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno RochaiMasters
 
[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012Douglas Drumond
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Luís Cobucci
 
Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"flaviohalmeida
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQueryReinaldo Junior
 
Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre JqueryIvo Calado
 
Javascript The good, bad and ugly parts
Javascript The good, bad and ugly partsJavascript The good, bad and ugly parts
Javascript The good, bad and ugly partsFabian Carlos
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScriptBruno Catão
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalAdriano Petrich
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosWesley Lemos
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVMCaelum
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosDanilo Sato
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017Romualdo Andre
 

Semelhante a JavaScript das Ruas: Tudo o que não fazer (20)

WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011WTF Javascript - FrontInRio 2011
WTF Javascript - FrontInRio 2011
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Javascript para CSharpers 1 - Comparando
Javascript para CSharpers   1 - ComparandoJavascript para CSharpers   1 - Comparando
Javascript para CSharpers 1 - Comparando
 
Sábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScriptSábado Hackadêmico - JavaScript
Sábado Hackadêmico - JavaScript
 
Javascript - boas práticas
Javascript - boas práticasJavascript - boas práticas
Javascript - boas práticas
 
Minicurso groovy grails
Minicurso groovy grailsMinicurso groovy grails
Minicurso groovy grails
 
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
7Masters jQuery - boas práticas em JavaScriptQuery, com Bruno Rocha
 
[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012[Android devcamp] Android Bootcamp – 2012
[Android devcamp] Android Bootcamp – 2012
 
Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011Removendo o cheiro ruim do seu código - SoLiSC 2011
Removendo o cheiro ruim do seu código - SoLiSC 2011
 
Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"Flávio Almeida MEAN Stack "to be or not to be mean"
Flávio Almeida MEAN Stack "to be or not to be mean"
 
JavaScript ninja com jQuery
JavaScript ninja com jQueryJavaScript ninja com jQuery
JavaScript ninja com jQuery
 
Tutorial sobre Jquery
Tutorial sobre JqueryTutorial sobre Jquery
Tutorial sobre Jquery
 
Javascript The good, bad and ugly parts
Javascript The good, bad and ugly partsJavascript The good, bad and ugly parts
Javascript The good, bad and ugly parts
 
Introdução a JavaScript
Introdução a JavaScriptIntrodução a JavaScript
Introdução a JavaScript
 
Tdd em django sem desculpas versao final
Tdd em django sem desculpas versao finalTdd em django sem desculpas versao final
Tdd em django sem desculpas versao final
 
Javascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - ConceitosJavascript para CSharpers 3 - Conceitos
Javascript para CSharpers 3 - Conceitos
 
Plataforma java: detalhes da JVM
Plataforma java: detalhes da JVMPlataforma java: detalhes da JVM
Plataforma java: detalhes da JVM
 
Javascript
JavascriptJavascript
Javascript
 
O que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a ObjetosO que você NÃO aprendeu sobre Programação Orientada a Objetos
O que você NÃO aprendeu sobre Programação Orientada a Objetos
 
Iniciando com javaScript 2017
Iniciando com javaScript 2017Iniciando com javaScript 2017
Iniciando com javaScript 2017
 

Mais de Dan Vitoriano

Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React HooksDan Vitoriano
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasDan Vitoriano
 
CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano
CSS in JS - Escrevendo CSS no JavaScript - Dan VitorianoCSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano
CSS in JS - Escrevendo CSS no JavaScript - Dan VitorianoDan Vitoriano
 
Times digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorTimes digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorDan Vitoriano
 
GraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIGraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIDan Vitoriano
 
Mobile First e Offline First
Mobile First e Offline FirstMobile First e Offline First
Mobile First e Offline FirstDan Vitoriano
 
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingMeetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingDan Vitoriano
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScriptDan Vitoriano
 
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Dan Vitoriano
 
The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991Dan Vitoriano
 
Especificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletEspecificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletDan Vitoriano
 
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...Dan Vitoriano
 
Fullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsFullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsDan Vitoriano
 
Apresentação FEMUG-ABC
Apresentação FEMUG-ABCApresentação FEMUG-ABC
Apresentação FEMUG-ABCDan Vitoriano
 
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Dan Vitoriano
 
Google Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsGoogle Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsDan Vitoriano
 

Mais de Dan Vitoriano (20)

Node.js e Express
Node.js e ExpressNode.js e Express
Node.js e Express
 
Workshop React Hooks
Workshop React HooksWorkshop React Hooks
Workshop React Hooks
 
AMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps ModernasAMP Roadshow SP 2019 - Web Apps Modernas
AMP Roadshow SP 2019 - Web Apps Modernas
 
CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano
CSS in JS - Escrevendo CSS no JavaScript - Dan VitorianoCSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano
CSS in JS - Escrevendo CSS no JavaScript - Dan Vitoriano
 
Times digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e EndeavorTimes digitais de alta performance - Tera e Endeavor
Times digitais de alta performance - Tera e Endeavor
 
GraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your APIGraphQL - A Graph Query Language to your API
GraphQL - A Graph Query Language to your API
 
Mobile First e Offline First
Mobile First e Offline FirstMobile First e Offline First
Mobile First e Offline First
 
React Native
React NativeReact Native
React Native
 
Pdsp #3
Pdsp #3Pdsp #3
Pdsp #3
 
Pdsp #2
Pdsp #2Pdsp #2
Pdsp #2
 
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - GamestormingMeetup Processos de Desenvolvimento São Paulo - Gamestorming
Meetup Processos de Desenvolvimento São Paulo - Gamestorming
 
Unit Test JavaScript
Unit Test JavaScriptUnit Test JavaScript
Unit Test JavaScript
 
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...Untraceable electronic mail, return addresses and digital pseudonyms - David ...
Untraceable electronic mail, return addresses and digital pseudonyms - David ...
 
The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991The computer for the 21st century - Mark Weiser, 1991
The computer for the 21st century - Mark Weiser, 1991
 
Especificações UX/UI CMA Tablet
Especificações UX/UI CMA TabletEspecificações UX/UI CMA Tablet
Especificações UX/UI CMA Tablet
 
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
User experience guidelines for Universal Windows Platform (UWP) appsUwp app d...
 
Fullcircle papers - Sobre Blogs
Fullcircle papers - Sobre BlogsFullcircle papers - Sobre Blogs
Fullcircle papers - Sobre Blogs
 
Apresentação FEMUG-ABC
Apresentação FEMUG-ABCApresentação FEMUG-ABC
Apresentação FEMUG-ABC
 
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
Planejamento estratégico de comunicação digital - Dados sobre internet e mobi...
 
Google Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web componentsGoogle Material Design - Conceito, aplicações, código e web components
Google Material Design - Conceito, aplicações, código e web components
 

JavaScript das Ruas: Tudo o que não fazer