19 outubro 2010

[Dicas] Diferença entre uma linguagem fortemente tipada e uma fracamente tipada

Olá..boa noite, vou falar um pouco sobre a diferença entre linguagem de programação fortemente tipada (strong typing), e uma linguagem fracamente tipada (weak typing).

No caso de uma linguagem fortemente tipada, a principal característica é que cada variável no escopo do programa, representa um tipo bem definido, ou seja explicitamente você será obrigado a declarar o tipo da varíavel ao qual estará declarando.

Alguns exemplos de linguagens fortemente tipadas são: Java, C++, Fortran e Cobol.

Exemplo de código em java:

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

Java é uma linguagem fortemente 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.

Agora a diferença de linguagens fortemente tipadas, mas dinâmicas.

Vejamos um exemplo de código em Ruby:

x = ‘Larissa’
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.

Agora as fracamente tipadas, como exemplos: PHP, Javascript.

Veja um exemplo em javascript:

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


JavaScript é fracamente tipada , 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.

E por último nem tão menos importante as não tipadas, ou seja são aquelas em que existe apenas um tipo genérico ou mesmo nenhum tipo de dados, as variáveis não têm tipos. Entre estas estão a Linguagem de montagem ou Assembly, BCPL e algumas versões de Forth.

Nenhum comentário: