<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JulioGreff.net &#187; JavaScript</title>
	<atom:link href="http://juliogreff.net/categoria/javascript/feed/" rel="self" type="application/rss+xml" />
	<link>http://juliogreff.net</link>
	<description>A mesma web, um novo estilo de desenvolvimento</description>
	<lastBuildDate>Sat, 07 May 2011 17:07:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Interfaces de Usuário com JavaScript</title>
		<link>http://juliogreff.net/interfaces-de-usuario-com-javascript/</link>
		<comments>http://juliogreff.net/interfaces-de-usuario-com-javascript/#comments</comments>
		<pubDate>Mon, 25 Aug 2008 11:00:42 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[Destaques]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[dojo]]></category>
		<category><![CDATA[ext]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[ui]]></category>
		<category><![CDATA[yui]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=185</guid>
		<description><![CDATA[A web vai se tornando uma plataforma cada vez mais próximas das aplicações desktop que temos. Temos várias aplicações por aí para provar isso. Mas aos olhos do usuário, uma aplicação só com XHTML+CSS às vezes pode não ser tão interessante. De uns tempos pra cá, entretanto, várias bibliotecas surgiram para acabar com esse problema, [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
<li><a href='http://juliogreff.net/historico-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Histórico para Navegação via JavaScript'>Histórico para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/estatisticas-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Estatísticas para Navegação via JavaScript'>Estatísticas para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A web vai se tornando uma plataforma cada vez mais próximas das aplicações desktop que temos. Temos várias aplicações por aí para provar isso. Mas aos olhos do usuário, uma aplicação só com XHTML+CSS às vezes pode não ser tão interessante. De uns tempos pra cá, entretanto, várias bibliotecas surgiram para acabar com esse problema, e trazer interfaces de usuários realmente interessantes. Preparado para algo fora de série?</p>
<p>O número dessas bibliotecas é incontável, algumas mais simples, outras mais complexas, outras mais famosas, algumas nem tanto. Fiz uma breve pesquisa, e trouxe as mais conhecidas (e algumas nem tanto) para quem ainda não teve a oportunidade de conhecer. Só para lembrar, hoje não vou tratar sobre o uso dessas bibliotecas, isso fica pra uma próxima oportunidade, já que a idéia é um pouco extensa.</p>
<h3>ExtJS</h3>
<p>A <a href="http://extjs.com/" title="ExtJS" rel="external">ExtJS</a> é de longe a biblioteca mais conhecida. Provavelmente você já deve ter pelo menos ouvido falar sobre, a menos que você viva na Sibéria. Também acredito que deva ser uma das mais antigas, e por isso uma das mais completas também.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/extjs.png" alt="ExtJS" title="ExtJS" /></p>
<p>Seu <a href="http://extjs.com/deploy/dev/examples/samples.html" title="ExtJS - Demos and Samples" rel="external">visual é espetacular</a>, mas tem seu preço: ela é muito lenta. Todos os efeitos de transparência, os drag &#8216;n&#8217; drops, tudo isso exige muito do pobre navegador. Pense bem antes de escolher onde usá-la, faça somente se for necessário, nunca para simples &#8220;enfeites&#8221;. Lenta, mas uma obra de arte.</p>
<p>E os desenvolvedores <abbr title="Adobe Integrated Runtime">AIR</abbr> não precisam ficar tristes: há até um <a href="http://extjs.com/blog/2008/02/24/tasks2/" title="Simple Tasks - AIR Application" rel="external">demo</a> do bichinho em funcionamento. Ainda não tive muito tempo com o AIR, mas acredito que a questão da velocidade não seja tão crítica quanto em um navegador, quem puder falar sobre, agradeço.</p>
<h3>Yahoo User Interface</h3>
<p class="left"><img src="http://juliogreff.net/wp-uploads/yui.png" alt="Yahoo User Interface" title="Yahoo User Interface" /></p>
<p>A <a href="http://developer.yahoo.com/yui/" title="Yahoo User Interface" rel="external">Yahoo User Interface</a>, ou YUI, deve ser a primeira user interface a se popularizar. Foi a base do nascimento da ExtJS. Tem lá seus defeitos, como o prefixo YUI para todos os métodos, mas tem um poder imenso. Me parece ser bem mais leve que a Ext, e usa gráficos bem mais simples também.</p>
<p>A documentação é um dos pontos fortes. Mantida pela comunidade de desenvolvedores do Yahoo, você nunca estará sozinho. Apesar disso, achei o site um pouco confuso para encontrar alguma coisa, principalmente os demos. Mas o material está lá, e há muito&#8230;</p>
<h3>MochaUI</h3>
<p>Ainda beta, a <a href="http://mochaui.com/" rel="external" title="MochaUI">MochaUI</a> seria a minha preferida. Adivinhem por quê? Sim, baseada na <a href="http://mootools.net/" title="Mootools Library" rel="external">Mootools</a>&#8230; A <a href="http://mochaui.com/demo/" title="MochaUI - Demo" rel="external">demonstração</a> realmente me deixou impressionado, talvez tenha sido o relógio.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/mochaui.png" title="MochaUI" alt="MochaUI" /></p>
<p>Aparenta ser bem leve, tanto que na demonstração você pode modificar propriedades das janelas sem travar o navegador. Usa gráficos simples, mas não menos atraentes. De longe, seria a primeira que eu escolheria para trabalhar (sim, opinião extremamente parcial). Mal posso esperar pela versão 1.0!</p>
<h3>Dijit</h3>
<p>Falando em <a href="http://dojotoolkit.org/" title="Dojo Toolkit" rel="external">Dojo</a>, nem é preciso dizer muito. O framework mais abrangente que conheço também conta com sua interface de usuário, o <a href="http://dojotoolkit.org/projects/dijit" title="Dijit" rel="external">Dijit</a>. Não consegui encontrar demonstrações no site, mas as imagens mostram algo realmente promissor.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/dijit.gif" alt="Dijit" title="Dijit" /></p>
<p>Lendo a descrição do projeto, você verá que o Dijit não é <em>apenas</em> uma simples interface de usuário. É extremamente customizável, extensível, acessível e localizável. O que isso significa? Bem, dê asas à imaginação, o céu é o limite&#8230;</p>
<h3>jQuery UI</h3>
<p>O <a href="http://ui.jquery.com/" title="jQuery UI" rel="external">jQuery UI</a>, bem jovem ainda, também é espetacular. Baseado na brilhante <a href="http://jquery.com/" rel="external" title="jQuery">jQuery</a>, tem tudo para deixar qualquer um de boca aberta. A <a href="http://ui.jquery.com/repository/real-world/effects/" title="jQuery UI Effects" rel="external">demonstração de efeitos</a>, por exemplo, me impressionou muito. A própria tela de demonstrações é uma obra de arte.</p>
<p class="center"><img src="http://juliogreff.net/wp-uploads/jqueryui.png" title="jQuery UI" alt="jQuery UI" /></p>
<p>Apesar de baseada no jQuery, achei a biblioteca ligeiramente lenta. Talvez tenha sido impressão, mas não esperava isso de jQuery. Entretanto, pela sua idade, é muito madura, muito poderosa. Se jQuery não havia <a href="http://juliogreff.net/jquery-segundas-impressões/" title="jQuery - Segundas Impressões">me chamado atenção</a> ainda&#8230;</p>
<h3>Prototype UI</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/prototypeui.png" title="Prototype UI" alt="Prototype UI" /></p>
<p>Até então desconhecido pra mim, o release candidate <a href="http://www.prototype-ui.com/" title="Prototype UI" rel="external">Prototype UI</a> não conseguiu me chamar a atenção. Não por ser baseado em <a href="http://www.prototypejs.org/" title="Prototype" rel="external">Prototype</a> e <a href="http://script.aculo.us/" title="Scriptaculous" rel="external">Scriptaculous</a> (o que já considero um ponto contra), nem por usar um tema do Mac, mas por parecer muito prematura. Os demos apresentados são bonitinhos, mas um tanto &#8220;crus&#8221;. Prefiro não dar minha opinião, vai que o negócio vire um Ext-killer?</p>
<h3>SproutCore</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/sproutcore.png" title="SproutCore" alt="SproutCore" /></p>
<p>O <a href="http://www.sproutcore.com/" title="SproutCore" rel="external">SproutCore</a>, iniciativa da Apple, tem uma proposta um tanto &#8220;utópica&#8221;, pelo que entendi é trazer o Cocoa para a web. As demonstrações são interessantes, mas o pobre navegador sofreu as conseqüências. Esse negócio consegue ser mais pesado que a própria Ext! Além disso, vi mais opiniões <a href="http://www.pixelbox.net/2008/06/17/sprout-core/" title="SproutCore (Pixelbox)" rel="external">negativas</a> do que positivas&#8230;</p>
<h3>UIZE</h3>
<p class="center"><img src="http://juliogreff.net/wp-uploads/uize.png" title="UIZE" alt="UIZE" /></p>
<p>O <a href="http://www.uize.com/" title="UIZE" rel="external">UIZE</a> (pronuncia-se &#8220;you eyes&#8221;) é outro que nunca havia sido apresentado a mim. Concordo com o pessoal do <a href="http://ajaxian.com/archives/uize-javascript-ui-toolkit" title="UIZE: JavaScript UI Toolkit" rel="external">Ajaxian</a>: são os efeitos mais legais que já vi. Apesar disso, a biblioteca ainda necessita muito mais trabalho, já que tem poucos recursos (poucos, mas legais).</p>
<p>Não tive a oportunidade de trabalhar por algum tempo com nenhuma dessas bibliotecas, e nem falar muito sobre as quais tenho mais experiência. Somente uma breve opinião sobre cada uma. Caso tenha esquecido de alguma, por favor, cite-a nos comentários, terei prazer em falar um pouquinho. Só uma precaução: cuidado onde você irá usar tudo isso&#8230; Existem aplicações e aplicações. Até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
<li><a href='http://juliogreff.net/historico-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Histórico para Navegação via JavaScript'>Histórico para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/estatisticas-para-navegacao-via-javascript/' rel='bookmark' title='Permanent Link: Estatísticas para Navegação via JavaScript'>Estatísticas para Navegação via JavaScript</a></li>
<li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/interfaces-de-usuario-com-javascript/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Mootools vs. jQuery</title>
		<link>http://juliogreff.net/mootools-vs-jquery/</link>
		<comments>http://juliogreff.net/mootools-vs-jquery/#comments</comments>
		<pubDate>Mon, 18 Aug 2008 11:00:27 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=176</guid>
		<description><![CDATA[A batalha final: Mootools versus jQuery. Quem será o vencedor dessa sangrenta batalha? Tudo bem, sem violência então. Como mais novo usuário de jQuery e ainda usuário de Mootools, tive a idéia de fazer apenas uma breve comparação com as duas bibliotecas, nada de luta&#8230; Antes de tudo, nem pensem os usuários de Mootools que [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A batalha final: <a href="http://mootools.net/" title="Mootools Library" rel="external">Mootools</a> versus <a href="http://jquery.com/" title="jQuery - Write Less, Do More" rel="external">jQuery</a>. Quem será o vencedor dessa sangrenta batalha? Tudo bem, sem violência então. Como <a href="http://juliogreff.net/jquery-segundas-impressoes/" title="jQuery - Segundas Impressões">mais novo usuário de jQuery</a> e ainda usuário de Mootools, tive a idéia de fazer apenas uma breve comparação com as duas bibliotecas, nada de luta&#8230;</p>
<p>Antes de tudo, nem pensem os usuários de Mootools que sou um traidor, um subversor, nem os usuários de jQuery achem que sou um <a href="http://jquerybrasil.com/" title="Comunidade jQuery Brasil" rel="external">&#8220;fiel convertido&#8221;</a> e abandonarei a Mootools para todo o sempre. Ambos dois lados de acordo e em paz, vamos à comparação.</p>
<h3>Propósito</h3>
<p>A primeira coisa que me fez dar uma segunda chance ao jQuery foi minha maturidade adquirida de uns tempos pra cá. Pude perceber que jQuery e Mootools têm propósitos diferentes. Pode-se usá-las para a mesma coisa, mas mais código terá que ser escrito.</p>
<p>A Mootools é uma biblioteca bem mais complexa e mais completa. Seu escopo é bem maior, e permite muito mais coisas. Algumas dessas coisas são a criação de classes, vários métodos para os tipos nativos da linguagem (funções para Strings, Números, Arrays), JSON, cookies, e tudo o mais que você puder imaginar através de plugins. É bem mais voltada a &#8220;programação de verdade&#8221;, ou seja, trabalhar mais com a linguagem e processamento do que seu resultado no documento.</p>
<p>A jQuery tem um escopo muito mais fechado: <abbr title="Document Object Model">DOM</abbr>. Criação e edição de objetos, seletores muito poderosos e simples, baseados em CSS e XPath e manipulação de eventos. Tudo isso integrado dentro de uma mesma função. Indo um pouco mais além, a biblioteca também inclui a criação de efeitos básicos e requisições Ajax. Ainda dentro do cifrão bombado.</p>
<h3>DOM</h3>
<p>Tanto Mootools quanto jQuery lutam nesse campo: DOM. Ambas também possuem a mesma função $, que vem me confundindo muito quando trabalho com uma ou outra biblioteca. Na Mootools, somente IDs. no jQuery, qualquer seletor CSS3 ou XPath. Não que a Mootools não tenha todos os seletores que jQuery, mas em uma função diferente: $$. Particularmente gostei separação, mas a versatilidade da jQuery absolutamente não me incomoda. Nessa parte, pra mim é um empate.</p>
<p>Ainda não tive a oportunidade de inspecionar o código da jQuery, mas posso dizer que o John Resig é um gênio: além de recuperar elementos do documento, o $ ainda os cria. E não através da criação manual de elementos e nós de texto. Você digita o HTML, e a função os cria sozinha. Adeus innerHTML&#8230; Na Mootools? Bem, acho melhor pular essa parte, vocês já devem ter percebido&#8230; jQuery na cabeça.</p>
<p>Quanto às outras funções, como definição e recuperação de atributos, ambas bibliotecas não deixam a desejar. A jQuery, entretanto, tem o diferencial de usar a mesma função para definição de uma ou várias propriedades, além de recuperá-las. Na Mootools, temos o <code>get</code> e <code>set</code>. Pra mim não faz diferença alguma em termos de desenvolvimento, ambas são intuitivas. Empate novamente.</p>
<p>No final das contas, jQuery é excepcional em tarefas de DOM, e supera, e muito, a Mootools, até por ser seu &#8220;habitat natural&#8221;.</p>
<h3>Ajax</h3>
<p>Ajax é outra frente de batalha em que as duas bibliotecas se enfrentam. jQuery conta com métodos extremamente simples para a tarefa, muito bons para requisições simples em aplicações pouco exigentes em relação a requisições assíncronas. Já a Mootools conta com uma classe bem mais trabalhada, mais extensa e mais flexível, principalmente para eventos.</p>
<p>Mesmo trabalhando com, as duas bibliotecas não o fazem para o mesmo propósito na minha opinião. A jQuery me parece melhor para requisições simples: enviar a requisição e fazer alguma coisa com a resposta. Já a Mootools trabalha com os aspectos mais &#8220;sórdidos&#8221;, como as mudanças de estado, headers, enfim. Até prefiro não falar muito sobre jQuery aqui pois não tive muito tempo com Ajax, posso ainda não ter visto algumas funcionalidades.</p>
<h3>Efeitos</h3>
<p>Existe algo que deixe uma aplicação mais interessante do que coisas se mexendo? Eu acho que não, mas esse não é o caso. Na jQuery, temos poucos efeitos built-in, mas me parece ser bem extensível. Já a Mootools tem uma gama enorme de transições, e podemos escolher qualquer propriedade do CSS para animar, e o melhor: ainda contamos com uma maneira muito fácil de criar novas transições. Mas a Mootools, principalmente nessa nova versão, peca em manter esses efeitos fáceis de aplicar. No jQuery, só um <code>fadeIn</code> ou <code>fadeOut</code> e presto, temos um efeito. No entanto, por mais chato que seja, ainda fico com a Mootools&#8230;</p>
<h3>Plugins</h3>
<p>Quando só a biblioteca sozinha não dá conta, hora de chamar os plugins. Ambas bibliotecas são extremamente extensíveis, cada uma a sua maneira. Na Mootools através da extensão das classes, no jQuery através de um &#8220;mecanismo&#8221; muito interessante, que &#8220;gruda&#8221; suas funções na função jQuery.</p>
<p>Mesmo sendo um fã da <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-1/" title="JavaScript Orientado a Objetos - Parte 1">programação orientada a objetos</a> e da maneira como a Mootools o usa, gostei muito mais da maneira como o jQuery faz a inclusão de plugins. Eles realmente passam a fazer parte da biblioteca. Vitória do jQuery, embora no final das contas não faça diferença alguma&#8230;</p>
<h3>Facilidade de Uso</h3>
<p>Nenhuma das bibliotecas tem um uso complicado. Além disso, ambas tem um foco diferente.</p>
<p>Talvez você já tenha notado, mas a maioria dos designers e programadores JavaScript menos experientes preferem jQuery. Não é à toa, ela é extremamente simples de ser usada. Nunca ouviu dizer que <a href="http://www.tableless.com.br/jquery-e-bom-para-designers" title="jQuery é bom para designers" rel="external">jQuery é para designers</a>? Isso também não significa que usuários mais experientes ou <a href="http://clientside.com.br/eu-me-rendo-jquery-e-legal-para-caramba-mesmo/" title="Eu me rendo: jQuery é legal pra caramba mesmo" rel="external">experts na linguagem</a> não irão gostar ou conseguir trabalhar.</p>
<p>Já a Mootools, como diz o <a href="http://mootools.net/" title="Mootools Library" rel="external">próprio site</a>, é direcionada a usuários intermediários ou avançados. À primeira vista ela é realmente mais complicada, sem dúvida. Talvez por isso não chame tanto a atenção quanto jQuery.</p>
<h3>E o vencedor é&#8230;</h3>
<p>Como disse logo no início do texto, jQuery e Mootools são bibliotecas diferentes, servindo para propósitos diferentes. Não é possível compará-las em sua totalidade, por isso não falei sobre muitos recursos que a Mootools oferece e jQuery não tem (built-in, é claro). jQuery é para DOM, Mootools é para facilitar sua programação. Já imaginou <a href="http://juliogreff.net/lancada-a-mootools-12/#comment-17351">ambas bibliotecas juntas</a>? Enfim, tenha bom senso e saiba utilizar as bibliotecas onde elas se dão bem, e não seja cabeça-dura como eu era tentando usar a Mootools em qualquer situação&#8230;</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/jquery-segundas-impressoes/' rel='bookmark' title='Permanent Link: jQuery &#8211; Segundas Impressões'>jQuery &#8211; Segundas Impressões</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-vs-jquery/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
		<item>
		<title>jQuery &#8211; Segundas Impressões</title>
		<link>http://juliogreff.net/jquery-segundas-impressoes/</link>
		<comments>http://juliogreff.net/jquery-segundas-impressoes/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 11:00:10 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=171</guid>
		<description><![CDATA[Por algum motivo de natureza desconhecida, nunca gostei muito de jQuery. Talvez eu não tenha gostado muito do $ pau-pra-toda-obra, ou então da excessiva facilidade que a biblioteca propõe. Por alguma outra razão também desconhecida, há alguns dias atrás resolvi dar uma segunda olhada na biblioteca-prodígio. Se tem tanta gente usando, algo de bom deve [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/interfaces-de-usuario-com-javascript/' rel='bookmark' title='Permanent Link: Interfaces de Usuário com JavaScript'>Interfaces de Usuário com JavaScript</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/escolhendo-o-framework-certo/' rel='bookmark' title='Permanent Link: Escolhendo o Framework Certo'>Escolhendo o Framework Certo</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p class="left"><img src="http://juliogreff.net/wp-uploads/jquery.png" alt="jQuery - Write Less, Do More" title="jQuery - Write Less, Do More" /></p>
<p>Por algum motivo de natureza desconhecida, nunca gostei muito de <a href="http://jquery.com" title="jQuery - Write Less, Do More" rel="external">jQuery</a>. Talvez eu não tenha gostado muito do $ pau-pra-toda-obra, ou então da excessiva facilidade que a biblioteca propõe. Por alguma outra razão também desconhecida, há alguns dias atrás resolvi dar uma segunda olhada na biblioteca-prodígio. Se tem tanta gente usando, algo de bom deve ter.</p>
<h3>Durante os Testes</h3>
<p>Depois alguns minutos testando a biblioteca direto no Firebug, tive a mesma impressão do que na última vez em que a usei: cada função, cada método faz no mínimo umas três coisas diferentes. Definir um atributo, recuperar seu valor, definir vários atributos ao mesmo tempo e ainda pode servir um cafezinho. Talvez esse tenha sido um dos motivos para me afastar da biblioteca. A diferença é que de uns tempos pra cá venho aumentando bastante minha maturidade na programação, e vi que esse conceito pode servir muito bem. Ponto pro jQuery.</p>
<p>Outra característica que não me agradou muito na primeira experiência com jQuery é o retorno da função <code>$</code>: ela sempre retorna um objeto jQuery, e não o objeto DOM que eu escolhi. Isso, na época, me incomodou muito. E se, na pressa, eu quiser jogar um <code>innerHTML</code> e não quiser me preocupar com criar e injetar nós? Mais uma estupidez minha, o método <code>html</code> cuida de tudo isso, e nunca mais vou precisar me preocupar em criar nós&#8230; Além do mais, acabei descobrindo que não estender objetos nativos é bem melhor em questões de performance. Mais um ponto pro cifrão polivalente.</p>
<h3>Durante a Produção</h3>
<p>Hora de passar para a prática. Como qualquer outra nova ferramenta, é complicado usar jQuery quando se está acostumado à <a href="http://mootools.net/" title="Mootools Library" rel="external">Mootools</a>. Estou me atrapalhando bastante, principalmente na hora de usar os seletores. Já cansei de usar <code>$$</code>, esquecer o # antes de IDs, trocar nomes de métodos, enfim. Tudo normal, eu pego o jeito&#8230;</p>
<p>Esquecendo a questão da produtividade em período de adaptação, fiquei bastante satisfeito com a biblioteca. No que ela se propõe a fazer, é simplesmente fenomenal, algo fora de série. Versátil, simples e poderosa. Gostei muito dos métodos relacionados a Ajax que, para qualquer requisição simples, são úteis e otimizados ao extremo em termos de código.</p>
<h3>E a escolha?</h3>
<p>Gostei de jQuery, muito. Acredite, se você nunca usou, não sabe o que está perdendo, e se já usou e não gostou antes de testar mais aprofundadamente, não seja cabeça-dura como eu e dê outra chance. <a href="http://ejohn.org/" title="John Resig" rel="external">John Resig</a>, o criador da jQuery, com certeza sabia o que estava fazendo, até porque ele é o cara!</p>
<p>Mas e a Mootools, onde fica nessa história? Não vou abandoná-la, ainda é minha biblioteca preferida. Ela é imbatível em características que o jQuery não tem. Ambos servem para propósitos diferentes. Não vou &#8220;escolher&#8221; alguma das duas, o ideal é unir o potencial de ambas, não sou xiita.</p>
<p>Essa experiência serviu para me mostrar que uma ferramenta não pode resolver <strong>todos</strong> os seus problemas de maneira eficiente, mas podemos unir várias ferramentas para resolver vários problemas da melhor maneira possível. Aguardem os próximos capítulos dessa história&#8230;</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/interfaces-de-usuario-com-javascript/' rel='bookmark' title='Permanent Link: Interfaces de Usuário com JavaScript'>Interfaces de Usuário com JavaScript</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/escolhendo-o-framework-certo/' rel='bookmark' title='Permanent Link: Escolhendo o Framework Certo'>Escolhendo o Framework Certo</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/jquery-segundas-impressoes/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
		<item>
		<title>Scroller Made in Mootools</title>
		<link>http://juliogreff.net/scroller-made-in-mootools/</link>
		<comments>http://juliogreff.net/scroller-made-in-mootools/#comments</comments>
		<pubDate>Mon, 04 Aug 2008 09:00:17 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[WebStandards]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[scripts]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=164</guid>
		<description><![CDATA[Mesmo a Mootools sendo a biblioteca perfeita (pra mim, pelo menos), algumas vezes é preciso de uma pequena ajudinha externa. Exemplo de hoje: scrollers! Nada mais fácil do que fazer um deles exclusivamente com Mootools, mas é meio chato ter que criar os controladores (ou setinhas) e saber quem é o anterior ou o próximo. [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/sliders-com-mootools/' rel='bookmark' title='Permanent Link: Sliders com Mootools'>Sliders com Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Mesmo a Mootools sendo a biblioteca perfeita (pra mim, pelo menos), algumas vezes é preciso de uma pequena ajudinha externa. Exemplo de hoje: <strong>scrollers</strong>! Nada mais fácil do que fazer um deles exclusivamente com Mootools, mas é meio chato ter que criar os controladores (ou setinhas) e saber quem é o anterior ou o próximo.</p>
<p>Como acabei precisando de um scroller assim, aproveitei e criei uma classe que poderei reutilizar em algum outro projeto em que ela se faça necessária. Já que gostei do resultado, vou aproveitar e deixar o script pra vocês. O resultado será algo parecido com <a title="Scroller Made in Mootools" href="http://juliogreff.net/scripts/mootools-scroller/">esse exemplo</a>. Prontos? Então vamos lá!</p>
<h3>O Código</h3>
<p class="left"><a title="Scroller Made in Mootools" href="http://juliogreff.net/scripts/mootools-scroller/"><img title="Scroller Made in Mootools" src="http://juliogreff.net/wp-uploads/download-script.png" alt="Scroller Made in Mootools" /></a></p>
<p>O script não poderia ser mais simples, em torno de umas 50 linhas de código (você precisaria de <strong>centenas</strong> se não fosse a Mootools, ou alguma outra biblioteca que faça o serviço sujo). Você pode fazer o download dele <a title="Scroller Made in Mootools" href="http://juliogreff.net/scripts/mootools-scroller/">aqui</a>. Para &#8220;instalá-lo&#8221;, basta incluí-lo em seu documento, assim como a <a title="Mootools - Download" rel="external" href="http://mootools.net/download/">Mootools</a>. Além disso, você também vai precisar do plugin <strong>Fx.Scroll</strong>, que pode ser conseguido no <a title="Mootools - More Builder" rel="external" href="http://mootools.net/more">More Builder da Mootools</a>, e incluí-lo no seu documento também.</p>
<p><strong>Update:</strong> logo que precisei usar a classe novamente, vi que cometi um erro grotesco. Código atualizado, com erro corrigido e uma nova funcionalidade, explicada logo abaixo. Valendo uma mariola pra quem descobrir minha estupidez, os dois códigos estão disponíveis para download.</p>
<h3>O HTML</h3>
<p>O HTML necessário é a parte que eu considero a mais complicada, chata e sem graça. Sem o HTML criado direitinho, o scroller não vai funcionar. A lógica é a seguinte: precisamos de um <strong>container</strong> (geralmente uma div) de uma largura (ou altura) fixa. Esse container é quem vai esconder os itens que não serão mostrados no scroller. Dentro desse container, vamos precisar de mais um container (geralmente mais uma div, ou então uma lista), também de altura/largura fixa, mas que seja igual a toda a extensão dos itens. Ou seja, o container de dentro será maior do que o container de fora.</p>
<pre><code>&lt;div id="container"&gt;
    &lt;div&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Acredite, é mais complicado do que parece. Agora sim, podemos colocar nossos itens dentro do container que está dentro de outro container (hein?). Fora isso, precisamos apenas de mais dois elementos (podem ser links) para serem os handlers de anterior e próximo e pronto, aí está o HTML. Só precisamos do CSS que vai ajudar na mágica do script.</p>
<h3>O CSS</h3>
<p>Como o nosso container externo precisa esconder o que há no container interno (que é maior), ele precisará de um <code>overflow: hidden</code>. Sem isso, tudo o que há no container interno ficará exposto, e aí o scroller perde a graça. Também não podemos nos esquecer de definir as alturas/larguras dos containers e itens. Vamos fazer primeiro um scroller vertical, ligeiramente mais fácil:</p>
<pre><code>* {
  margin: 0;
  padding: 0;
}
#container {
  height: 20px;
  overflow: hidden;
  width: 100px;
}
#container div {
  /* Não é necessário definir a altura, o elemento irá "crescer" sozinho */
  width: 100px;
}
#container p {
  /* A mesma altura de #container, mas isso pode variar com o gosto do freguês */
  height: 20px;
}</code></pre>
<h3>O Script</h3>
<p>Agora sim, vamos colocar a mão na massa. Minha classe, quando instanciada, leva apenas dois parâmetros: o container exterior (o container interior é deduzível&#8230;) e as opções. Dentre elas, temos à disposição todas as <a title="Mootools - Documentação da classe Fx" rel="external" href="http://docs.mootools.net/Fx/Fx">opções da classe Fx</a>, e também <code>previousButton</code> e <code>nextButton</code>, que são os handlers para o elemento anterior e posterior do scroller.</p>
<pre><code>var myScroller = new Fx.Scroller("container", { previousButton: "previous", nextButton: "next" })</code></pre>
<p>Aproveitando a atualização da classe, também criei vergonha na cara e adicionei os eventos <code>onNext</code> e <code>onPrevious</code>, executados quando o scroller vai para frente ou para trás, respectivamente.</p>
<p>Pronto! Você escreveu apenas uma linha de script e seu scroller já está funcional, passando de um elemento para outro com apenas um clique!</p>
<h3>Scrollers Horizontais</h3>
<p>A termos de script, um scroller horizontal é idêntico. A mágica se esconde toda no CSS para este caso. Primeiro precisamos colocar os elementos um ao lado do outro dentro do container interior, certo? Certo. Para isso, usamos a propriedade <code>float</code>, sinta-se à vontade para escolher a qual lado flutuar.</p>
<p>Passando ao segundo passo, devemos definir a <strong>largura</strong>. A fórmula é a seguinte: número de elementos vezes a largura de qualquer um deles. Se você usar <code>margins</code> ou <code>paddings</code>, não esqueça de levá-los em consideração também.</p>
<p>Usando a técnica de scrollers horizontais, também podemos criar scrollers &#8220;mistos&#8221;. Nesse caso, há várias linhas e várias colunas de itens ao mesmo tempo. O efeito, se bem usado, pode ficar muito interessante. Quem teve a oportunidade de observar os demos da versão 1.1 da Mootools deve saber do que estou falando.</p>
<h3>Dicas para Ir Além</h3>
<p>Bem, só fazer itens se mexerem pode não ter tanta graça assim pra você. Como eu disse, minha classe usa todas as opções da classe Fx, ou seja, eventos, transições, offsets, enfim. Agora é sua vez de brincar! Use o offset para mudar a posição dos itens, eventos para mudar sua opacidade, criatividade! Também sinta-se livre para usar os métodos da classe também: <code>next</code>, <code>previous</code>, <code>scrollTo</code>, <code>enable</code> e <code>disable</code> (para ativar ou desativar os botões).</p>
<p>Espero que isso sirva pra alguma coisa! E também espero postar em um intervalo um pouco menor&#8230; O pessoal deve ter pensado que eu fugi do país depois de uma <a title="Frameworks: Por um PHP Menos Ruim" href="http://juliogreff.net/frameworks-por-um-php-menos-ruim/">certa polêmica</a>. Mas não, só estive ocupado mesmo&#8230; Até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
<li><a href='http://juliogreff.net/mootools-eventos/' rel='bookmark' title='Permanent Link: Mootools &#8211; Eventos'>Mootools &#8211; Eventos</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/sliders-com-mootools/' rel='bookmark' title='Permanent Link: Sliders com Mootools'>Sliders com Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/scroller-made-in-mootools/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Lançada a Mootools 1.2</title>
		<link>http://juliogreff.net/lancada-a-mootools-12/</link>
		<comments>http://juliogreff.net/lancada-a-mootools-12/#comments</comments>
		<pubDate>Thu, 12 Jun 2008 08:08:48 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[bibliotecas]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=155</guid>
		<description><![CDATA[E foi lançada a nova versão da Mootools! E juntamente com isso, várias novidades: um novo visual do site, nova documentação, muitas funcionalidades interessantes. Nem mesmo o blog oficial não anunciou a nova versão (inclusive está &#8220;fora do ar&#8221;, como diz a página inicial, assim como os demos), mas tudo bem. Dentre as novidades, podemos [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>E foi lançada a nova versão da <a href="http://mootools.net" title="Mootools" rel="external">Mootools</a>! E juntamente com isso, várias novidades: um novo visual do site, nova documentação, muitas funcionalidades interessantes. Nem mesmo o blog oficial não anunciou a nova versão (inclusive está &#8220;fora do ar&#8221;, como diz a página inicial, assim como os demos), mas tudo bem.</p>
<p class="center">
<img src="http://juliogreff.net/wp-uploads/mootools.gif" title="Mootools 1.2" alt="Mootools 1.2" />
</p>
<p>Dentre as novidades, podemos citar o <a href="http://docs.mootools.net/Utilities/Swiff" rel="external" title="Swiff">Swiff</a> (plugin para integração com Flash), <a href="http://docs.mootools.net/Element/Element#Element:store" title="Element Storage" rel="external">Element Storage</a>, entre <a href="http://blog.mootools.net/2007/11/14/mootools-1-2-beta-1" title="Mootools 1.2 Beta 1" rel="external">várias outras</a>, como foi anunciado na versão beta (que eu não testei, diga-se de passagem).</p>
<p>Pelo visto, <strong>mais</strong> coisas interessantes para descobrir nessa biblioteca que eu acho simplesmente incrível, e agora facilitando nossas vidas como nunca! Vai lá, <a href="http://mootools.net/core" title="Mootools Core Builder" rel="external">faça o download</a>, teste, e garanto que você vai gostar!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-vs-jquery/' rel='bookmark' title='Permanent Link: Mootools vs. jQuery'>Mootools vs. jQuery</a></li>
<li><a href='http://juliogreff.net/mootools-classes/' rel='bookmark' title='Permanent Link: Mootools &#8211; Classes'>Mootools &#8211; Classes</a></li>
<li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/lancada-a-mootools-12/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>Sliders com Mootools</title>
		<link>http://juliogreff.net/sliders-com-mootools/</link>
		<comments>http://juliogreff.net/sliders-com-mootools/#comments</comments>
		<pubDate>Tue, 27 May 2008 15:02:21 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mootools]]></category>
		<category><![CDATA[slider]]></category>
		<category><![CDATA[ui]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=148</guid>
		<description><![CDATA[A Mootools é realmente surpreendente, tem de tudo mesmo. É hora de conhecer o componente Slider, para fazermos barras de rolagem com JavaScript. O Slider Antes de começarmos a brincar com os controles de rolagem postos em nossas páginas, devemos antes criar a estrutura do HTML. Precisamos de dois elementos: um slider (o container) e [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>A <a title="Mootools Library" href="http://mootools.net">Mootools</a> é realmente surpreendente, tem de tudo mesmo. É hora de conhecer o componente <strong>Slider</strong>, para fazermos <a title="Mootools Sliders" href="http://juliogreff.net/scripts/mootools-slider/">barras de rolagem com JavaScript</a>.</p>
<h3>O Slider</h3>
<p>Antes de começarmos a brincar com os controles de rolagem postos em nossas páginas, devemos antes criar a estrutura do HTML. Precisamos de dois elementos: um <code>slider</code> (o container) e um <strong>knob</strong> (o controle). Vamos usar duas divs aninhadas:</p>
<pre><code>&lt;div id="slider"&gt;
  &lt;div id="knob"&gt;&lt;/div&gt;
&lt;/div&gt;</code></pre>
<p>Logicamente, também devemos estilizar esses elementos, para que eles se pareçam, mesmo que remotamente, com um slider. Eu optei pela configuração mais simples possível:</p>
<pre><code>#slider{
  background: #000;
  width: 200px;
}
#knob {
  background: #f00;
  width: 20px;
}</code></pre>
<p>Pronto! Ele já está lá, não se movendo de jeito algum, mas está lá.</p>
<h3>Movendo o Controle</h3>
<p>Para que possamos mover o dito cujo, vamos instanciar a classe <code>Slider</code>, que faz todo o trabalho sujo para nós. Essa classe recebe três parâmetros: o container, o controle e as opções para o slider. Como queremos um simples slider comum e sem graça (por enquanto), vamos omitir o terceiro parâmetro.</p>
<pre><code>var slider = new Slider("slider", "knob")</code></pre>
<p>Difícil, não? Já temos um slider funcional! Aliás, quase funcional, ele não faz mais nada além de se mover. De que adianta um slider que só se move, e não retorna sua posição? Calma, chegaremos lá.</p>
<h3>Adicionando Funcionalidade</h3>
<p>Através da opção <code>onChange</code>, podemos fazer algo com a posição do slider. Pode-se atualizar um campo com a posição atual, mudar o tamanho/posição de alguma coisa na tela, enfim, não sou muito criativo, você pode ir bem mais longe que isso.</p>
<p>Para essa opção, devemos passar uma função que receberá como parâmetro a posição atual do slider. A partir disso, podemos fazer qualquer coisa com ele. Veja:</p>
<pre><code>var slider = new Slider("slider", "knob", {
  "onChange": function(pos) {
    $("div-qualquer").setHTML("Posição do Slider: " + pos)
  }
})</code></pre>
<p>É lógico que esse é o uso mais simplório possível. Fiz algo nem tão sem graça assim, veja nos <a title="Mootools Sliders" href="http://juliogreff.net/scripts/mootools-slider/">exemplos</a>. Aumenta fonte, diminui fonte&#8230; Dá pra fazer mais que isso sim, e muito.</p>
<h3>Outras Opções</h3>
<p>A Mootools também nos deixa mais algumas opções para incrementarmos nosso slider. São elas:</p>
<ul>
<li><strong>steps</strong>: Indica o número de &#8220;steps&#8221; que o slider terá. Por padrão é setado como 100.</li>
<li><strong>mode</strong>: &#8220;vertical&#8221; ou &#8220;horizontal&#8221;. Define o modo do slider.</li>
<li><strong>offset</strong>: Recuo do controle em relação ao container.</li>
<li><strong>onComplete</strong>: função a ser executada quando o controle for soltado. Não recebe parâmetros, então é necessário usar o método <code>getPos</code> caso seja necessário utilizar a posição.</li>
</ul>
<h3>Ficou feio?</h3>
<p>Aqui apliquei somente o estilo básico para o slider funcionar. Você pode se divertir com CSS, e torná-lo muito mais atraente. Nos <a title="Mootools Sliders" href="http://juliogreff.net/scripts/mootools-slider/">exemplos</a> mostrei meus estupendos talentos em design e criei algo mais interessante aos olhos do usuário.</p>
<p>Vou ficando por aqui, até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
<li><a href='http://juliogreff.net/mootools-menu-sanfona/' rel='bookmark' title='Permanent Link: Mootools &#8211; Menu Sanfona'>Mootools &#8211; Menu Sanfona</a></li>
<li><a href='http://juliogreff.net/mootools-chain/' rel='bookmark' title='Permanent Link: Mootools &#8211; Chain'>Mootools &#8211; Chain</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/sliders-com-mootools/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Mootools &#8211; Menu Sanfona</title>
		<link>http://juliogreff.net/mootools-menu-sanfona/</link>
		<comments>http://juliogreff.net/mootools-menu-sanfona/#comments</comments>
		<pubDate>Sun, 13 Apr 2008 19:48:54 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[menu]]></category>
		<category><![CDATA[mootools]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/?p=138</guid>
		<description><![CDATA[A Mootools, além de ser uma ótima biblioteca para tarefas variadas relacionadas a Strings, Arrays, DOM e Ajax, ela também possui alguns &#34;extras&#34; muito úteis na hora de desenvolver algo mais &#34;bonitinho&#34;. O menu sanfona (ou accordion menu, como preferir) é um deles, do qual irei falar nesse post mais-do-que-atrasado. Aproveite e veja como ficará. [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/sliders-com-mootools/' rel='bookmark' title='Permanent Link: Sliders com Mootools'>Sliders com Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>
   A <a href="http://mootools.net/" rel="external" title="Mootools Library">Mootools</a>, além de ser uma ótima biblioteca para tarefas variadas relacionadas a Strings, Arrays, DOM e Ajax, ela também possui alguns &quot;extras&quot; muito úteis na hora de desenvolver algo mais &quot;bonitinho&quot;. O <strong>menu sanfona</strong> (ou <strong>accordion menu</strong>, como preferir) é um deles, do qual irei falar nesse post mais-do-que-atrasado. <a href="http://juliogreff.net/scripts/mootools-accordion/" title="Menu Sanfona com Mootools - Exemplo">Aproveite e veja como ficará</a>.
</p>
<h3>
   O HTML<br />
</h3>
<p>
   Antes de começar com o comportamento, primeiro vamos criar o conteúdo do menu. Uma lista simples, com outras listas aninhadas, as quais<br />
   ficarão escondidas até que seus títulos sejam clicados.
</p>
<pre><code>&lt;ul&gt;
        &lt;li&gt;&lt;h3&gt;Título 1&lt;/h3&gt;
                &lt;ul&gt;
                        &lt;li&gt;Item 1&lt;/li&gt;
                        &lt;li&gt;Item 2&lt;/li&gt;
                        &lt;li&gt;Item 3&lt;/li&gt;
                &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;h3&gt;Título 2&lt;/h3&gt;
                &lt;ul&gt;
                        &lt;li&gt;Item 1&lt;/li&gt;
                        &lt;li&gt;Item 2&lt;/li&gt;
                        &lt;li&gt;Item 3&lt;/li&gt;
                &lt;/ul&gt;
        &lt;/li&gt;
&lt;/ul&gt;</code></pre>
<p>Nada em especial até agora, mas temos que incluir mais alguns atributos aí. Para que a Mootools possa identificar quais itens serão clicáveis e quais deverão ficar &#8220;escondidos&#8221;, precisamos identificá-los com classes. Não há restrição para alguma classe específica, mas costumo usar <code>toggler</code> para os clicáveis e <code>element</code> para os itens escondidos.</p>
<pre><code>&lt;ul&gt;
        &lt;li&gt;&lt;h3 class="toggler"&gt;Título 1&lt;/h3&gt;
                &lt;ul class="element"&gt;
                        &lt;li&gt;Item 1&lt;/li&gt;
                        &lt;li&gt;Item 2&lt;/li&gt;
                        &lt;li&gt;Item 3&lt;/li&gt;
                &lt;/ul&gt;
        &lt;/li&gt;
        &lt;li&gt;&lt;h3 class="toggler"&gt;Título 2&lt;/h3&gt;
                &lt;ul class="element"&gt;
                        &lt;li&gt;Item 1&lt;/li&gt;
                        &lt;li&gt;Item 2&lt;/li&gt;
                        &lt;li&gt;Item 3&lt;/li&gt;
                &lt;/ul&gt;
        &lt;/li&gt;
&lt;/ul&gt;</code></pre>
<h3>O Script</h3>
<p>Agora sim, a parte difícil, ou nem tanto assim. Como tudo na Mootools é baseado em <a href="http://juliogreff.net/mootools-classes/" title="Mootools - Classes">classes</a>, o menu sanfona não foge à regra. A classe <code>Accordion</code> é a responsável por todo o menu, desde identificar seus elementos até mostrar/esconder o conteúdo.</p>
<pre><code>window.addEvent('domready', function() {
	var accordion = new Accordion('h3.toggler', 'ul.element')
})</code></pre>
<p>Como parâmetros, passamos os títulos clicáveis e o conteúdo de cada item, somente isso. A biblioteca cuida do resto. Difícil, não?</p>
<h3>Algumas Opções</h3>
<p>Podemos ir um pouco além do básico, e adicionar alguma personalização em nosso menu. Para isso, a classe nos dá algumas opções. Basta passar um objeto como terceiro parâmetro. As opções possíveis são:</p>
<ul>
<li><code>show</code>: índice do elemento a ser mostrado inicialmente</li>
<li><code>display</code>: índice do elemento a ser mostrado inicialmente. Diferentemente de <code>show</code>, esse elemento será mostrado com uma transição</li>
<li><code>fixedHeight</code>: altura fixa dos itens, padrão <code>false</code></li>
<li><code>fixedWidth</code>: largura fixa dos itens, padrão <code>false</code></li>
<li><code>height</code>: inclui transição de altura, padrão <code>true</code></li>
<li><code>opacity</code>: inclui transição de opacidade, padrão <code>true</code></li>
<li><code>width</code>: inclui transição de largura, padrão <code>false</code></li>
<li><code>alwaysHide</code>: permite esconder todos elementos, em vez de manter ao menos um sendo mostrado, padrão <code>false</code></li>
</ul>
<p>Além das opções, temos também dois <a href="http://juliogreff.net/mootools-eventos/" title="Mootools - Eventos">eventos</a>:</p>
<ul>
<li><code>onActive</code>: executado quando algum item se tornar ativo</li>
<li><code>onBackground</code>: executado quando algum item for escondido</li>
</ul>
<h3>Finalizando</h3>
<p>Agora vamos modificar um pouco nosso menu, utilizando as opções e eventos vistos acima.</p>
<pre><code>window.addEvent('domready', function() {
	var accordion = new Accordion('h3.toggler', 'ul.element', {
		"opacity": false,
		"onActive": function(toggler) {
			toggler.setStyle("color", "#f00");
			toggler.setStyle("font-weight", "bold");
		},
		"onBackground": function(toggler) {
			toggler.setStyle("color", "#000");
			toggler.setStyle("font-weight", "normal");
		}
	})
})</code></pre>
<p>Pronto! <a href="http://juliogreff.net/scripts/mootools-accordion/" title="Menu Sanfona com Mootools - Exemplo">Veja o exemplo finalizado</a>. E mais: retirando todas as transições, você tem um menu sanfona totalmente customizável. O poder e a facilidade da Mootools. Incrível, muito bem pensado, por isso adoro essa biblioteca. Até mais!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/mootools-options/' rel='bookmark' title='Permanent Link: Mootools &#8211; Options'>Mootools &#8211; Options</a></li>
<li><a href='http://juliogreff.net/lancada-a-mootools-12/' rel='bookmark' title='Permanent Link: Lançada a Mootools 1.2'>Lançada a Mootools 1.2</a></li>
<li><a href='http://juliogreff.net/ajax-com-a-mootools/' rel='bookmark' title='Permanent Link: Ajax com a Mootools'>Ajax com a Mootools</a></li>
<li><a href='http://juliogreff.net/sliders-com-mootools/' rel='bookmark' title='Permanent Link: Sliders com Mootools'>Sliders com Mootools</a></li>
<li><a href='http://juliogreff.net/scroller-made-in-mootools/' rel='bookmark' title='Permanent Link: Scroller Made in Mootools'>Scroller Made in Mootools</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/mootools-menu-sanfona/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript Orientado a Objetos &#8211; Parte 3</title>
		<link>http://juliogreff.net/javascript-orientado-a-objetos-parte-3/</link>
		<comments>http://juliogreff.net/javascript-orientado-a-objetos-parte-3/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 18:00:00 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[herança]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/javascript-orientado-a-objetos-parte-3/</guid>
		<description><![CDATA[Volto com a terceira parte sobre JavaScript Orientado a Objetos. Então chega de papo e vamos logo ao que interessa. Propriedades Estáticas Propriedades e métodos estáticos são aqueles que podem ser acessados de qualquer lugar do script, sem a necessidade de instanciar a classe. Considera-se que o JavaScript não suporta esse conceito, já que não [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>Volto com a terceira parte sobre JavaScript Orientado a Objetos. Então chega de papo e vamos logo ao que interessa.</p>
<h3>Propriedades Estáticas</h3>
<p>Propriedades e métodos estáticos são aqueles que podem ser acessados de qualquer lugar do script, sem a necessidade de instanciar a classe. Considera-se que o JavaScript não suporta esse conceito, já que não possui classes, mas pode-se também simular.</p>
<p>Funções não deixam de ser objetos, e objetos podem ter propriedades. Veja no exemplo:</p>
<pre xml:space="preserve">
<code>function Person() {  }
        Person.staticMethod = function() { alert("Método Estático"); }
        Person.staticMethod(): // "Método Estático"
        var me = new Person();
        me.staticMethod(); // Retornará erro</code></pre>
<p>Também muito simples, e bem útil em certas ocasiões. Podemos tomar como exemplo a <a href="http://www.mootools.net/" rel="external" title="Mootools Library">Mootools</a>, com o <a href="http://www.juliogreff.blog.br/mootools-classes" title="Mootools - Classes">Class</a> e <code>Class.empty</code>. <code>Class</code> é um construtor, e <code>Class.empty</code> é um método estático.</p>
<h3>Herança</h3>
<p>A herança é outro conceito que o JavaScript não implementa formalmente, necessitando das famosas gambiarras. Quando bem empregada, permite uma grande reutilização de código, criando classes derivadas a partir de uma superclasse (classe-mãe), herdando todas as propriedades.</p>
<p>Existem vários tipos específicos de pessoas, em vários sentidos. Brasileiros, portugueses, americanos, vendedores, médicos, desenvolvedores&#8230; Mesmo sendo mais específicos, todos eles têm características comuns de uma pessoa. Assim, o construtor <code>Brazilian</code> é derivado de <code>Person</code>.</p>
<p>Primeiro, vamos criar os construtores com suas propriedades.</p>
<pre xml:space="preserve">
<code>function Person() {
                this.eyes = 2;
                this.speak = function(message) {
                        alert(message);
                }
        }
        function Brazilian() {
                this.birthCountry = "Brasil";
        }</code></pre>
<p>Pessoas falam, e isso se aplica também aos brasileiros, mas nem todas as pessoas nasceram no Brasil. Assim, a superclasse (ou super-construtor) é <code>Person</code>, e somente nela definimos as propriedades comuns.</p>
<p>Para fazer a herança existem vários métodos, mas vou explicar agora somente o que considero o mais simples e usado. Basta criar uma instância do &#8220;super-construtor&#8221; no protótipo do construtor derivado, assim:</p>
<pre xml:space="preserve">
<code>Brazilian.prototype = new Person;</code></pre>
<p>Todo o construtor <code>Person</code> foi instanciado como parte de <code>Brazilian</code>. Agora podemos criar um objeto <code>Brazilian</code> e utilizar tanto as propriedades específicas (definidas no próprio construtor) quanto as do &#8220;super-construtor&#8221;.</p>
<pre xml:space="preserve">
<code>var me = new Brazilian("Julio Greff");
        alert(me.birthCountry); // "Brasil"
        me.speak("Olá!"); // "Olá!"</code></pre>
<p>Existem outros métodos para herança, mas como já disse ficarão para outra oportunidade. E a série sobre JavaScript Orientado a Objetos se encerra aqui! Qualquer correção ou sugestão será bem vinda, basta comentar! Até!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/javascript-orientado-a-objetos-parte-3/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>JavaScript Orientado a Objetos &#8211; Parte 2</title>
		<link>http://juliogreff.net/javascript-orientado-a-objetos-parte-2/</link>
		<comments>http://juliogreff.net/javascript-orientado-a-objetos-parte-2/#comments</comments>
		<pubDate>Wed, 20 Feb 2008 01:12:36 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/javascript-orientado-a-objetos-parte-2/</guid>
		<description><![CDATA[O JavaScript, apesar de ser usado há muito tempo quase que exclusivamente como linguagem de programação estruturada, também é uma linguagem de programação orientada a objetos poderosa. Nessa segunda parte da série, vamos nos aprofundar um pouco mais nessa técnica de programação. A Propriedade prototype No JavaScript, toda função construtora possui uma propriedade chamada Function.prototype. [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/as-vantagens-de-prototype/' rel='bookmark' title='Permanent Link: As Vantagens de Prototype'>As Vantagens de Prototype</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>O JavaScript, apesar de ser usado há muito tempo quase que exclusivamente como linguagem de programação estruturada, também é uma linguagem de programação orientada a objetos poderosa. Nessa segunda parte da série, vamos nos aprofundar um pouco mais nessa técnica de programação.</p>
<h3>A Propriedade prototype</h3>
<p>No JavaScript, toda função construtora possui uma propriedade chamada <code>Function.prototype</code>. Essa propriedade nos permite adicionar e, em certos casos modificar, propriedades ou métodos de um construtor, após sua definição. Diferente de PHP, por exemplo, podemos adicionar propriedades durante a execução.</p>
<pre xml:space="preserve">
<code>function Person() {}
        var me = new Person();
        alert(me.eyes); // undefined
        Person.prototype.eyes = 2;
        alert(me.eyes); // 2</code></pre>
<p>Como se pode notar, na primeira tentativa não tínhamos a propriedade definida. Após isso, adicionada em tempo de execução, já temos a propriedade definida.</p>
<p>Também há certas exceções na utilidade do <code>Function.prototype</code>. A primeira delas é que essa propriedade não consegue sobrescrever qualquer coisa que já tenha sido definida no construtor. Não podemos definir uma propriedade no construtor e depois mudar seu valor através de <code>Function.prototype</code>.</p>
<pre xml:space="preserve">
<code>function Person() { this.eyes = 2; }
        var me = new Person();
        alert(me.eyes); // 2
        Person.prototype.eyes = 1;
        alert(me.eyes); // 2, continuo tendo 2 olhos</code></pre>
<p>Para resolver esse problema e continuar usando <code>Function.prototype</code>, podemos definir a propriedade fora do construtor usando a técnica, e sobrescrevê-la da mesma maneira.</p>
<pre xml:space="preserve">
<code>function Person() {}
        Person.prototype.eyes = 2;
        var me = new Person();
        alert(me.eyes); // 2
        Person.prototype.eyes = 1;
        alert(me.eyes); // 1</code></pre>
<p>Outro pequeno problema é quando definimos objetos ou arrays através dessa propriedade. Veja:</p>
<pre xml:space="preserve">
<code>function Person() {}
        Person.prototype.uses = ["watch", "glasses"];
        var me = new Person();
        var you = new Person();
        me.uses.push("hat");
        alert(me.uses); // ["watch", "glasses", "hat"]
        alert(you.uses); // ["watch", "glasses", "hat"]</code></pre>
<p>Com base no exemplo, pode-se ver que o array é compartilhado, assim como todos os seus itens. Moral da história: é preferível definir tudo no próprio construtor, ou então definir apenas métodos através de <code>Function.prototype</code>.</p>
<h3>Encapsulamento</h3>
<p>Formalmente, encapsulamento ainda não existe no JavaScript, mas podemos usar esse recurso disfarçado.</p>
<p>Tudo o que criamos dentro de nossos construtores está no escopo público, ou seja, pode ser acessado de dentro do construtor ou do restante do script. Uma maneira de simular variáveis privadas, que só podem ser acessadas de dentro do construtor e por seus métodos, é utilizando o escopo local. Lembra-se de quando falei sobre <a href="http://juliogreff.net/escopo-de-variaveis/" title="Escopo de Variáveis">escopo de variáveis</a>?</p>
<pre xml:space="preserve">
<code>function Person() {
                this.public = "Variável Pública";
                var private = "Variável Privada";
                this.publicMethod = function() {
                        alert(this.public);
                        alert(private);
                }
                var privateMethod = function() {
                        alert(private);
                }
                this.callPrivate = function() {
                        alert(private);
                }
        }
        var me = new Person();
        alert(me.public); // "Variável Pública";
        alert(me.private); // undefined
        me.publicMethod();
        me.privateMethod(); // Retornará erro
        me.callPrivate();</code></pre>
<p>O exemplo acima exemplifica bem de onde cada tipo de variável pode ser acessado. Já o uso de variáveis protegidas (protected) necessitam de mais gambiarras, mas isso fica pra outra vez.</p>
<p>Quanto ao uso de métodos privados só existe um pequeno problema: não é possível acessar propriedades ou métodos públicos diretamente. Para isso, é necessário <a href="http://juliogreff.net/funcoes-em-diferentes-escopos/" title="Funções em Diferentes Escopos">modificar o escopo</a> em que a função executada, através de <code>Function.bind</code> (função user-defined).</p>
<pre xml:space="preserve">
<code>function Person() {
                this.public = "Variável Pública";
                var bindPublic = function() {
                        alert(this.public);
                }.bind(this);
                bindPublic();
        }
        var me = new Person();</code></pre>
<p>Para testar, lembre-se de copiar a função <code>Function.bind</code>!</p>
<p>E a parte 2 se encerra aqui. Volto na <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-3/" title="JavaScript Orientado a Objetos - Parte 3">parte 3</a> pra falar mais um pouco sobre programação orientada a objetos. Até lá!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-1/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 1'>JavaScript Orientado a Objetos &#8211; Parte 1</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/as-vantagens-de-prototype/' rel='bookmark' title='Permanent Link: As Vantagens de Prototype'>As Vantagens de Prototype</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/javascript-orientado-a-objetos-parte-2/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>JavaScript Orientado a Objetos &#8211; Parte 1</title>
		<link>http://juliogreff.net/javascript-orientado-a-objetos-parte-1/</link>
		<comments>http://juliogreff.net/javascript-orientado-a-objetos-parte-1/#comments</comments>
		<pubDate>Mon, 18 Feb 2008 18:00:38 +0000</pubDate>
		<dc:creator>Julio Greff</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[poo]]></category>

		<guid isPermaLink="false">http://juliogreff.blog.br/javascript-orientado-a-objetos-parte-1/</guid>
		<description><![CDATA[O JavaScript, apesar de ser usado há muito tempo quase que exclusivamente como linguagem de programação estruturada, também é uma linguagem de programação orientada a objetos poderosa. Nessa série &#8211; remodelada &#8211; vou mostrar um pouco sobre o assunto. Depois de muito tempo, resolvi editar essa série e repostá-la aqui. Aprendi um pouco mais sobre [...]

<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></description>
			<content:encoded><![CDATA[<p>O JavaScript, apesar de ser usado há muito tempo quase que exclusivamente como linguagem de programação estruturada, também é uma linguagem de programação orientada a objetos poderosa. Nessa série &ndash; remodelada &ndash; vou mostrar um pouco sobre o assunto.</p>
<p>Depois de muito tempo, resolvi editar essa série e repostá-la aqui. Aprendi um pouco mais sobre o assunto através da prática, corrigi alguns erros &ndash; muito criticados na época &ndash; e adicionei algumas informações que achei pertinentes. Como dá pra ver, o permalink continua o mesmo, e a versão antiga da série já não está mais no ar. Espero que as correções e adições possam esclarecer bem o assunto.</p>
<h3>Alguns Conceitos</h3>
<p>Antes de começarmos a colocar as mãos em código, vamos aprender um pouco de teoria. O JavaScript não é uma linguagem orientada a objetos completamente desenvolvida, e não implementa alguns conceitos nativamente, como herança e variáveis públicas e privadas, dependendo de &#8220;gambiarras&#8221; para sua implementação.</p>
<p>A base da programação orientada a objetos é, logicamente, objetos. Um objeto é uma abstração de algo real (uma mesa, um carro, a janela do navegador, um elemento HTML&#8230;). Esse objeto possui sua própria estrutura de dados, encapsulada em seu próprio escopo. Esses dados podem ser tipos primitivos (Strings, Arrays, Numbers, Booleans&#8230;), funções (as quais chamaremos de métodos, quando dentro dos objetos) e até outros objetos.</p>
<p>Para criarmos um objeto, precisamos da definição de sua estrutura de dados, criada através de uma matriz. Essa matriz é chamada de classe, ou construtor no JavaScript.</p>
<p>De começo creio que é o suficiente. Quando for necessário, explicarei outros conceitos, como encapsulamento, polimorfismo, herança&#8230;</p>
<h3>Criando Construtores</h3>
<p>Em nosso querido JavaScript, um construtor é apenas uma função comum, que é instanciada em uma variável. Essa instância se faz através da palavra-chave <code>new</code>, indicando a criação de um novo objeto.</p>
<pre><code>function Person() {}
	var me = new Person();</code></pre>
<p>A palavra-chave <code>new</code>, entretanto, só é necessária caso quando a função não retorna o objeto recém-criado. Para retorná-lo, usamos a palavra-chave <code>this</code>.</p>
<pre><code>function Person() { return this; }
	var me = Person();</code></pre>
<p>O <code>this</code>, apesar de estar no construtor, refere-se ao próprio objeto. Ele será bem usado mais a frente.</p>
<h3>Definindo Propriedades</h3>
<p>Propriedades, ou atributos, são os dados que ficam encapsulados no escopo do objeto. Como dito mais acima, essas propriedades podem ser tipos primitivos, funções ou outros objetos.</p>
<p>Seguindo a idéia de algo real, toda pessoa tem um nome. Vamos dar um nome à pessoa que &#8220;criamos&#8221;.</p>
<pre><code>var me = new Person();
	me.name = "Julio Greff";</code></pre>
<p>No código acima, definimos um nome apenas ao objeto <code>me</code>. Outros objetos criados a partir de <code>Person</code> não terão a mesma propriedade. Isso é útil em nosso caso, já que somente eu me chamo &#8220;Julio Greff&#8221;, e só você possui seu nome.</p>
<p>A mesma técnica não é tão útil quando precisamos definir uma propriedade para todos os objetos criados a partir de determinado construtor. Já pensou se tivéssemos, por exemplo, que definir o número de olhos para cada pessoa que criarmos? Para evitar retrabalho, definimos as propriedades comuns a todos objetos dentro do construtor.</p>
<pre><code>function Person() {
		this.eyes = 2;
	}</code></pre>
<p>No exemplo, usei <code>this</code> para me referir ao próprio objeto, ou seja, todo objeto criado terá a propriedade <code>eyes</code> igual a 2.</p>
<p>Mesmo definindo uma propriedade comum a todos objetos, podemos modificar alguma propriedade de um objeto em particular sem que os outros sejam afetados. Por exemplo, no caso de um cíclope, caolho ou alguma anomalia genética grave.</p>
<pre><code>var me = new Person();
	var cyclop = new Person();
	cyclop.eyes = 1;
	alert(cyclop.eyes); // 1
	alert(me.eyes); // 2, inalterado</code></pre>
<p>Como você deve ter notado &ndash; ou pelo menos devia &ndash; o acesso às propriedades é feito através do <code>.</code> (ponto), assim como é feita a sua definição.</p>
<p>Desde quando a humanidade é a humanidade, toda pessoa recebe um nome quando nasce. Também pode receber um apelido, uma roupa, ou qualquer outra coisa. Com os objetos acontece algo parecido. Na &#8220;concepção&#8221; de cada objeto, podemos passar parâmetros para a função construtora, assim como faríamos como outra função qualquer. Esses parâmetros podem, mais tarde, vir a se tornarem propriedades do objeto.</p>
<pre><code>function Person(name) {
		this.name = name;
	}</code></pre>
<p>Dessa maneira, quando criamos o objeto, já podemos dar um nome à pessoa, sem a necessidade de fazê-lo depois da criação do objeto.</p>
<h3>Definindo Métodos</h3>
<p>Assim como características (propriedades), pessoas também têm comportamento: andar, falar, comer&#8230; Objetos também têm comportamento, e esses comportamentos são chamados de métodos. Métodos nada mais são do que funções que são executadas no escopo de algum objeto.</p>
<p>Para criarmos métodos, procedemos da mesma forma com que criamos propriedades. Simples, rápido e indolor:</p>
<pre><code>function Person() {
		this.speak = function(message) {
			alert(message);
		}
	}</code></pre>
<p>Para executarmos métodos também procedemos da mesma forma com que acessamos propriedades, com a diferença de que estamos chamando uma função.</p>
<pre><code>me.speak("Olá!"); // "Olá!"</code></pre>
<p>Essa não é a única maneira de criar métodos, mas é a mais simples, mais organizada e mais eficiente. As outras formas usam propriedades apontando para uma função criada normalmente, dentro ou fora do objeto.</p>
<p>Para a parte 1 é o suficiente. Tenha uma boa digestão e logo volto com mais! <a href="http://juliogreff.net/javascript-orientado-a-objetos-parte-2/" title="JavaScript Orientado a Objetos - Parte 2">Até lá</a>!</p>


<h3>Posts Relacionados</h3><ul><li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-3/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 3'>JavaScript Orientado a Objetos &#8211; Parte 3</a></li>
<li><a href='http://juliogreff.net/javascript-orientado-a-objetos-parte-2/' rel='bookmark' title='Permanent Link: JavaScript Orientado a Objetos &#8211; Parte 2'>JavaScript Orientado a Objetos &#8211; Parte 2</a></li>
<li><a href='http://juliogreff.net/php-orientado-a-objeto/' rel='bookmark' title='Permanent Link: PHP Orientado a Objeto'>PHP Orientado a Objeto</a></li>
<li><a href='http://juliogreff.net/estendendo-objetos-dom/' rel='bookmark' title='Permanent Link: Estendendo Objetos DOM'>Estendendo Objetos DOM</a></li>
<li><a href='http://juliogreff.net/estendendo-o-javascript/' rel='bookmark' title='Permanent Link: Estendendo o JavaScript'>Estendendo o JavaScript</a></li>
</ul>]]></content:encoded>
			<wfw:commentRss>http://juliogreff.net/javascript-orientado-a-objetos-parte-1/feed/</wfw:commentRss>
		<slash:comments>20</slash:comments>
		</item>
	</channel>
</rss>

