Linguagem fortemente tipada (Strong typing)

fevereiro 28, 2008 às 2:19 am | Publicado em Desenvolvimento, Java, JavaScript, ruby | 28 Comentários

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. 🙂

28 Comentários »

RSS feed for comments on this post. TrackBack URI

  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.

    • A linguagem também passou a se chamar Delphi a partir da versão 8 da IDE.

  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.

  12. Acho que este post pode ajudar a entender melhor o conceito de linguagem fortemente/fracamente tipada:

    http://www.bitabit.eng.br/2009/11/09/a-natureza-de-uma-linguagem-de-programacao/

    http://blog.i.ndigo.com.br/2009/11/the-nature-of-a-programming-language/

  13. @Rafael,

    Ruby é fortemente tipada. A tipagem em ruby é em tempo de execução ou seja dinâmica. Interessante seu Post.. parabéns!!!

  14. C não é fortemente tipado. C possui Unions.

    • C é fortemente tipado. Unions são declarações expressas de tipos. Não existe conversão e sim compatilhamento de espaço de memória.

      Os unions não ocorrem de maneira implícita.

  15. C não é fortemente tipada. Pode-se operar com tipos diferentes de dados, contanto que sejam compatíveis.
    Por exemplo, o código:

    #include

    int main()
    {
    int a, b=10;
    float x, y=3.6;

    a=b*y;
    x=b*y;

    printf(“Int a: %d \nFloat x: %f”, a,x);

    return 0;
    }

    funciona perfeitamente, apesar de um ser “int” e o outro “float”. Porém, há perda de dados e o programa imprime:
    35
    36.000000

    e linguagens fortemente tipadas não aceitariam.
    E C também permite somar “int” a “char”.

  16. C é fortemente tipada:

    http://en.wikipedia.org/wiki/Strong_typing

    O fato de C suportar as operações mencionadas não desqualifica essa linguagem como fortemente tipada.

    • Fonte errada. Wikipedia meu caro.
      C/C++ são linguagens fracamente tipadas.

      Ver livro Conceitos de Linguagens de Programação do Sebesta.

      • Veja o livro do Stroustrup, que afirma que C e C++ são fortemente tipados. Você está batendo numa exceção, para tentar justificar uma regra.

        Há diversas operações que não são possíveis. Variáveis não trocam de tipo. Structs reforçam a criação de tipos ainda mais fortes. No caso de C++, mesmo o mecanismo de templates reforça duck typing e tipagem em tempo de compilação.

        Tentar justificar pela exceção, é como tentar dizer que Ruby é fracamente tipada porque essa função poderia aceitar ints e floats:
        def sum(a, b) {
        return a + b;
        }

  17. Sebesta, 5º edição, página 190. C e C++ Não sao fortemente tipadas.

  18. C e C++ sao tipagem forte, jamais ha mudanca de tipo.
    Pior q o povo falar q soma de char é errado sem lembrar q char é int em C.
    ja vi gnt falando q é fraca pq float recebe int, toda linguagem faz isso.
    Queria q alguem q ainda acha q é fraca fale o pq, quero regras e nao excecoes.

  19. Meu caro “blogueiro”, você está totalmente equivocado.

  20. […] etc. Elas podem ser classificadas de diversas formas: de acordo com o tipo de sintaxe utilizada (fortemente tipadas ou não), sistemas operacionais suportados, tipo de lógica utilizada (procedurais, orientadas a […]

  21. […] linguagens de programação fortemente tipadas, como é o caso de C#, quando você define uma variável, você deve informar o tipo de dado das […]

  22. […] etc. Elas podem ser classificadas de diversas formas: de acordo com o tipo de sintaxe utilizada (fortemente tipadas ou não), sistemas operacionais suportados, tipo de lógica utilizada (procedurais, orientadas a […]

  23. […] etc. Elas podem ser classificadas de diversas formas: de acordo com o tipo de sintaxe utilizada (fortemente tipadas ou não), sistemas operacionais suportados, tipo de lógica utilizada (procedurais, orientadas a […]

  24. […] etc. Elas podem ser classificadas de diversas formas: de acordo com o tipo de sintaxe utilizada (fortemente tipadas ou não), sistemas operacionais suportados, tipo de lógica utilizada (procedurais, orientadas a […]


Deixar mensagem para Marcelo Madeira Cancelar resposta

Blog no WordPress.com.
Entries e comentários feeds.