Questão
ID 66605Disciplina: Tecnologia da Informação
Assuntos: Compilador, Interpretador, Linker, Tradutor e Depurador, Conceitos e Propriedades das Linguagens de Programação
Ano: 2025 Banca: PERFIL - ENADE Órgão: Segundo Simulado Pnd
Em uma disciplina de Paradigmas de Linguagens de Programação, a professora discute a diferença entre tipagem estática e tipagem dinâmica, um conceito fundamental que influencia a forma como os programadores escrevem e depuram código. Ela quer que os alunos entendam os trade-offs entre as duas abordagens, em vez de simplesmente classificá-las como 'melhor' ou 'pior'. Para isso, ela apresenta um trecho de um artigo de Martin Fowler: "Em linguagens de tipagem estática (como Java, C# ou TypeScript), os tipos das variáveis são conhecidos em tempo de compilação. O compilador pode verificar a correção dos tipos antes que o programa seja executado, pegando muitos erros comuns precocemente. Isso serve como uma forma de documentação e pode habilitar melhores ferramentas de autocompletar na IDE. Em linguagens de tipagem dinâmica (como Python, JavaScript ou Ruby), os tipos são verificados em tempo de execução. Isso permite uma programação mais flexível e um código muitas vezes mais conciso, mas move a detecção de erros de tipo do tempo de compilação para o tempo de execução, exigindo uma cobertura de testes mais rigorosa para garantir a correção." Ela então apresenta dois pequenos trechos de código que tentam somar um número e uma string:
Código 1 (Java - Estático): `int numero = 5; String texto = "10"; int resultado = numero + texto; // Erro!`
Código 2 (Python - Dinâmico): `numero = 5 texto = "10" resultado = numero + texto # Erro!`
Avaliando o comportamento desses códigos sob a ótica da tipagem, analise as seguintes afirmações.
I. No Código 1 (Java), o erro de tipo (tentar somar um `int` e uma `String`) seria detectado pelo compilador *antes* da execução do programa. O programa nem chegaria a ser gerado, forçando o desenvolvedor a corrigir o erro imediatamente.
II. No Código 2 (Python), o código é sintaticamente válido e seria executado. O erro de tipo (um `TypeError`) só ocorreria *durante* a execução, quando o interpretador tentasse executar a linha `resultado = numero + texto`. Se essa linha estivesse dentro de uma função que nunca foi chamada, o erro nunca apareceria.
III. A principal vantagem da tipagem dinâmica, ilustrada pelo exemplo, é que ela permite que o programador cometa erros de tipo sem consequências, tornando o desenvolvimento mais rápido e flexível.
É correto o que se afirma em: