<?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>Saga do programador &#187; tipagem fraca</title>
	<atom:link href="http://www.sagadoprogramador.com.br/tag/tipagem-fraca/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.sagadoprogramador.com.br</link>
	<description></description>
	<lastBuildDate>Thu, 22 Sep 2011 04:20:41 +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>Não é por que é dinâmico que a tipagem é fraca.</title>
		<link>http://www.sagadoprogramador.com.br/2009/11/nao-e-por-que-e-dinamico-que-a-tipagem-e-fraca/</link>
		<comments>http://www.sagadoprogramador.com.br/2009/11/nao-e-por-que-e-dinamico-que-a-tipagem-e-fraca/#comments</comments>
		<pubDate>Tue, 24 Nov 2009 18:10:34 +0000</pubDate>
		<dc:creator>Iuri Menescal</dc:creator>
				<category><![CDATA[ruby]]></category>
		<category><![CDATA[Ruby para iniciantes]]></category>
		<category><![CDATA[tipagem fraca]]></category>
		<category><![CDATA[type casting implícito]]></category>

		<guid isPermaLink="false">http://www.sagadoprogramador.com.br/?p=368</guid>
		<description><![CDATA[Há algum tempo atrás recebi o seguinte comentário em um dos primeiros posts quer escrevi aqui no blog: Bom artigo amigo, porém penso que esteja havendo alguma confusão sobre o que é “tipagem forte” e o que é “type casting implícito”, em minha opinião a linguagem é fracamente tipada, haja visto que se pode atribuir [...]]]></description>
			<content:encoded><![CDATA[<p>Há algum tempo atrás recebi o seguinte comentário em um dos <a title="Aprenda Rails, estude Ruby!" href="http://www.sagadoprogramador.com.br/2009/04/aprenda-rails-estude-ruby/" target="_blank">primeiros posts</a> quer escrevi aqui no blog:</p>
<p><em>Bom artigo amigo, porém penso que esteja havendo alguma confusão sobre o que é “tipagem forte” e o que é “type casting implícito”, em minha opinião a linguagem é fracamente tipada, haja visto que se pode atribuir uma referência de qualquer TIPO de objeto a uma variável, porém a linguagem não realiza o TypeCasting de tipos de forma implícita e arbritária como caso de algumas “Linguagens Chatas” (tomei a liberdade de utilizar seu termo…).</em></p>
<p>Como o post era antigo acabei demorando para ver o comentário e consequentemente enviar uma respota, porém o comentário aborda um assunto tão interessante, que resolvi escrever um post para esclarecer o assunto, por tanto gostaria antes de mais nada  agradecer o seu comémtario, e aqui vai a minha resposta <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  <span id="more-368"></span></p>
<p>O Fato de não precisar definir um tipo para uma variavél, não é necessáriamene uma caracterísica de uma tipagem fraca, pois quando estamos atribuindo algo a uma variável, estamos apenas passando uma refêrencia, por exemplo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">nome = <span style="color:#996600;">&quot;Iuri&quot;</span>
<span style="color:#CC0066; font-weight:bold;">puts</span> nome
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#996600;">&quot;Iuri&quot;</span></pre></div></div>

<p>O que eu fiz no exemplo acima, foi atribuir a instancia de um objeto do tipo string a variavel nome, não preciso dizer que a variavel nome é do tipo string, isso é uma característica de uma linguagem dinâmica. porém as vezes as pessoa confundem isso com tipagem fraca por causa do exemplo abaixo:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;"> nome = <span style="color:#996600;">&quot;Iuri&quot;</span>
 <span style="color:#CC0066; font-weight:bold;">puts</span> nome
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#996600;">&quot;Iuri&quot;</span>
 nome = <span style="color:#006666;">1</span>
 <span style="color:#CC0066; font-weight:bold;">puts</span> nome
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#006666;">1</span></pre></div></div>

<p>Nesse exemplo o que eu fiz foi atribuir a referência de um objeto string &#8220;Iuri&#8221; para a variavel nome, imprimir seu valor na tela, em seguida atribui a referência de um objeto FixNum 1 para o varivel nome e imprimir o seu valor. O fato de eu conseguir passar um valor string para uma variavel e em seguida um valor FixNum, não quer dizer que a minha linguagem tem tipagem fraca, ruby tem tipagem implicita o que é bem diferente de tipagem fraca, o minha variavel apenas trocou de referência no processo acima e por ela ser dinâmica automaticamente trocou de tipo.<br />
Agora vamos ver outro exemplo para provar de vez que Ruby possui tipagem forte:</p>

<div class="wp_syntax"><div class="code"><pre class="ruby" style="font-family:monospace;">nome = <span style="color:#996600;">&quot;Iuri&quot;</span>
soma = nome <span style="color:#006600; font-weight:bold;">+</span> <span style="color:#006666;">1</span>
<span style="color:#006600; font-weight:bold;">&gt;&gt;</span> <span style="color:#CC00FF; font-weight:bold;">TypeError</span>: can<span style="color:#996600;">'t convert Fixnum into String</span></pre></div></div>

<p>Viu?? deu erro!<br />
Isso por que Ruby tem tipagem forte, eu não posso somar um objeto do tipo string com um objeto do tipo FixNum. Isso é tipagem forte <img src='http://www.sagadoprogramador.com.br/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /><br />
Se excutarmos o mesmo algoritimo em javascript ,que esse sim possui tipagem fraca, o resultado seria bem diferente:</p>

<div class="wp_syntax"><div class="code"><pre class="javascript" style="font-family:monospace;">  nome <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;Iuri&quot;</span>
  soma <span style="color: #339933;">=</span> nome <span style="color: #339933;">+</span> <span style="color: #CC0000;">1</span>
  document.<span style="color: #000066; font-weight: bold;">write</span><span style="color: #009900;">&#40;</span>soma<span style="color: #009900;">&#41;</span></pre></div></div>

<p>O resultado desse exemplo será Iuri1<br />
<br />
Referencias:</p>
<p>http://en.wikipedia.org/wiki/Type_system#Duck_typing</p>
<p>http://en.wikipedia.org/wiki/Type_system#Dynamic_typing</p>
<p>http://en.wikipedia.org/wiki/Type_system#Strong_and_weak_typing</p>
]]></content:encoded>
			<wfw:commentRss>http://www.sagadoprogramador.com.br/2009/11/nao-e-por-que-e-dinamico-que-a-tipagem-e-fraca/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>

