<?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>programacao javascript &#8211; Turbosite &#8211; Blog</title>
	<atom:link href="https://www.turbosite.com.br/blog/tag/programacao-javascript/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.turbosite.com.br/blog</link>
	<description></description>
	<lastBuildDate>Wed, 19 Jul 2017 13:47:57 +0000</lastBuildDate>
	<language>pt-BR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.2</generator>

<image>
	<url>https://www.turbosite.com.br/blog/wp-content/uploads/2026/09/cropped-logo_turbo_vermelha-32x32.png</url>
	<title>programacao javascript &#8211; Turbosite &#8211; Blog</title>
	<link>https://www.turbosite.com.br/blog</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Javascript lidera o Ranking das linguagens de programação mais usadas no mundo</title>
		<link>https://www.turbosite.com.br/blog/javascript-lidera-o-ranking-das-linguagens-de-programacao-mais-usadas-no-mundo/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Wed, 19 Jul 2017 13:47:57 +0000</pubDate>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[linguagem]]></category>
		<category><![CDATA[lista]]></category>
		<category><![CDATA[programacao]]></category>
		<category><![CDATA[programacao javascript]]></category>
		<category><![CDATA[ranking]]></category>
		<guid isPermaLink="false">https://www.turbosite.com.br/blog/?p=4202</guid>

					<description><![CDATA[Duas das maiores comunidades de desenvolvedores de software da internet, Stack Overflow e o GitHub, atualizaram o ranking com as linguagens de programação que foram mais populares  durante…]]></description>
										<content:encoded><![CDATA[<p>Duas das maiores comunidades de desenvolvedores de software da internet, Stack Overflow e o GitHub, atualizaram o ranking com as linguagens de programação que foram mais populares  durante o mês de junho.</p>
<p>JavaScript ganha destaque na lista, deixando para traz outros nomes famosos, como Java, Python e C++.  Caso curioso, o Switft, que foi apresentado ao mundo  pela Apple, em 2014, conseguiu lugar de destaque no ranking e está cada vez mais próximo de entrar no top 10.</p>
<p>A lista deveria ter apenas 20 entradas, mas tem um empate no seu final, acrescentando mais dois nomes à mesma. Confira:</p>
<p>1 JavaScript<br />
2 Java<br />
3 Python<br />
4 PHP<br />
5 C #<br />
6 C ++<br />
7 CSS<br />
8 Ruby<br />
9 C<br />
10 Objetivo-C<br />
11 Swift<br />
12 Shell<br />
12 Scala<br />
14 R<br />
15 Go<br />
15 Perl<br />
17 TypeScript<br />
18 PowerShell<br />
19 Haskell<br />
20 CoffeeScript<br />
20 Lua<br />
20 Matlab</p>
<p>&nbsp;</p>
<p>Podemos observar dois pontos desde 2012 no ranking: o poder de permanência notável de Java Script e Java no topo dos rankings. Java nunca esteve abaixo da segunda posição. Já o C++ sempre esteve presente entre as dez principais linguagens.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter size-large wp-image-4203" src="https://www.turbosite.com.br/blog/wp-content/uploads/2017/07/lang.rank_.617.wm_-1024x918.png" alt="Ranking linguagem de programação" width="680" height="610" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2017/07/lang.rank_.617.wm_-1024x918.png 1024w, https://www.turbosite.com.br/blog/wp-content/uploads/2017/07/lang.rank_.617.wm_-300x269.png 300w, https://www.turbosite.com.br/blog/wp-content/uploads/2017/07/lang.rank_.617.wm_-768x688.png 768w, https://www.turbosite.com.br/blog/wp-content/uploads/2017/07/lang.rank_.617.wm_.png 1250w" sizes="(max-width: 680px) 100vw, 680px" /></p>
<p>Fonte: <a href="http://redmonk.com/sogrady/2017/06/08/language-rankings-6-17/" target="_blank" rel="noopener">http://redmonk.com/sogrady/2017/06/08/language-rankings-6-17/</a></p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Utilizando Namespacing em JavaScript</title>
		<link>https://www.turbosite.com.br/blog/utilizando-namespacing-em-javascript/</link>
		
		<dc:creator><![CDATA[turboajuda]]></dc:creator>
		<pubDate>Wed, 17 Sep 2014 15:10:48 +0000</pubDate>
				<category><![CDATA[Desenvolvimento]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Tutoriais]]></category>
		<category><![CDATA[Destaque]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[namespace]]></category>
		<category><![CDATA[objeto]]></category>
		<category><![CDATA[programacao javascript]]></category>
		<category><![CDATA[programacao js]]></category>
		<guid isPermaLink="false">http://blog.turbosite.com.br/?p=3559</guid>

					<description><![CDATA[Técnica de como Utilizando Namespacing em JavaScript. Como não existe um método formal, vamos aplicar técnicas interessantes para a construção deste recurso.]]></description>
										<content:encoded><![CDATA[<p>Esta é uma postagem encontrada no site <a title="Desenvolvimento para Web" href="http://desenvolvimentoparaweb.com/miscelanea/namespacing-em-javascript/">Desenvolvimento para Web</a>, achamos interessante e decidimos publicá-la. Para quem desenvolve em Javascript, será útil e sem dúvida algum novo conhecimento será adquirido, então leia o texto completo. Este artigo é baseado no <span lang="en">post <a href="http://javascriptweblog.wordpress.com/2010/12/07/namespacing-in-javascript/">Namespacing in JavaScript</a></span> do <span lang="en"><a href="http://javascriptweblog.wordpress.com/">JavaScript, JavaScript</a>.</span></p>
<p>Namespacing em JavaScript pode ser considerado algo um pouco nebuloso no começo, mas a organização (e, de certa forma, proteção) de seu código é algo essencial, que deve ser encarado com muita seriedade e feito com bastante atenção. JavaScript não possui uma construção formal de namespace, então é preciso saber como “simular” namespaces para que se possa desfrutar das vantagens que eles oferecem.</p>
<p>Variáveis ​​globais devem ser reservadas a objetos que têm relevância para todo o sistema e estas devem ser nomeadas para evitar ambiguidades e minimizar o risco de colisões de nomes. Na prática, isso significa que você deve evitar a criação de objetos globais a menos que eles sejam absolutamente necessários. Mas você já sabia disso, certo?!</p>
<blockquote><p>Você deve evitar a criação de objetos globais a menos que eles sejam absolutamente necessários.</p></blockquote>
<p>Então, o que você faz sobre isso? A “sabedoria popular” mostra que a melhor estratégia de redução de risco é criar um pequeno número de objetos globais que servirão como namespaces de facto para módulos subjacentes e subsistemas. A seguir, várias abordagens para namespacing em JavaScript interessantes, que você pode usar em seus projetos imediatamente.</p>
<h2>Namespacing Estático (Static Namespacing)</h2>
<p>O termo “namespacing estático” está sendo usado como um termo genérico para soluções em que a denominação “namespace” consta numa codificação, propriamente dita. É verdade, você pode reatribuir de um namespace para outro, mas o novo namespace vai referenciar os mesmos objetos como se fossem os antigos.</p>
<h3>Atribuição Direta (Direct Assignment)</h3>
<p>Essa é a abordagem mais básica. Exige mais código, mas é segura e inequívoca.</p>
<pre class="lang:js decode:true ">var myApp = {}
 
myApp.id = 0;
 
myApp.next = function() {
    return myApp.id++;  
}
 
myApp.reset = function() {
    myApp.id = 0;   
}
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
); // 0, 1, undefined, 0</pre>
<p>Você poderia tornar a manutenção futura um pouco mais fácil usando <strong>this</strong> para fazer referência a propriedades irmãs, mas isso é um pouco arriscado, já que não há nada que impeça suas funções no namespace de serem reatribuídas:</p>
<pre class="lang:js decode:true">var myApp = {}
 
myApp.id = 0;
 
myApp.next = function() {
    return this.id++;   
}
 
myApp.reset = function() {
    this.id = 0;    
}
 
myApp.next(); // 0
myApp.next(); // 1
var getNextId = myApp.next;
getNextId(); // NaN whoops!</pre>
<h3>Notação de Objeto Literal (Object Literal Notation)</h3>
<p>Nesta abordagem, é preciso fazer referência ao nome de namespace apenas uma vez, então, caso seja preciso alterar o nome mais tarde, isso é um pouco mais fácil de se conseguir (supondo que você não tenha referenciado o namespace muitas vezes). Há, ainda, o perigo de que o valor de <strong>this</strong> possa ser uma surpresa – mas é um pouco mais seguro assumir que os objetos definidos dentro de uma construção de objeto literal não serão reatribuídos.</p>
<pre class="lang:js decode:true">var myApp = {
    id: 0,
 
    next: function() {
        return this.id++;   
    },
 
    reset: function() {
        this.id = 0;    
    }
}
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<h3>Padrão de Módulo (Module Pattern)</h3>
<p>Hoje em dia é bastante comum encontrar por aí o Padrão de Módulo (Module Pattern) em código JavaScript. A lógica é protegida do escopo global por uma função wrapper (geralmente numa IIFE) que retorna um objeto que representa a interface pública do módulo. Por imediatamente invocar a função e atribuir o resultado a uma variável de namespace, a API do módulo é “trancada” nesse namespace.</p>
<p>Além disso, todas as variáveis ​​não incluídas no valor de retorno permanecerão privadas, visíveis apenas para as funções públicas que lhes referenciam.</p>
<pre class="lang:js decode:true">var myApp = (function() {
 
    var id = 0;
 
    return {
        next: function() {
            return id++;    
        },
 
        reset: function() {
            id = 0;     
        }
    };  
})();   
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<h2>Namespacing Dinâmico (Dynamic Namespacing)</h2>
<p>Esta seção também poderia muito bem ser chamada de “injeção de namespace” (ou namespace injection). O namespace é representado por um proxy que é referenciado diretamente dentro do wrapper da função – o que significa que não é mais preciso agrupar valores para o return no namespace. Isso faz com que a definição de namespace seja mais flexível e torna muito fácil ter várias instâncias independentes de um módulo existente em namespaces separados (ou até mesmo no contexto global).</p>
<div>Namespacing dinâmico suporta todas as características do Padrão de Módulo com a vantagem adicional de ser intuitivo e de fácil leitura.</div>
<h3>Passando argumento de namespace</h3>
<p>Aqui o namespace é simplesmente passado como um argumento de uma <a title="JavaScript IIFE como contêiner de códigos" href="http://desenvolvimentoparaweb.com/javascript/javascript-iife-conteiner-de-codigos/">Expressão de Função Imediatamente Invocada</a>. A variável id é privada porque não é atribuída ao contexto.</p>
<pre class="lang:php decode:true">var myApp = {};
(function(context) { 
    var id = 0;
 
    context.next = function() {
        return id++;    
    };
 
    context.reset = function() {
        id = 0;     
    }
})(myApp);  
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
) // 0, 1, undefined, 0</pre>
<p>É possível até mesmo definir o contexto para o objeto global – com a mudança de uma palavra! Este é um grande trunfo para os fornecedores da bibliotecas (vendors), que podem envolver suas features numa IIFE e permitir que o programador decida se elas devem ser globais ou não (<a href="http://ejohn.org/">John Resig</a> foi um dos primeiros a adotar esse conceito quando escreveu a jQuery).</p>
<pre class="lang:php decode:true">var myApp = {};
(function(context) { 
    var id = 0;
 
    context.next = function() {
        return id++;    
    };
 
    context.reset = function() {
        id = 0;     
    }
})(this);   
 
window.console &amp;&amp; console.log(
    next(),
    next(),
    reset(),
    next()
) // 0, 1, undefined, 0</pre>
<h3>this como proxy de namespace</h3>
<p>O artigo “<a href="http://blogs.sitepoint.com/2010/11/30/my-favorite-javascript-design-pattern/">My Favorite JavaScript Design Pattern</a>” aparentemente foi mal compreendido por muitos que pensaram que ele poderia simplesmente recorrer ao Module Pattern. O artigo mostra várias técnicas (o que provavelmente contribuiu para essa confusão), mas, em essência, é muito interessante e dá ensejo ao desenvolvimento de muita coisa boa relacionada a namespacing.</p>
<p>A beleza do padrão é que ele simplesmente usa a linguagem como foi projetada – nada mais, nada menos, sem truques, sem firulas. Além disso, já que o namespace é injetado através da palavra-chave <strong>this</strong> (que é estática dentro de um determinado contexto de execução), ele não pode ser acidentalmente modificado.</p>
<pre class="lang:js decode:true">var myApp = {};
(function() {
    var id = 0;
 
    this.next = function() {
        return id++;    
    };
 
    this.reset = function() {
        id = 0;     
    }
}).apply(myApp);    
 
window.console &amp;&amp; console.log(
    myApp.next(),
    myApp.next(),
    myApp.reset(),
    myApp.next()
); // 0, 1, undefined, 0</pre>
<p>Ainda melhor, a API de apply (e call) provê separação natural entre contexto e argumentos; então, fica simples passar argumentos adicionais para o criador do módulo.</p>
<p>O exemplo a seguir demonstra isso e também mostra como executar o módulo de forma independente através de múltiplos namespaces:</p>
<pre class="lang:php decode:true">var subsys1 = {}, subsys2 = {};
 
var nextIdMod = function(startId) {
    var id = startId || 0;
 
    this.next = function() {
        return id++;    
    };
 
    this.reset = function() {
        id = 0;     
    }
};
 
nextIdMod.call(subsys1);    
nextIdMod.call(subsys2,1000);   
 
window.console &amp;&amp; console.log(
    subsys1.next(),
    subsys1.next(),
    subsys2.next(),
    subsys1.reset(),
    subsys2.next(),
    subsys1.next()
) // 0, 1, 1000, undefined, 1001, 0</pre>
<p>E, se for preciso um gerador global de id:</p>
<pre class="lang:js decode:true">nextIdMod();    
 
window.console &amp;&amp; console.log(
    next(),
    next(),
    reset(),
    next()
) // 0, 1, undefined, 0</pre>
<p>Mas essa ferramenta de gerar de ids mostrada como exemplo não faz jus a todo o potencial desse padrão. Envolvendo uma biblioteca inteira e usando a palavra-chave <strong>this</strong> como um suporte para o namespace, é fácil executar a biblioteca em qualquer contexto que se queira (incluindo o contexto global).</p>
<pre class="lang:php decode:true">// Código de biblioteca
var protoQueryMooJo = function() {  
    // [...]
}
 
// Seu código
var thirdParty = {};
protoQueryMooJo.apply(thirdParty);</pre>
<h2>Considerações finais sobre Namespacing em JavaScript</h2>
<p><img decoding="async" class="alignnone size-full wp-image-3562" src="https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite.jpg" alt="namespacing-javascript-metafora-turbosite" width="379" height="317" srcset="https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite.jpg 379w, https://www.turbosite.com.br/blog/wp-content/uploads/2014/09/namespacing-javascript-metafora-turbosite-300x251.jpg 300w" sizes="(max-width: 379px) 100vw, 379px" /></p>
<p>É uma prática comum tentar evitar namespaces aninhados. Eles são mais difíceis de seguir (para ambos, humanos e computadores) e vão encher seu código de confusão desnecessária. <a href="http://michaux.ca/articles/javascript-namespacing">Como Peter Michaux aponta</a>, namespaces aninhados podem ser um legado de desenvolvedores Java nostálgicos tentando recriar aquelas cadeias longas de pacotes que eles conheciam e amavam…</p>
<p>É possível “propagar” um único namespace através de diversos arquivos.js (embora apenas por injeção de namespace ou atribuição direta de cada variável), contudo, é preciso ter cuidado com as dependências. Além disso, “ligar” um namespace a um arquivo pode ajudar o leitor a navegar mais facilmente pelo código.</p>
<p>Uma vez que JavaScript não possui uma construção formal de namespace, isso abre margem para vários tipos de soluções criativas para resolver a questão. Este artigo mostrou apenas algumas delas e, evidentemente, as melhores podem não terem sido abordadas, dada a vasta contribuição da comunidade a cada dia.</p>
<p>De qualquer forma, estas são algumas das mais conhecidas técnicas para namespacing em JavaScript e, garantimos, estudando um pouco além e sabendo aplicar corretamente em seus projetos, certamente você terá um incremento de qualidade de código considerável! </p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
