Escolar Documentos
Profissional Documentos
Cultura Documentos
JAVASCRIPT
open in browser PRO version JAVASCRIPT
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Modularizao em JavaScript
Componentes e mdulos nunca foram to mencionados como ultimamente. Ambos so conceitos antigos devemos entender e passar a adotar o quanto Modularizao em que JavaScript Componentes e mdulos nunca foram to mencionados como ultimamente. antes. Quem sabe voc possa repensar o seu JavaScript hoje mesmo? Ambos so conceitos antigos que devemos entender e passar a adotar o quanto Por Jean Carlo Em er antes. Quem sabe voc possa repensar o seu JavaScript hoje mesmo?
Por Jean Carlo Em er 29 Tw eetar 99 Like 290 6 6
Modularizao implica na diviso das funcionalidades de um cdigo em partes distintas. Os mdulos compe peas que podem ser adicionadas e removidas quando necessrio, vejam: reuso de cdigo . Modularizao implica na diviso das funcionalidades de um cdigo em partes distintas. Os mdulos compe peas que podem adicionadas e removidas quando vejam: de cdigo . Os frutos doser encapsulamento alcanado com a necessrio, modularizao so reuso a reduo da complexidade , separao de interesses e manuteno descomplicada. Ainda, a definio de cada mdulo fora o programador a determinar Os frutos do encapsulamento alcanado com a modularizao quais os limites e responsabilidades de cada poro do cdigo. so a reduo da complexidade , separao de interesses e manuteno descomplicada. Ainda, a definio de cada mdulo fora o programador a determinar quais os que limites e responsabilidades de cada do cdigo. Acredito estes argumentos j justificam aporo adoo de um sistema de mdulos para seu cdigo. Assumindo que estamos escrevendo cdigo segundo a especificao ECMAScript 5, tudo comea por uma das palavras grifadas Acredito que estes argumentos j justificam a adoo de um sistema de mdulos para seu cdigo. Assumindo que no incio do texto: encapsulamento. estamos escrevendo cdigo segundo a especificao ECMAScript 5, tudo comea por uma das palavras grifadas no incio do texto: encapsulamento.
Encapsulamento em JavaScript
open in browser PRO version
Encapsulamento em JavaScript
Todo programador que se depara com um cdigo, por menos complexo que seja, precisar entender o conceito de escopo. O escopo de uma varivel ou funo no JavaScript so as linhas de cdigo em que estas so acessveis.
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
escopo. O escopo de uma varivel ou funo no JavaScript so as linhas de cdigo em que estas so acessveis. escopo. O escopo ou funo no JavaScript so as linhas de cdigo em que estas so acessveis. Encapsulamento de umuma dos varivel fundamentos da programao orientada a objetos tradicional. Considerando que no temos classes no JavaScript e se entendermos encapsulamento como uma forma de restringir acesso informao, Encapsulamento um dos fundamentos da programao orientada a objetos tradicional. Considerando que no conclumos que a definio de escopo o caminho para alcana-lo. temos classes no JavaScript e se entendermos encapsulamento como uma forma de restringir acesso informao, conclumos que a definio de escopo o caminho alcana-lo. window , e aqueles criados a partir da O JavaScript possui um escopo global, que quando para em navegadores execuo de uma funo. A maneira mais fcil de alcanar encapsulamento utilizando uma funo annima window O JavaScript possui um escopo global, que quando em navegadores , e aqueles criados a partir da invocada imediatamente aps sua definio: execuo de uma funo. A maneira mais fcil de alcanar encapsulamento utilizando uma funo annima invocada imediatamente aps sua definio:
1. 2. 3. (function () { var hideFromOutside = true; (function () { })(); var hideFromOutside = true; })();
Por favor, saiba que este pattern chama-se Immediately-Invoked Function Expression (IIFE) e que os parnteses iniciais servem para que a instruo seja reconhecida como uma expresso. Por favor, saiba que este pattern chama-se Immediately-Invoked Function Expression (IIFE) e que os parnteses iniciais servem para que a instruo seja reconhecida como uma expresso.
Mdulos Mdulos
1. 2.
Mencionado j h mais de 10 anos, o mais simples dos padres de escrita de mdulos em JavaScript o module pattern. O padro consiste de uma IIFE que retorna um objeto com valores e funes, veja: Mencionado j h mais de 10 anos, o mais simples dos padres de escrita de mdulos em JavaScript o module pattern. O padro consiste de uma IIFE que retorna um objeto com valores e funes, veja:
var counter = (function () {
var current = 0; var counter = (function () { 3. return { var current = 0; 4. name: "counter", return { 5. next: function () { "counter" , a developer? Try out the HTML to PDF API Are you open in browser name PRO: version
pdfcrowd.com
next: function () { return current + 1; next: function () { }, return current + 1; isFirst: function () { }, return current == 0; isFirst: function () { } return current == 0; }; } })(); }; })();
next: next, return { 12. isFirst: isFirst next: next, 13. }; isFirst: isFirst 14. })(); }; open in browser PRO version Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Namespace
Apesar de mencionado no artigo que define o padro, o ideal retornar apenas referncias a funes, retornar outros valores pode dar dor de cabea. Revealing module pattern bastante interessante pela garantia de acesso Apesar de mencionado no artigo que o padro , o ideal retornar apenas referncias funes, retornar this , por descomplicado sem a necessidade dedefine uso do exemplo. A propsito, este conceito a ser til para a outros valores pode dar dor de cabea. Revealing module pattern bastante interessante pela garantia de acesso construo de mdulos melhores em outros padres. this descomplicado sem a necessidade de uso do , por exemplo. A propsito, este conceito ser til para a construo de mdulos melhores em outros padres.
Os padres que vimos at ento poluem o escopo global da aplicao com a definio de uma srie de variveis. Uma soluo a criao de um namespace de uso especfico para os mdulos. Namespace Os padres que vimos at ento poluem o escopo global da aplicao com a definio de uma srie de variveis. Uma soluo a criao de um namespace de uso especfico para os mdulos.
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. window.App = { modules: {} window.App = { }; modules: {} }; App.modules.counter = (function () { /* ... */ App.modules.counter = (function () { })(); /* ... */ })(); App.modules.slider = (function () { /* ... */ App.modules.slider = (function () { })(); /* ... */ })();
Mdulos robustos
open in browser PRO version
Mdulos robustos
natural que mdulos dependam uns dos outros. Uma caracterstica importante de um sistema de mdulos robusto a possibilidade de indicar quais so as dependncias de um determinado mdulo e traar uma estratgia de Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
a possibilidade de indicar quais so as dependncias de um determinado mdulo e traar uma estratgia de carregamento caso esta no esteja disponvel. a possibilidade de indicar quais so as dependncias de um determinado mdulo e traar uma estratgia de carregamento caso esta no esteja disponvel.
Mdulos AMD podem ser requisitados, definidos e utilizados a medida que necessrios. Nosso contador, se reescrito em AMD, ficaria da seguinte maneira: Asyncronous Module Definitiondefinidos (AMD) Mdulos AMD podem ser requisitados, e utilizados a medida que necessrios. Nosso contador, se reescrito em AMD, ficaria da seguinte maneira:
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. define('counter', function () { var current = 0; define('counter', function () { function next() { var current = 0; return current + 1; function next() { } return current + 1; function isFirst() { } return current == 0; function isFirst() { } return current == 0; return { } next: next, return { isFirst: isFirst next: next, }; isFirst: isFirst }); }; });
Diferente de outros sistemas de mdulos, as dependncias de cada mdulo AMD so indicadas na sua prpria definio. Isto significa que as dependncias no precisam estar prontas para o uso assim que o mdulo seja Diferente de outros sistemas de mdulos, as dependncias de cada mdulo AMD so definido, estas podem ser carregadas assincronamente condicionando a execuo do indicadas mdulo. na sua prpria definio. Isto significa que as dependncias no precisam estar prontas para o uso assim que o mdulo seja definido, podem ser carregadas a execuo do mdulo. O trecho estas de cdigo a seguir define umassincronamente mdulo com duascondicionando dependncias:
open in browser PRO version
O trecho de cdigo Are a seguir define um mdulo com duas dependncias: you a developer? Try out the HTML to PDF API
pdfcrowd.com
1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
define( [ define( 'dep1', [ 'dep2' 'dep1', ], 'dep2' ], function (dep1, dep2) { /* ... */ function (dep1, dep2) { } /* ... */ ); } );
Requisitando mdulos
Caso tenha achado estranho, saiba que a definio do mdulo geralmente utiliza uma formatao de espaos bastante especfica para facilitar a leitura e entendimento das dependncias. Caso tenha achado estranho, saiba que a definio do mdulo geralmente utiliza uma formatao de espaos bastante especfica para facilitar a leitura e entendimento das dependncias. Em meio ao trecho de cdigo, caso no tenha notado, no definimos o identificador deste mdulo. Os mdulos podem (e devem) ser definidos um em cada arquivo e, nestes casos, o nome do arquivo torna-se o identificador. Em meio ao trecho de cdigo, caso no tenha notado, no definimos o identificador deste mdulo. Os mdulos podem (e devem) ser definidos um em cada arquivo e, nestes casos, o nome do arquivo torna-se o identificador.
Toda aplicao ter um trecho principal de cdigo que ir requisitar os mdulos e fazer o bootstrap da aplicao. O require (sim, a semntica lgica) no exige identificao e atende ao requisito, veja a seguir: Requisitando mdulos Toda aplicao ter um trecho principal de cdigo que ir requisitar os mdulos e fazer o bootstrap da aplicao. O require (sim, a semntica lgica) no exige identificao e atende ao requisito, veja a seguir:
1. 2. require( [ require( 3. 'slider', [ 4. 'counter', 'slider', 5. 'inputMask' 'counter', 6. ], open in browser 'inputMask' PRO version
pdfcrowd.com
6. 7. 8. 9. 10. 11.
], ], function (slider, counter, inputMask) { /* ... */ function (slider, counter, inputMask) { } /* ... */ ); } );
Carregando os mdulos
Uma boa prtica criar uma interface comum para iniciar o comportamento de cada um dos mdulos. Existem diferentes preferncias, particularmente utilizo uma funo init . Desta forma, o corpo de cdigo do require Uma boaalgo prtica criar uma interface para iniciar de cada um dos mdulos. Existem slider.init() counter.init() conteria como e comum . o comportamento init require diferentes preferncias, particularmente utilizo uma funo . Desta forma, o corpo de cdigo do slider.init() counter.init() conteria algo como e .
Mdulos AMD podem ser utilizados em qualquer navegador, porm sua definio no suportada nativamente. O que significa que precisamos de uma biblioteca que provenha as tais funes define e require . O mais popular Carregando os mdulos Mdulos AMD podem ser utilizados em qualquer navegador, porm sua definio no suportada nativamente. O loader de AMD o require.js. Desculpe decepcionar, mas sua configurao no est norequire escopo deste texto. define que significa que precisamos de uma biblioteca que provenha as tais funes e . O mais popular loader de AMD o require.js. Desculpe decepcionar, mas sua configurao no est no escopo deste texto.
Empacotando os mdulos
Um dos principais argumentos contra o uso de AMD a demora para o carregamento de todos os mdulos e suas dependncias. Apesar de possvel, o carregamento assncrono de cada um dos mdulos sumariamente Empacotando os mdulos Um dos principais argumentos contra o os uso de AMD de a demora para o carregamento de todos os mdulos e suas no recomendado levando em conta protocolos rede que utilizamos atualmente. dependncias. Apesar de possvel, o carregamento assncrono de cada um dos mdulos sumariamente no recomendado levando em conta os protocolos de rede que utilizamos atualmente. Existem ferramentas como o r.js que tem a funo de empacotar os mdulos e entregar um nico arquivo para donwload no client-side. O r.js depende de Node.js e introduz uma etapa de anlise e concatenao dos arquivos. Existem ferramentas como o r.js que tem a funo de empacotar os mdulos e entregar um nico arquivo para donwload no client-side. O r.js depende e introduz uma etapa de anlise e concatenao dos arquivos. Caso j possua um workflow para cuidarde doNode.js seus assets , concatenar os arquivos e utilizar o almond pode ser uma soluo bem mais simples. O nico detalhe que voc precisar atribuir um identificador para cada mdulo. Mesmo Caso j possua um workflow para cuidar do seus assets, concatenar os arquivos e utilizar o almond pode ser uma que os mdulos estejam definidos cada um em um arquivo, lembre-se que a biblioteca entrar em ao apenas soluo bem mais simples. O nico detalhe que voc precisar atribuir um identificador para cada mdulo. Mesmo aps aPRO concatenao. open in browser version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
aps a concatenao.
aps a concatenao.
O futuro O futuro
A especificao ECMAScript 6 j possui um rascunho de uma nova definio de mdulos. Os assim chamados ES6 modules so baseados em um sistema de mdulos robusto da especificao CommonJS. A especificao ECMAScript 6 j possui um rascunho de uma nova definio de mdulos. Os assim chamados ES6 modules so baseados em um sistema de mdulos robusto da especificao CommonJS.
CommonJS modules
Os mdulos CJS se tornaram bastante populares por serem a base do padro adotado pelo Node.js. O principal impedimento para seu uso atualmente o no suporte a este padro nos navegadores. Existem ferramentas para CommonJS modules Os mdulos CJS se em tornaram bastante populares por serem base do padro adotado pelo Node.js . O principal viabilizar o seu uso navegadores, inclusive mdulos AMDapodem internamente utilizar a sintaxe proposta pela impedimento para seu uso atualmente o no suporte a este padro nos navegadores. Existem ferramentas para especificao de CommonJS. viabilizar o seu uso em navegadores, inclusive mdulos AMD podem internamente utilizar a sintaxe proposta pela especificao de CommonJS.
ES6 modules
O sistema de mdulos ES6 combina os dois melhores sistemas de mdulos existentes. A definio dos mdulos se parece muito com CJS e as mesmas caractersticas assncronas da AMD so endereadas pela especificao de ES6 modules O sistema de mdulos ES6 combina os dois melhores sistemas de mdulos existentes. A definio dos mdulos se um loader nativo . parece muito com CJS e as mesmas caractersticas assncronas da AMD so endereadas pela especificao de um loader nativo. open in browser PRO version Are you a developer? Try out the HTML to PDF API pdfcrowd.com
[ES6 modules] permitiro a definio de dependncias sem uso de callbacks (como em CJS) mas sero assncronos (como AMD). David Herman [ES6 modules] permitiro a definio de dependncias sem uso de callbacks (como em CJS) mas sero assncronos (como AMD). David Herman
open in browser PRO version Are you a developer? Try out the HTML to PDF API http://jcemer.com
pdfcrowd.com
Ma i s p o s ts d o a u to r Ma i s p o s ts d o a u to r
Compartilhar
Leo Balter
Obrigado, Jean, tinha me programado para procurar algo compatvel com mdulos CommonJS e fosse similar ao esquema do NodeJS, com require() e module.exports, no finalzinho do artigo encontrei logo o Browserify que foi exatamente o que procurava. \o/
Confesso que demorei um tempo pra utilizar ferramentas AMD/CommonJS pois queria aguardar a especificao d ES6, mas parei em uma situao que no estou vendo mais utilidade invs de apenas continuar esperando.
8
Responder Compartilhar
Suissa
Tb tem esse aqui do Miller https://github.com/millermedei... Eu nunca usei, acho o browserify mto bom :D
pdfcrowd.com
Pedro Nauck 1
um ms atrs
Valeu Jean, ainda essa semana tava buscando um bom contedo sobre modularizao Javascript.
Responder Compartilhar
Luiz Henrique
13 horas atrs
Tiago Celestino
22 dias atrs
Usei o require.js em uma app, achei super prtico, o problema que em alguns momentos parava de funcionar, principalmente no IECA.
Responder Compartilhar
Palmer
23 dias atrs
hardcore heim
Responder Compartilhar
marlonnauweb
um ms atrs
Excelente Jean, conceitos importantssimos para os novos desenvolvedores js. Profissionalizando a rea ;) Parabns e obrigado
Responder Compartilhar
NOSSOS SERVIOS
Assinar feed Add Disqus to your site
Produzimos seu cdigo front-end NOSSOS SERVIOS Produzimos seu cdigo front-end Sites WordPress
open in browser PRO version
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Micro Workshops Online Micro Workshops Online Aulas Particulares Aulas Particulares Vdeos tutoriais Vdeos tutoriais
O grande desencontro do HTTP com o HTML O grande desencontro do HTTP com o HTML
MAIS VISITADOS
PHPUnit, como iniciar sem dores MAIS VISITADOS PHPUnit, como iniciar sem dores O grande desencontro do HTTP com o HTML O grande desencontro do HTTP com o HTML Assista: [Live Coding] Codificando um Layout com HTML/CSS
open in browser PRO version
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
No tenho verso mobile, fao ou no fao? No tenho verso mobile, fao ou no fao? CSS Transition e CSS Animation CSS Transition e CSS Animation
SEJA UM AUTOR
Quer escrever no Tableless? SEJA UM AUTOR Quer escrever no Tableless?
NEWSLETTER
pdfcrowd.com
NEWSLETTER NEWSLETTER
Primeiro nome Sobrenome Email Address
Cadastrar Cadastrar
MAIS RECENTES
PHPUnit, como iniciar sem dores MAIS RECENTES PHPUnit, como iniciar sem dores O que falamos em 2013? O que falamos em 2013? O grande desencontro do HTTP com o HTML O grande desencontro do HTTP com o HTML No tenho verso mobile, fao ou no fao? No tenho verso mobile, fao ou no fao? Domnio Gratuito existe, mas, devo us-lo? Domnio Gratuito existe, mas, devo us-lo? Como escrever bem para o SEO Texto e Contexto, da palavra-chave semntica. Como escrever bem para o SEO Texto e Contexto, da palavra-chave semntica. Formulrios acessveis com wai-aria
open in browser PRO version
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
JavaScript de forma assncrona e legvel JavaScript de forma assncrona e legvel Ensine mais Ensine mais Criando um blog com Octopress e Github Pages Criando um blog com Octopress e Github Pages Introduo ao Selenium 2 Introduo ao Selenium 2 TDD, por que usar? TDD, por que usar? Transies inteligentes na experincia do usurio Transies inteligentes na experincia do usurio Assista: [Live Coding] Codificando um Layout com HTML/CSS Assista: [Live Coding] Codificando um Layout com HTML/CSS Turbinando as Media Queries Turbinando as Media Queries
Tableless
Follow
+ 4,044
+1
pdfcrowd.com
Tableless
Like
pdfcrowd.com
VAGAS E TRAMPOS
DESENVOLVEDOR PHP (Rio de Janeiro) VAGAS E TRAMPOS DESENVOLVEDOR PHP (Rio de Janeiro) Desenvolvedor web pleno (front e back-end) (So Paulo) Desenvolvedor web pleno (front e back-end) (So Paulo) Web Designer (So Paulo)
open in browser PRO version
Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Atendimento / Analista de Negcios na Object Edge (Rio Grande do Sul) Atendimento / Analista de Negcios na Object Edge (Rio Grande do Sul) Estgio desenvolvedor front-end (Rio Grande do Sul) Estgio desenvolvedor front-end (Rio Grande do Sul) Gerente de Projetos na Object Edge Brasil (Rio Grande do Sul) Gerente de Projetos na Object Edge Brasil (Rio Grande do Sul) Desenvolvedor Web HTML/CSS/JS (Rio Grande do Sul) Desenvolvedor Web HTML/CSS/JS (Rio Grande do Sul)
CATEGORIAS CATEGORIAS
pdfcrowd.com
17 17
pdfcrowd.com
Tudo o que voc precisa saber sobre Sitemaps Tudo o que voc precisa saber sobre Sitemaps
pdfcrowd.com
Semntica
14 14
9 9
pdfcrowd.com
Instalando o PHUnit utilizando o gerenciador de pacotes Composer. PHPUnit, como iniciar sem dores Instalando o PHUnit utilizando o gerenciador de pacotes Composer.
ARTIGOS
E o que vamos falar em 2014? Confira alguns do assuntos que fizeram a cabea em 2013 e podem ser grandes promessas para 2014. O que falamos em Confira 2013? E o que vamos falar em 2014? alguns do assuntos que fizeram a cabea em 2013 e podem ser grandes promessas para 2014.
CDIGO
Duas tecnologias criadas sob o mesmo projeto que possuem uma falha de compatibilidade. Vamos open in browser PRO version Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
Duas tecnologias criadas sob o mesmo projeto que possuem uma falha de compatibilidade. Vamos conhecer um pouco da histria do HTTP e HTML, boas prticas e como manter interaes coerentes entre cliente e servidor. Duas tecnologias criadas sob o mesmo projeto que possuem uma falha de compatibilidade. Vamos conhecer um pouco da histria do HTTP e HTML, boas prticas e como manter interaes coerentes entre cliente e servidor.
CSS
Ainda tem dvidas se deve ou no fazer a verso mobile do seu produto ou site? Saia dessa... No tenho verso mobile, fao ou no Ainda tem dvidas se deve ou no fazer a verso mobile do seufao? produto ou site? Saia dessa...
ARTIGOS
Muitos tipos de domnio esto espalhados pela web, inclusive os gratuitos, mas, afinal, eu posso realmente usar? Domnio Gratuito mas, devo us-lo? Muitos tipos de domnio estoexiste, espalhados pela web, inclusive os gratuitos, mas, afinal, eu posso realmente usar?
SEO
Como escrever bem para o SEO Texto e Contexto, da palavra-chave semntica. Entenda como melhorar o texto para os sistemas de busca. Como escrever bem para o SEO Texto e Contexto, da palavra-chave semntica. Entenda como melhorar o texto para os sistemas de busca.
SEO ACESSIBILIDADE
Crie formulrios incrveis usando as boas prticas e acessibilidade, afim de suprir todos os tipos de usurios. Formulrios acessveis com wai-aria Crie formulrios incrveis usando as boas prticas e acessibilidade, afim de suprir todos os tipos de usurios.
GERAL GERAL JavaScript de forma assncrona e legvel
A programao assncrona possui a vantagem de gerar cdigos perfomticos. Em certos casos, a implementao de diversas funes assncronas encadeadas atravs de funes callback pode open in browser PRO version Are you a developer? Try out the HTML to PDF API
pdfcrowd.com
implementao de diversas funes assncronas encadeadas atravs de funes callback pode prejudicar a leitura e a manuteno do cdigo. Para demonstrar esse encadeamento, vamos utilizar um trecho implementao de diversas funes assncronas encadeadas atravs de funes callback pode prejudicar a leitura e a manuteno do cdigo. Para demonstrar esse encadeamento, vamos utilizar um trecho
ARTIGOS
Ensine mais
ARTIGOS
Criando um blog com Octopress e Github Pages Crie um blog em Octopress, framework baseado em Jekyll. Criando um blog com Octopress e Github Pages Crie um blog em Octopress, framework baseado em Jekyll.
CDIGO
DomnioTry Gratuito existe, mas, Are you a developer? out the HTML to PDF API
pdfcrowd.com
Arquitetura de Informao e UX: Diego Eis . Design: Luis Vilela. Ilustraes: Tilman Zitzmann. Arquitetura de Informao e UX: Diego Eis . Design: Luis Vilela. Ilustraes: Tilman Zitzmann.
pdfcrowd.com