As funções normalmente devem ser curtas, entre 5-15 linhas é minha "regra prática" pessoal quando se codifica em Java ou C #. Este é um bom tamanho por vários motivos:
- Ele cabe facilmente na sua tela sem rolar
- É sobre o tamanho conceitual que você pode ter na sua cabeça
- É suficientemente significativo para exigir uma função por si só (como uma parte significativa e lógica da lógica)
- Uma função menor que 5 linhas é uma dica de que você talvez esteja quebrando demais o código (o que dificulta a compreensão se você precisar navegar entre as funções). Ou isso ou você está esquecendo seus casos especiais / tratamento de erros!
Mas não acho que seja útil definir uma regra absoluta, pois sempre haverá exceções / razões válidas para divergir da regra:
- Uma função de acesso de uma linha que executa um tipo de conversão é claramente aceitável em algumas situações.
- Existem algumas funções muito curtas, mas úteis (por exemplo, trocar como mencionado pelo usuário desconhecido) que claramente precisam de menos de 5 linhas. Não é grande coisa, algumas funções de 3 linhas não causam nenhum dano à sua base de código.
- Uma função de 100 linhas que é uma única instrução de troca grande pode ser aceitável se estiver extremamente claro o que está sendo feito. Esse código pode ser conceitualmente muito simples, mesmo que exija muitas linhas para descrever os diferentes casos. Às vezes é sugerido que isso deve ser refatorado em classes separadas e implementado usando herança / polimorfismo, mas IMHO está levando a OOP longe demais - eu prefiro ter uma grande declaração de switch de 40 direções do que 40 novas classes para lidar.
- Uma função complexa pode ter muitas variáveis de estado que ficariam muito confusas se passadas entre diferentes funções como parâmetros. Nesse caso, você poderia razoavelmente argumentar que o código é mais simples e fácil de seguir se você mantiver tudo em uma única função grande (embora, como Mark corretamente aponta, isso também possa ser um candidato a se transformar em uma classe para encapsular a lógica e estado)
- Às vezes, funções menores ou maiores têm vantagens de desempenho (talvez por motivos inlining ou JIT, como Frank menciona). Isso é altamente dependente da implementação, mas pode fazer a diferença - certifique-se de fazer um benchmark!
Então, basicamente, use o bom senso , use pequenos tamanhos de funções na maioria dos casos, mas não seja dogmático se tiver uma boa razão para fazer um função incomumente grande.