Efeito colateral escondido: a função que mente sobre o que faz
Pergunta
Por que uma função chamada `getUsuario()` que também grava um log de auditoria e atualiza um cache no banco é um problema, mesmo que 'funcione'?
Resposta esperada
O nome promete uma consulta pura (`get`), mas ela também escreve — quem chama não tem como saber sem ler o corpo. Consequências: chamar `getUsuario()` num teste, num loop, ou num caminho onde você só queria ler agora dispara escritas inesperadas (log crescendo, contenção no banco, comportamento não-determinístico); reordenar ou remover a chamada muda o estado de formas surpreendentes; e fica difícil raciocinar sobre o código porque você não pode confiar nos nomes. Princípio: comando x consulta (CQS) — uma função ou RESPONDE algo sem mudar estado observável, ou MUDA estado e idealmente não retorna dado de negócio. Se a auditoria é necessária, ela é uma responsabilidade explícita (um decorator, um evento, uma chamada separada no caso de uso), não um efeito escondido dentro de um getter.
Por que perguntam isso
Pergunta pleno. Termo-chave: 'command-query separation'. Bom candidato dá a consequência concreta (teste/loop dispara escrita).