Estudo: Tipagem Dinâmica!

Pelo menos 2 vezes por semana vou postar aqui coisas sobre a área que estudo, Análise e Desenvolvimento de Sistemas. Resolvi fazer isso não só pelo fato de saber que vai ser um assunto diferencial para o blog, mas também porque vai me ajudar bastante, posso postar aqui e, ao mesmo tempo estudar, porque afinal... É férias e devo pelo menos  50% do tempo à isso. Então, fica assim, tá?! A categoria Estudo vai ser somente para isto. Espero que, de alguma forma ajude a vocês que também estudam nesta área (Ou que têem somente curiosidade) assim como sei que vai me ajudar bastante. Então vamos lá, o post de hoje é sobre Tipagem Dinâmica! (No final do post vou deixar o link de onde foi tirado o conteúdo).


Tipagem dinâmica: é uma característica de determinadas linguagens de programação, que não exigem declarações de tipos de dados, pois são capazes de escolher que tipo utilizar dinamicamente para cada variável, podendo alterá-lo durante a compilação ou a execução do programa.
Algumas das linguagens mais conhecidas a utilizarem tipagem dinâmica são: Python, Ruby, PHP, FoxPro e Lips.
Contrasta com a tipagem estática, que exige a declaração de quais dados poderão ser associados a cada variável antes de sua utilização.

Entenda a tipagem em Ruby:
Cada linguagem de programação tem sua forma de lidar com tipos, por exemplo: C é uma linguagem fracamente tipada. O que pode ser visto nesse exemplo:
char a= 'a', b='b';
  float c = a + b;
Ele que mostra que podermos somar dois chars e atribuirmos a um float (ao longo do texto o conceito de “fracamente tipada” ficará mais claro).
No entanto, Ruby é dinamicamente, implicitamente e fortemente tipada. Vejamos o que cada um destes adjetivos significa:
Dinamicamente tipada:
Quer dizer que a cada interação, o tipo é verificado. Isso fica claro no seguinte exemplo:
x = 100
(1..4).each{ x = x * 100 ;  puts "#{ x.class} #{x}"  }
Que gera o resultado:
Fixnum 10000
Fixnum 1000000
Fixnum 100000000
Bignum 10000000000
Como podemos ver a variável x começa como Fixnum e conforme aumenta, passa para Bignum – sem a necessidade de uma conversão.
Essa característica gera vários pontos positivos na linguagem, tais como:
§  Diminui a verbosidade, pois não há a necessidade de fazer conversões;
§  Tende a facilitar a vida do programador pois não há a preocupação com conversões.
Mas neste contexto nem tudo são flores. Vejamos os pontos negativos:
§  A linguagem tende a ser mais lenta em tempo de execução, devido ao fato de que, a cada interação, o tipo deve ser verificado;
§  Pode confundir o programador, pois ele pode não saber exatamente com quais tipos está tratando.
Implicitamente tipada:
Continuando no mesmo exemplo, quando fizemos x = 100 não precisamos declarar o tipo de x. Ou seja, não foi necessário fazer algo como: Fixnum x = 100. Isso acontece pelo fato do Ruby detectar o tipo de cada variável em tempo de execução. Uma boa analogia para este fenômeno é pensar nas variáveis como se fossem caixas fechadas e seus dados como fitas coloridas onde o interpretador abre a caixa e verifica as cores das fitas.
Novamente, os pontos positivos e negativos são muito semelhantes aos relacionados a tipagem dinâmica. Veja:
Positivos:
§  Diminui a verbosidade, pois não há a necessidade de fazer declarações.
Negativos:
§  A linguagem tende a ser mais lenta, pois o tipo é verificado em tempo de execução de acordo com a analogia das caixas e fitas;
§  Pode confundir o programador, pois ele pode não saber exatamente com quais tipos está tratando, já que não existe a declaração dos mesmos.
Fortemente tipada:
Este é um conceito confuso, mas uma boa forma de explica-lo é dizer que  todas as variáveis devem ter um tipo, ou seja, fazer parte de uma classe, no caso do Ruby, e que cada tipo segue a risca seu contrato. Por exemplo:
a = 100
b = "Ruby on Rails"
a + b

TypeError: String can't be coerced into Fixnum
    from (irb):54:in `+'
    from (irb):54
Como você notou, em Ruby não podemos somar um String com Fixnum, pois essa operação não está no contrato da classe String e Fixnum.
De fato, o assunto não acaba por aqui. Existem alguns materiais na web e em livros sobre isso. Em vista disso, e no intuito de incentivar a pesquisa, deixo algumas referencias:
§  codecommit 
§  rubyfleebie 

Obs.: Os tipos em Ruby na verdade são classes, ou seja, não existem tipos primitivos e sim objetos que pertencem a classes. Por exemplo:
a = 1 # a pertence a classe Fixnum


* Todo o conteúdo de explicação sobre o assunto, foi retirado do site: Imastes.com.br 




Share this:

JOIN CONVERSATION

    Blogger Comment

0 Comentários:

Postar um comentário