Executando verificação de segurança...
2

Sobre "funções devem fazer apenas uma coisa", vale lembrar que "uma coisa" é bem subjetivo e varia bastante conforme o contexto.

Por exemplo, "fechar pedido" é "apenas uma coisa"? Ou é algo que pode ser decomposto em partes como "verificar disponibilidade no estoque", "fazer pagamento", "gerar nota fiscal", etc? Mas cada uma dessas partes, também não pode ser decomposta?

De qualquer forma, o que impede de ter uma função que fecha o pedido, que por sua vez chama as demais? Algo como:

function fecharPedido() {
    verificarEstoque();
    pagamento();
    gerarNF();
}

É uma função, mas ela ainda faz "apenas uma coisa"? Do ponto de vista negocial, pode ser que "fechar pedido" configure uma "ação única" (ou não, sei lá).

E cada uma das funções pode ser quebrada em outras menores, e assim por diante. Mas onde parar exatamente? Não dá pra saber, não é uma ciência exata. De forma geral, vc deve parar quando achar que não faz mais sentido quebrar em partes menores. Medir a "testabilidade" é um dos critérios válidos, por exemplo. Mas continua tendo um componente subjetivo.

Tem gente que gosta de cravar números mágicos ("uma função não pode ter mais que X linhas"), o que eu acho meio besta. Nenhum número arbitrário é a verdade absoluta, mas em geral todos concordam que funções muito grandes são difíceis de ler, testar e dar manutenção. Mas quanto é "muito grande"? Depende, não tem número mágico, e qualquer um que tente definir um valor qualquer estará focando no problema errado. Avaliar o contexto é mais importante do que seguir cegamente uma regra (ainda mais uma tão arbitrária e falha quanto o número máximo de linhas).

Enfim, o que vale é a regra geral: se a função começar a ficar muito grande ou focar em mais de uma coisa, é um sinal de que vc pelo menos deveria parar e pensar sobre ela, ver se não vale a pena quebrar em mais funções, ou se tudo bem porque no fundo tudo aquilo que ela faz na verdade é uma coisa só (e aí seria o caso de renomear a função). Senso crítico sobre o próprio código costuma ser melhor do que seguir regrinhas.

Carregando publicação patrocinada...
1

Concordo em número, gênero e grau. Esse tipo de regra é mais um norte pra buscar melhorar a qualidade do codigo do que realmente uma lei absoluta.

No meu caso a testabilidade fez eu pensar um pouco melhor em como eu poderia escrever meu código.