Funções que contêm uma declaração única?

5

Há algum problema em ter funções que tenham instruções únicas?

Eu geralmente faço funções que possuem instruções únicas. Acredito que isso aumente a legibilidade do código e eu seja capaz de escrever código mais rápido, pois eles tornam o código mais semelhante à linguagem natural. Estas funções são frequentemente funções de utilidade que eu chamo em mais de 2 lugares, pelo menos.

RegExp.escape = function(text) {
  return text.replace(/[-[\]{}()*+?.,\^$|\s]/g, "\$&");
};

function makeSelector(text) {
  return '#' + RegExp.escape(text);
}
    
por Gaurav Grover 29.11.2016 / 15:52
fonte

3 respostas

2

Para que a refatoração de uma função seja útil,

  1. A função deve encapsular um pouco de funcionalidade reutilizável
  2. O nome da função deve incorporar essa funcionalidade de maneira significativa.

Seu exemplo específico parece valer a pena, desde que a primeira função seja usada em mais de um lugar. Se não for, você pode ser melhor simplesmente incluí-lo na segunda função, pois você simplificaria o código com menos funções para se preocupar.

    
por 29.11.2016 / 16:01
fonte
0

É um tema controverso, mas como minha resposta aceita a uma pergunta recente, Meu chefe me pede para parar de escrever pequenas funções e fazer tudo no mesmo loop , mostra, a maioria das pessoas parecem concordar que funções de instruções únicas ajudam a melhorar a legibilidade.

Os contras para esta abordagem são que, se a função não for bem nomeada, você terá que pular o código, lendo o que ele faz e isso pode atrasar o desenvolvedor.

Uma linha de código é fácil de raciocinar e, portanto, essas funções tendem a ser altamente legíveis, especialmente se a função for bem denominada. Portanto, em geral, é melhor escrever funções curtas e bem nomeadas do que funções longas, independentemente de como elas são nomeadas.

    
por 29.11.2016 / 15:55
fonte
0

Além das melhorias óbvias de legibilidade (assumindo funções bem nomeadas / com escopo definido), isso também tem a grande vantagem de fornecer um ponto de abstração para a funcionalidade.

Vamos fingir que você tem 30 lugares no código onde deseja usar essa funcionalidade, e você não coloca um wrapper de função nele. Então, se essa funcionalidade precisa mudar, você precisa encontrar e alterar isso em 30 lugares, o que é muito propenso a erros (especialmente no JS, onde as ferramentas de refatoração são imaturas na melhor das hipóteses).

Se estiver em uma função, basta alterar o conteúdo da função (alteração de um código de ponto) e o restante é isolado.

Talvez o seu código específico na pergunta não seja o melhor exemplo de como isso pode ser importante, mas é um conceito muito strong em geral, IMNSHO. Eu não uso muito a palavra 'sempre', mas eu prefiro sempre preferir um wrapper de função apenas para esse ponto de abstração, independentemente dos benefícios nomeados / organizacionais adicionados.

Na verdade, sua função é um exemplo decente do meu ponto. Se você (por algum motivo que eu não consigo entender no momento, mas isso é além do ponto) queria mudar como você escapar da string ou fugir da regex, você teria que mudar apenas o corpo da função, não encontrar cada lugar onde você usa RegEx.escape

    
por 29.11.2016 / 16:04
fonte