Questão
ID 66771Disciplina: Tecnologia da Informação
Assuntos: Conceitos e Propriedades das Linguagens de Programação, Python
Ano: 2025 Banca: PERFIL - ENADE Órgão: Segundo Simulado Pnd
Em uma disciplina de Paradigmas de Linguagens de Programação, o professor deseja que os alunos compreendam as implicações da imutabilidade, um conceito central da programação funcional. Ele observa que os alunos, acostumados com a programação imperativa, tendem a modificar dados (variáveis, objetos, listas) diretamente, o que pode levar a bugs difíceis de rastrear em sistemas complexos (efeitos colaterais). Para ilustrar os benefícios da imutabilidade, ele apresenta um trecho de um artigo sobre o tema: "Dados imutáveis, uma vez criados, não podem ser alterados. Qualquer 'modificação' resulta na criação de uma nova estrutura de dados com o valor atualizado, deixando a original intacta. Isso pode parecer ineficiente, mas traz enormes benefícios. Primeiro, o código se torna mais previsível: uma função que recebe dados imutáveis não pode alterá-los secretamente, eliminando uma classe inteira de bugs. Segundo, a imutabilidade simplifica drasticamente a programação concorrente. Se os dados são imutáveis, eles podem ser compartilhados entre múltiplos threads sem a necessidade de mecanismos de bloqueio (locks) complexos e propensos a erros, pois não há risco de um thread modificar os dados enquanto outro está lendo." O professor então apresenta dois trechos de código Python que adicionam um novo item a um carrinho de compras:
Código 1 (Mutável): `carrinho = ['maçã', 'banana'] def adiciona_item(carrinho_atual, item): carrinho_atual.append(item) return carrinho_atual novo_carrinho = adiciona_item(carrinho, 'laranja') # Agora, tanto 'novo_carrinho' quanto o 'carrinho' original são ['maçã', 'banana', 'laranja']`
Código 2 (Imutável): `carrinho = ('maçã', 'banana') # Usando tupla, que é imutável def adiciona_item(carrinho_atual, item): return carrinho_atual + (item,) novo_carrinho = adiciona_item(carrinho, 'laranja') # Agora, 'novo_carrinho' é ('maçã', 'banana', 'laranja') e o 'carrinho' original permanece ('maçã', 'banana')`
Qual é a principal vantagem da abordagem imutável (Código 2) em um sistema complexo?