<?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>Bit a Bit &#187; ActionScript 3</title>
	<atom:link href="http://www.bitabit.eng.br/tags/actionscript-3/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bitabit.eng.br</link>
	<description>O Blog da Engenharia de Computação da POLI-USP</description>
	<lastBuildDate>Wed, 11 Jan 2012 16:12:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>A Natureza de uma Linguagem de Programação</title>
		<link>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/</link>
		<comments>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/#comments</comments>
		<pubDate>Mon, 09 Nov 2009 10:00:42 +0000</pubDate>
		<dc:creator>Rafael Barbolo Lopes, Coop10</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[ActionScript 3]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Compilador]]></category>
		<category><![CDATA[Earlang]]></category>
		<category><![CDATA[Interpretador]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[linguagem de programação]]></category>
		<category><![CDATA[linguagem dinâmica]]></category>
		<category><![CDATA[linguagem estática]]></category>
		<category><![CDATA[linguagem fortemente tipada]]></category>
		<category><![CDATA[linguagem fracamente tipada]]></category>
		<category><![CDATA[microsoft]]></category>
		<category><![CDATA[Pascal]]></category>
		<category><![CDATA[Perl]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[programação]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[Ruby]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=718</guid>
		<description><![CDATA[Uma linguagem de programação é uma linguagem que possui sintaxe (formato) e semântica (significado), e é usada para expressar uma sequência de ações computacionais que formam um programa. Existem milhares de linguagens de programação e novas linguagens surgem frequentemente, trazendo novos paradigmas e estabelecendo novos padrões para programadores. Por isso, é importante conhecer as diferenças [...]]]></description>
			<content:encoded><![CDATA[<p>Uma linguagem de programação é uma linguagem que possui sintaxe (formato) e semântica (significado), e é usada para expressar uma sequência de ações computacionais que formam um programa.</p>
<p>Existem milhares de linguagens de programação e novas linguagens surgem frequentemente, trazendo novos paradigmas e estabelecendo novos padrões para programadores. Por isso, é importante conhecer as diferenças principais entre as linguagens e quando o uso de cada uma delas é mais adequado.</p>
<p style="text-align: center;"><img class="aligncenter size-full wp-image-732" title="Linguagens de Programação" src="http://www.bitabit.eng.br/wp-content/uploads/2009/11/Computer-Languages.png" alt="Linguagens de Programação" width="560" height="560" /></p>
<p>Para explorar as diferenças entre elas, serão discutidos os seguintes assuntos: o que são tipos de sistema estáticos ou dinâmicos, o que são linguagens fortemente ou fracamente tipadas e quais são os modos de execução de um programa (código executável compilado ou interpretação de código fonte).</p>
<h2><strong>Tipo estático ou dinâmico</strong></h2>
<p>As linguagens de programação podem ser classificadas de acordo com o tipo de sistema que elas usam. O tipo de sistema define como são os métodos e as variáveis da linguagem.</p>
<p>Em uma linguagem de <strong>tipo estático</strong>, o compilador deve conhecer o tipo de uma variável ou método antes da execução do programa (por isso, o tipo de uma variável normalmente é explicitamente declarado). Em uma linguagem de <strong>tipo dinâmico</strong>, o tipo de uma variável ou método é desconhecido até a execução do programa.</p>
<p>Exemplo prático de declaração de uma variável inteira com valor 10:</p>
<p>Java <em>(Tipo estático)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">int</span> a <span style="color: #339933;">=</span> <span style="color: #cc66cc;">10</span><span style="color: #339933;">;</span></pre></div></div>

<p>Ruby <em>(Tipo dinâmico)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">a = <span style="color:#006666;">10</span></pre></div></div>

<p>Exemplos de linguagens de tipo estático: <strong>Java</strong>, <strong>Pascal</strong>, <strong>C</strong>, <strong>C#</strong> e <strong>C++</strong>.<br />
Exemplos de linguagens de tipo dinâmico: <strong>Python</strong>, <strong>Javascript</strong>, <strong>Perl</strong> e <strong>Ruby</strong>.</p>
<h2>Fortemente ou fracamente tipada</h2>
<blockquote><p>Um objeto é determinado pelo que ele pode fazer e não pelo seu tipo.</p>
<p><em>(tipo fraco)</em></p></blockquote>
<p>Um conceito que muita gente confunde com tipo dinâmico ou estático é se uma linguagem é fortemente ou fracamente tipada.</p>
<p>A definição de fortemente ou fracamente tipada tem relação com quão profundamente um sistema verifica as operações que podem ser feitas sobre uma estrutura de dados.</p>
<p>Em linguagens fortemente tipadas, as operações são aplicadas para estruturas de dados bem definidas e cada operação define os tipos de dados que deve receber. Em linguagens fracamente tipadas, as operações são aplicadas para qualquer estrutura de dados; porém, essas operações podem falhar em tempo de execução caso a estrutura não suporte a operação.</p>
<p>Em uma linguagem fortemente tipada o sistema tem garantias sobre o comportamento do programa. Em uma linguagem fracamente tipada, essa garantia não existe porque uma estrutura de dados pode receber novas funcionalidades em tempo de execução.</p>
<p>Exemplo de uma função que realiza a soma de dois números, um inteiro e um ponto flutuante, e devolve um resultado em ponto flutuante:</p>
<p>Java <em>(Fortemente tipada)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="java" style="font-family:monospace;"><span style="color: #000066; font-weight: bold;">float</span> soma<span style="color: #009900;">&#40;</span><span style="color: #000066; font-weight: bold;">float</span> a, <span style="color: #000066; font-weight: bold;">int</span> b<span style="color: #009900;">&#41;</span> <span style="color: #009900;">&#123;</span>
    <span style="color: #000000; font-weight: bold;">return</span> a <span style="color: #339933;">+</span> b<span style="color: #339933;">;</span>
<span style="color: #009900;">&#125;</span></pre></div></div>

<p>Ruby <em>(Fracamente tipada)</em>:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"><span style="color:#9966CC; font-weight:bold;">def</span> soma <span style="color:#006600; font-weight:bold;">&#40;</span>a, b<span style="color:#006600; font-weight:bold;">&#41;</span>
  <span style="color:#0000FF; font-weight:bold;">return</span> a <span style="color:#006600; font-weight:bold;">+</span> b
<span style="color:#9966CC; font-weight:bold;">end</span></pre></div></div>

<p>Em Java, os tipos de dados que a operação soma suporta estão bem definidos (<strong>a</strong> é float e <strong>b</strong> é int) e o tipo de dado que a operação devolve também (<strong>resultado</strong> é float).</p>
<p>Em Ruby, a função soma pode receber quaisquer tipos de dados para <strong>a</strong> e <strong>b</strong>, e a operação será aplicada sobre esses tipos, devolvendo um resultado de tipo desconhecido:</p>
<ul>
<li>se <strong>a</strong> e <strong>b</strong> forem String, o resultado será uma String concatenada de <strong>a</strong> e <strong>b</strong>;</li>
<li>se <strong>a</strong> e <strong>b</strong> forem inteiros, o resultado será um inteiro que representa a soma <strong>a</strong>+<strong>b</strong>;</li>
<li>se <strong>a</strong> for um float e <strong>b</strong> um inteiro, o resultado será um float que representa a soma <strong>a</strong>+<strong>b</strong>.</li>
</ul>
<p>Vale a pena observar que em linguagens fracamente tipadas, a possibilidade de erros em tempo de execução é muito maior. Por isso, é muito recomendável o uso de testes para verificar erros antes de colocar um sistema em produção.</p>
<p>Exemplos de linguagens fortemente tipadas: <strong>Java</strong>, <strong>Pascal</strong>, <strong>C</strong> e <strong>C++</strong>.<br />
Exemplos de linguagens fracamente tipadas: <strong>Perl</strong> e <strong>Ruby</strong>.</p>
<h2>Linguagens compiladas ou de script</h2>
<p>Outro modo de classificar uma linguagem é se ela precisa de um passo de compilação antes de executar. Se ela precisa deste passo, ela é chamada de linguagem compilada. Senão, é chamada de linguagem de script.</p>
<p>Um <strong>compilador</strong> de uma linguagem compilada gera um código executável a partir do código fonte escrito pelo programador. O código executável não possui o conteúdo do código fonte, portanto programas de linguagens compiladas são melhores de distribuir quando o programador não quer que seu código seja público.</p>
<p>Uma linguagem de script normalmente não necessita de um passo específico de compilação para executar um programa. O código fonte escrito pelo programador pode ser executado diretamente por um <strong>intepretador</strong>. Esse interpretador lê trechos do código fonte em tempo de execução, converte em um formato que o computador consegue ler (compilação em tempo de execução) e realiza sua execução.</p>
<p>Linguagens de script costumam ter performance inferior a linguagens compiladas pois exigem mais passos para rodar um programa em tempo de execução. Porém, elas são muito mais produtivas, pois eliminam a necessidade de compilar o código fonte toda vez que uma alteração é feita.</p>
<p>Quem já mexeu no código fonte de uma aplicação web sabe como é muito melhor trabalhar com linguagem interpretada: você faz uma alteração no código, salva e pode verificá-la de imediato.</p>
<p>Quando usa uma linguagem compilada, como Java, você tem que compilar o código fonte (que pode levar um tempo considerável, dependendo do sistema), fazer o upload do código para o servidor web e só então verificar a alteração.</p>
<p>Exemplos de linguagens compiladas: <strong>Java</strong>, <strong>C</strong>, <strong>C++</strong> e <strong>C#</strong>.<br />
Exemplos de linguagens de script: <strong>PHP</strong>, <strong>Perl</strong>, <strong>Python</strong> e <strong>Ruby</strong>.</p>
<h2>Considerações finais</h2>
<p>Este artigo apresenta conceitos básicos sobre linguagens de programação que podem ser decisivos para a escolha de uma.</p>
<p>Para ambientes corporativos, em que uma das exigências principais é a estabilidade e performance do sistema, uma linguagem de tipo estático, fortemente tipada e compilada, como Java, é uma boa escolha.</p>
<p>Para uma aplicação que sofre muitas alterações e que exige alta performance (como por exemplo o Twitter), uma combinação de linguagens de script e compiladas é uma boa escolha. Por exemplo, combinar Ruby ou Python com C, ou usar uma linguagem que suporta tanto interpretação quanto compilação, como Scala.</p>
<p>Para cada situação existe um tipo de linguagem de programação mais adequada. O ideal é não ficar preso aos mesmos paradigmas e nunca achar que a linguagem de programação preferida é a melhor para resolver qualquer problema.</p>
<p>Deixo a dica de um amigo meu, <a href="http://twitter.com/emiyake">Edmar Miyake</a>, para ficar atualizado com os novos paradigmas de programação: estudar uma nova linguagem de programação por ano.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=718&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
	</channel>
</rss>

