Além: escrevi isso em resposta à pergunta de dallin (agora fechada), mas ainda acho que poderia ser útil para alguém, então aqui vai
Penso que o motivo das funções de atomização é 2 vezes e, como o @jozefg menciona, depende da linguagem usada.
Separação de preocupações
O principal motivo para fazer isso é manter diferentes partes do código separadas, para que qualquer bloco de código que não contribua diretamente para o resultado / intenção da função seja uma preocupação separada e possa ser extraído.
Digamos que você tenha uma tarefa em segundo plano que também atualiza uma barra de progresso, a atualização da barra de progresso não está diretamente relacionada à tarefa de longa execução, portanto, deve ser extraída, mesmo que seja o único trecho de código que usa a barra de progresso.
Digamos que em JavaScript você tenha uma função getMyData (), que 1) cria uma mensagem de sabão a partir de parâmetros, 2) inicializa uma referência de serviço, 3) chama o serviço com a mensagem de sabão, 4) analisa o resultado, 5) retorna o resultado. Parece razoável, eu escrevi essa função exata várias vezes - mas realmente isso pode ser dividido em 3 funções privadas, incluindo apenas o código 3 e 5 (se houver), pois nenhum outro código é diretamente responsável por obter dados do serviço .
Experiência de depuração aprimorada
Se você possui funções completamente atômicas, seu rastreamento de pilha se torna uma lista de tarefas, listando todo o código executado com êxito, ou seja:
- Obter meus dados
- Inicializar referência de serviço
- Resposta do Serviço Analisado - ERRO
seria muito mais interessante do que descobrir que houve um erro ao obter dados. Porém, algumas ferramentas são ainda mais úteis para depurar árvores de chamadas detalhadas do que, por exemplo, o Microsofts Debugger Canvas .
Também entendo suas preocupações de que pode ser difícil seguir o código escrito dessa maneira, porque no final do dia, você precisa escolher uma ordem de funções em um único arquivo, onde sua árvore de chamadas seria muito mais complexa do que aquela . Mas se as funções tiverem um bom nome (o intellisense me permite usar 3-4 palavras maiúsculas em qualquer função que eu queira, sem abrandar nenhuma) e estruturadas com interface pública na parte superior do arquivo, seu código será como pseudo-código que é de longe a maneira mais fácil de obter um entendimento de alto nível de uma base de código.
Para sua informação, este é um daqueles "faça o que eu digo, não o que faço", manter o código atômico é inútil, a menos que você seja cruelmente consistente com ele no IMHO, o que eu não sou.