Quais as diferenças entre tipagens: estática ou dinâmica e forte ou fraca

Quando vemos uma nova linguagem de programação, uma das primeiras coisas que as pessoas costumam colocar na descrição dela é a tipagem. Neste artigo vamos falar um pouco sobre os tipos de tipagem.

Tipagem Estáticas

Linguagens com tipagem estática não permitem ao desenvolvedor alterar o tipo da variável depois de declarada. Geralmente a verificação de tipo é feita em tempo de compilação. Podemos ver o exemplo abaixo na linguagem Java:

public class MyClass {
    public static void main(String args[]) {
      int variavel = 10;

      variavel = "Elton Fonseca"; //error: incompatible types: String cannot be converted to int
    }
}

Quando tentamos atribuir um valor de um tipo diferente do que foi declarado na variável temos um erro.

Java - Fundamentos
Curso de Java - Fundamentos
CONHEÇA O CURSO

Tipagem Dinâmica

A tipagem dinâmica está ligado a habilidade da linguagem de programação em escolher o tipo de dado de acordo com o valor atribuído à variável em tempo de execução dinamicamente. Veja o exemplo abaixo na linguagem PHP:

$variavel = "Elton Fonseca";

echo gettype($variavel); //string

$variavel = 340;

echo gettype($variavel); //integer

$variavel = 340.89;

echo gettype($variavel); //double

$variavel = true;

echo gettype($variavel); //boolean

Muita gente confunde, acha que linguagem de tipagem dinâmica não possui tipos. Na verdade, ela possui tipos normalmente, a diferença está apenas na capacidade da linguagem em escolher o tipo automaticamente.

PHP - Fundamentos
Curso de PHP - Fundamentos
CONHEÇA O CURSO

Inferência de tipo

Algumas linguagens estáticas podem fazer a inferência de tipo na declaração de variáveis, mas não permite que o tipo seja alterado após a declaração. Veja esse exemplo na linguagem C#:

using System;

public class Program
{
    public static void Main()
    {
        var variavel = "Treinaweb";

        Console.WriteLine(variavel.GetType()); //System.String

        variavel = 28; //Compilation error (line 11, col 14): Cannot implicitly convert type 'int' to 'string'
    }
}

Ele apresenta um erro quando tentamos atribuir um valor de tipo diferente a variável. Isso porque ele apenas realiza a inferência do tipo inicial da variável, depois disso como a linguagem possui características estáticas não permite alterar o tipo.

C# (C Sharp) Básico
Curso de C# (C Sharp) Básico
CONHEÇA O CURSO

Tipagem Fraca

A tipagem fraca está ligada a característica da linguagem de realizar conversões automaticamente entre tipos diferentes de dados. Veja o exemplo abaixo abaixo em Javascript:

var nome = "Elton Fonseca"; //string

var idade = 28; //number

console.log(nome + " " + idade); //Elton Fonseca 28
JavaScript Básico
Curso de JavaScript Básico
CONHEÇA O CURSO

Tipagem Forte

Linguagens fortemente tipadas não realizam conversões automaticamente. Vamos pegar como exemplo a linguagem Python. Ela possui tipagem forte, se formos executar o exemplo acima em Python teríamos um erro:

nome = "Elton Fonseca" #str
idade = 28 #int

print(nome + " " + idade) #TypeError: can only concatenate str (not "int") to str
Python - Fundamentos
Curso de Python - Fundamentos
CONHEÇA O CURSO

Considerações finais

Muitas linguagens de programação não se enquadram exatamente entre tipagem estática ou dinâmica e tipagem forte ou fraca. Principalmente pelo fato de cada uma destas abordagens possuírem vantagens e desvantagens, as linguagens mais modernas tendem a mesclar alguns aspectos de cada uma.

Deixe seu comentário

Professor e desenvolvedor. Formado em análise e desenvolvimento de sistema, pós graduando em engenharia e arquitetura de software. É autor de cursos em diversos temas, como, desenvolvimento back-end, cloud computing e CMSs. Nas horas vagas adora estudar sobre o mercado financeiro, cozinhar e brincar com pequeno Daniel. @eltonfonsecadev

© 2004 - 2019 TreinaWeb Tecnologia LTDA - CNPJ: 06.156.637/0001-58 Av. Paulista, 1765, Conj 71 e 72 - Bela Vista - São Paulo - SP - 01311-200