O objetivo deste projeto é analisar dados de estoque de empresas de energia verde em 2017 e 2018. Calculamos a soma dos volumes diários totais de cada ano e o retorno anual para cada símbolo.
No geral, esses estoques de energia verde tiveram um desempenho muito melhor em 2017 do que em 2018, com exceção do TerraForm Power (símbolo TERP), como você pode ver nos dados abaixo.
Os scripts refatorados executaram as sub-rotinas em 0,55 se 0,57 s para os anos de 2017 e 2018, respectivamente. Esta é uma melhoria marginal em 0,64 se 0,67 s para o script original. As capturas de tela são fornecidas abaixo.
A principal diferença entre os dois métodos usados para produzir os mesmos dados é o método de armazenamento de dados. Na sub-rotina original, as células da planilha são atualizadas a cada iteração de um loop for, semelhante ao código abaixo.
For i in tickers
...
Worksheets("AllStocksAnalysis").Activate
Cells(4 + i, 1).Value = ticker
Cells(4 + i, 2).Value = totalVolume
Cells(4 + i, 3).Value = endingPrice / startingPrice - 1
...
End i
O script para o método refatorado armazena os dados de saída do loop em três matrizes de dados, que são então usadas para atualizar a planilha com os dados após a execução dos loops de aquisição de dados, semelhante ao código abaixo.
Dim tickerVolumes(12) As Long
Dim tickerStartingPrices(12) As Single
Dim tickerEndingPrices(12) As Single
...
'For loops populating arrays
...
For i = 0 To 11
Worksheets("All Stocks Analysis").Activate
Cells(4 + i, 1).Value = tickers(i)
Cells(4 + i, 2).Value = tickerVolumes(i)
Cells(4 + i, 3).Value = tickerEndingPrices(i) / tickerStartingPrices(i) - 1
End i
Essa manipulação pode parecer trivial, mas reduziu aproximadamente um décimo de segundo do tempo de execução de cada sub-rotina.
A refatoração do código pode ter vantagens ou desvantagens dependendo da situação. Em qualquer caso, se o código original não for suficientemente comentado, ou se o propósito do código for algo com o qual não se esteja intimamente familiarizado, pode ser muito difícil refatorar porque pode não se ter conhecimento suficiente dos métodos de codificação ou do propósito. do código.
Se o código não for suficientemente comentado, pode ser extremamente difícil descobrir o propósito de cada instrução e função. Isso tornaria o código muito difícil de refatorar.
Se o propósito do código for algo com o qual não estamos familiarizados, será difícil refatorar o código sem saber qual é o objetivo final. Tomemos como exemplo simulações eletrodinâmicas de nanopartículas semicondutoras metálicas usando a Teoria Generalizada de Multipartículas de Mie. Veja o problema? Não importa quão bom alguém seja em reequipar o código, este assunto requer conhecimento avançado de eletrodinâmica e equações diferenciais parciais avançadas.
Além disso, refatorar o código pode acabar sendo muito trabalhoso com um pequeno retorno. Veja nossa análise de estoque com VBA como exemplo. Se os conjuntos de dados com os quais estamos trabalhando permanecerem na ordem de grandeza que manipulamos aqui, reequipar o código para que ele possa ser executado 0,1 s mais rápido pode não ser algo em que estejamos interessados. desempenho do mercado ou dos fundos de hedge, essa reformulação pode ser extremamente valiosa quando o código começar a levar trinta minutos ou mais para ser executado.
Refatorar o código também tem muitas vantagens. Em geral, a refatoração do código geralmente torna o código mais elegante, eficiente e, às vezes, até mais fácil de entender.
Se alguém for capaz de manipular o código de forma que o mesmo objetivo seja alcançado com menos linhas e funções mais poderosas, o código geralmente será mais fácil de entender e provavelmente será executado mais rapidamente também.
Além disso, a refatoração do código fornece uma compreensão mais profunda do que o código deveria fazer originalmente e como o objetivo final foi alcançado. Ao refatorar o código, é possível dar uma segunda olhada em um script e decidir o que cada instrução faz e se ou como o código pode se tornar mais eficiente. Esse aumento no conhecimento do código provavelmente significará que os comentários sobre o código refatorado serão mais úteis e descritivos na segunda vez.
A vantagem mais óbvia do nosso script VBA refatorado é o tempo de execução. Como afirmado anteriormente, o script refatorado é executado cerca de um décimo de segundo mais rápido que o script original.
Nosso script refatorado também contém comentários muito melhores para que possamos analisar o código mais tarde e entender o script refatorado muito melhor do que poderíamos entender o script original.
Além disso, nosso script refatorado contém uma macro de uma sub-rotina que faz tudo, enquanto o script original realizava as mesmas tarefas com múltiplas sub-rotinas.
Por último, o script refatorado é aquele que pode ser modificado mais facilmente para executar tarefas semelhantes em outras análises. Os dados são armazenados em matrizes nas próprias macros, em vez de preencher células nas planilhas enquanto os loops são executados. Se reequiparmos o script original para outro propósito, teríamos quase que reescrever completamente os loops. Se reequiparmos o script refatorado para outra finalidade, precisaríamos realmente apenas editar os arrays e usar a função de pesquisa e substituição para atualizar os nomes dos arrays nos loops.