Linguagem fortemente tipada (Strong typing)
fevereiro 28, 2008 às 2:19 am | Publicado em Desenvolvimento, Java, JavaScript, ruby | 28 ComentáriosEm 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
Deixar mensagem para Marcelo Madeira Cancelar resposta
Blog no WordPress.com.
Entries e comentários feeds.
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
Comment by Phillip Calçado— março 1, 2008 #
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
Comment by Domingos— setembro 17, 2008 #
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.
Comment by Samy Soares— dezembro 17, 2008 #
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.
Comment by Fernando— fevereiro 3, 2009 #
Acrescentando,
O Deplhi também é fortemente tipado.
Abraços a todos e parabéns pelo post Marcelo.
Comment by Fernando— fevereiro 3, 2009 #
O Delphi não é linguagem, o delphi é uma IDE. A linguagem é Pascal Orientada a Objetos.
Comment by Rafael— março 18, 2009 #
Corrigindo, a linguagem UTILIZADA pelo Delphi é o Object Pascal.
Comment by Rafael— março 18, 2009 #
A linguagem também passou a se chamar Delphi a partir da versão 8 da IDE.
Comment by vinigodoy— maio 26, 2010 #
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.
Comment by Paulo— abril 4, 2009 #
[…] 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 […]
Pingback by Linguagens dinâmicas « Marcelo Madeira— junho 19, 2009 #
Ótima conclusão! Parabens!
Comment by Marcelo Trajano— outubro 24, 2009 #
Tem um erro no post: Ruby é fracamente tipada!
Vou escrever um artigo sobre isso e posto aqui.
Comment by Rafael Barbolo Lopes— novembro 8, 2009 #
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/
Comment by Rafael Barbolo Lopes— novembro 9, 2009 #
@Rafael,
Ruby é fortemente tipada. A tipagem em ruby é em tempo de execução ou seja dinâmica. Interessante seu Post.. parabéns!!!
Comment by Marcelo Madeira— novembro 12, 2009 #
C não é fortemente tipado. C possui Unions.
Comment by Cesar— janeiro 20, 2010 #
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.
Comment by vinigodoy— maio 26, 2010 #
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”.
Comment by Thiago Gomes— dezembro 12, 2010 #
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.
Comment by wikipedia— março 31, 2011 #
Fonte errada. Wikipedia meu caro.
C/C++ são linguagens fracamente tipadas.
Ver livro Conceitos de Linguagens de Programação do Sebesta.
Comment by Vinnicyus Gracinda— maio 10, 2011 #
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;
}
Comment by Vinícius Godoy— fevereiro 13, 2012 #
Sebesta, 5º edição, página 190. C e C++ Não sao fortemente tipadas.
Comment by tiago carneiro— agosto 22, 2012 #
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.
Comment by Felipe— dezembro 29, 2012 #
Meu caro “blogueiro”, você está totalmente equivocado.
Comment by Doesn't matter— fevereiro 1, 2013 #
[…] 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 […]
Pingback by Lógica de Programação – Parte 1 | Academia ERP Blog— setembro 16, 2013 #
[…] 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 […]
Pingback by Visão Geral Sobre Variáveis de Programação— outubro 22, 2014 #
[…] 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 […]
Pingback by Lógica de Programação AdvPL – Parte 1 | AcademiaERP— março 3, 2015 #
[…] 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 […]
Pingback by Lógica de Programação AdvPL - Parte 1 - AcademiaERP— março 12, 2015 #
[…] 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 […]
Pingback by Lógica de Programação AdvPL – Parte 1 | academiaerp.com.br/nova— agosto 30, 2015 #