Linguagem fortemente tipada (Strong typing)

Fevereiro 28, 2008 at 2:19 am | In Desenvolvimento, Java, JavaScript, ruby | 11 Comments

Em uma conversa com uma professora da faculdade, surgiu uma pequena discussão.
O que é uma linguagem fortemente tipada?

Segundo a professora, linguagem fortemente tipada é aquela onde você precisa declarar o tipo da variável, por exemplo:

// código java
private String nome;

Na minha opinião, ela está enganada.
A principal característica de uma linguagem fortemente tipada (Strong typing), é que cada variável do programa representa um objeto de um tipo bem definido.

// codigo java
int x = 12.1; // erro, tipos incompatíveis
int j = (int) 12.1 // funciona, mas você perde as casas decimais :-)

Java é uma linguagem formente tipada. Não é possível atribuir um double para um int.
Para executar tal operação, você terá que forçar a tranformação para o tipo definido pela variável. Chamamos isso de cast. Java também é uma linguagem com tipagem estática, ou seja, você precisa declarar qual o tipo de objeto a variável irá referenciar.

Vejamos um exemplo em Ruby.

x = ‘Marcelo’
y = 12
puts x + y

A principal diferença que podemos notar é a ausência do tipo da variável. Mas isso não torna ruby uma linguagem fracamente tipada. O que acontecerá se você tentar somar (+) um Fixnum (int) com uma String? Um belo erro no console:
can’t convert Fixnum into String (TypeError)

Ou seja, ruby também é fortemente tipada, porém de forma dinâmica. O interpretador “descobre” em tempo de execução o tipo da variável. Devido a essa característica, em ruby não existe cast. Caso os tipos envolvidos na operação sejam incompatíveis, você terá um belo erro pra se preocupar.

Veja um exemplo em javascript:

var x = “Marcelo”;
var y = 12;
alert(x + y);

JavaScript é fracamente tipada (weak typing), ou seja, este código será executado sem problemas. Você não precisa informar o tipo da variável e o intepretador do javascript sabe realizar algumas operações sobre os objetos dependendo do contexto.

Espero que a professora leia este POST. :-)

11 Comentários »

Feed RSS dos comentários deste post URI do TrackBack

  1. Nossa, sua professora realmente precisa ler algo sobre tipagem. É um tópico confuso e até meio obscuro no mainstream mas porque ela não ode simplesmente dizer “não sei” o invés de falar algo assim?

    []s

  2. Olá Marcelo, boa tarde,

    Acredito que as linguagens fortemente tipadas são todos as linguagens que são orientadas a objetos.

    Quando estamos trabalhando com linguagens orientadas a objeto, temos a possibilidade de criar tipos, as classes são tipos.

    Em linguagens procedurais, teremos apenas variáveis primitivas, neste caso entendo que são linguagens fracamente tipadas.

    abraço,

    Domingos Bernardo

  3. Olá, Marcelo.
    Seus conceitos de tipagem estão corretos, é por aí mesmo. Forte/ Fraco se refere à permissividade da linguagem quanto à mudança implícita de tipos (a fortemente não deixa), e o estático/dinamico é com relação à mudança no primeiro momento, ou seja, quando não declaramos, o programa detecta em tempo de execução o PRIMEIRO TIPO assumido.

  4. Sobre o comentário do Domingos Bernardo,
    “(…)Acredito que as linguagens fortemente tipadas são todos as linguagens que são orientadas a objetos. Quando estamos trabalhando com linguagens orientadas a objeto, temos a possibilidade de criar tipos, as classes são tipos. Em linguagens procedurais, teremos apenas variáveis primitivas, neste caso entendo que são linguagens fracamente tipadas.(…)”
    Domingos, a generalização que você citou não está correta. Entre outras linguagens procedurais, o Pascal (não o Delphi, o Pascal) é fortemente tipado. Não possui objetos, apenas tipos primitivos e você não pode atribuir um valor diferente do domínio daquele ao qual a variável foi declarada.

    Salutos.

  5. Acrescentando,

    O Deplhi também é fortemente tipado.

    Abraços a todos e parabéns pelo post Marcelo.

  6. O Delphi não é linguagem, o delphi é uma IDE. A linguagem é Pascal Orientada a Objetos.

  7. Corrigindo, a linguagem UTILIZADA pelo Delphi é o Object Pascal.

  8. o C e uma linguagem fortemente tipada e não e orientado a objetos, contrariando a opinião do nosso colega, com relação ao topico ficou legal.

  9. [...] linguagens são linguagens de alto nível, a grande maioria com tipagem dinâmica e com um Protocolo de Meta-Objeto (Meta-Object Protocol), ou MOP. Estas duas [...]

  10. Ótima conclusão! Parabens!

  11. Tem um erro no post: Ruby é fracamente tipada!

    Vou escrever um artigo sobre isso e posto aqui.


Deixe um comentário

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <pre> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Blog no WordPress.com. | Theme: Pool by Borja Fernandez.
Entries and comments feeds.