Le but de ce projet est d'analyser les données boursières des sociétés d'énergie verte en 2017 et 2018. Nous calculons à la fois la somme des volumes quotidiens totaux pour chaque année et le rendement annuel de chaque symbole boursier.
Dans l'ensemble, ces actions d'énergie verte ont bien mieux performé en 2017 qu'en 2018, à l'exception de TerraForm Power (symbole boursier TERP), comme vous pouvez le voir dans les données ci-dessous.
Les scripts refactorisés ont exécuté les sous-programmes en 0,55 s et 0,57 s pour les années 2017 et 2018 respectivement. Il s'agit d'une amélioration marginale par rapport aux 0,64 s et 0,67 s pour le script original, des captures d'écran sont fournies ci-dessous.
La principale différence entre les deux méthodes utilisées pour produire les mêmes données réside dans la méthode de stockage des données. Dans le sous-programme d'origine, les cellules de la feuille de calcul sont mises à jour à chaque itération d'une boucle for, similaire au code ci-dessous.
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
Le script de la méthode refactorisée stocke les données de sortie de la boucle dans trois tableaux de données, qui sont ensuite utilisés pour mettre à jour la feuille de calcul avec les données une fois les boucles d'acquisition de données exécutées, comme le code ci-dessous.
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
Cette manipulation peut paraître triviale, mais elle a réduit d'environ un dixième de seconde le temps d'exécution de chaque sous-programme.
La refactorisation du code peut présenter des avantages ou des inconvénients selon la situation. Dans tous les cas, si le code original n'est pas suffisamment commenté, ou si le but du code est quelque chose que l'on ne connaît pas intimement, il peut être très difficile de le refactoriser car on peut ne pas avoir une connaissance suffisante des méthodes de codage ou du but. du code.
Si le code n’est pas suffisamment commenté, il peut être extrêmement difficile de comprendre le but de chaque instruction et fonction. Cela rendrait le code très difficile à refactoriser.
Si le but du code est quelque chose que l'on ne connaît pas, il est difficile de refactoriser le code sans savoir quel est l'objectif final. Prenons comme exemple les simulations électrodynamiques de nanoparticules métalliques semi-conductrices à l'aide de la théorie de Mie multiparticulaire généralisée. Vous voyez le problème ? Quelle que soit votre capacité à réoutiller le code, ce sujet nécessite des connaissances avancées en électrodynamique et en équations aux dérivées partielles avancées.
De plus, la refactorisation du code pourrait finir par représenter beaucoup de travail pour un petit gain. Prenons comme exemple notre analyse de stock avec VBA. Si les ensembles de données avec lesquels on travaille restent de l'ordre de grandeur que nous avons manipulé ici, réorganiser le code pour qu'il puisse s'exécuter 0,1 s plus vite n'est peut-être pas quelque chose qui nous intéresse. Cependant, si nous devions analyser des secteurs plus larges du stock performance du marché ou des hedge funds, ce réoutillage pourrait être extrêmement précieux lorsque le code commence à prendre trente minutes ou plus à s'exécuter.
La refactorisation du code présente également de nombreux avantages. En général, la refactorisation du code rend souvent le code plus élégant, plus efficace et parfois même plus facile à comprendre.
Si l'on est capable de manipuler le code de telle sorte que le même objectif soit atteint avec moins de lignes et des fonctions plus puissantes, le code sera généralement plus facile à comprendre et s'exécutera probablement également plus rapidement.
En outre, la refactorisation du code permet de mieux comprendre ce que le code était initialement censé faire et comment l'objectif final a été atteint. Lors de la refactorisation du code, on peut réexaminer un script et décider ce que fait chaque instruction et si ou comment le code peut être rendu plus efficace. Cette augmentation de la connaissance du code signifiera probablement que les commentaires sur le code refactorisé seront plus utiles et descriptifs la deuxième fois.
L'avantage le plus évident de notre script VBA refactorisé est le temps d'exécution. Comme indiqué précédemment, le script refactorisé s'exécute environ un dixième de seconde plus vite que le script d'origine.
Notre script refactorisé contient également de bien meilleurs commentaires afin que nous puissions revenir sur le code plus tard et comprendre le script refactorisé bien mieux que le script original.
De plus, notre script refactorisé contient une macro à un seul sous-programme pour tout faire, alors que le script d'origine accomplissait les mêmes tâches avec plusieurs sous-programmes.
Enfin, le script refactorisé peut être plus facilement modifié pour effectuer des tâches similaires pour d'autres analyses. Les données sont stockées dans des tableaux dans les macros elles-mêmes plutôt que de remplir les cellules des feuilles de calcul pendant l'exécution des boucles. Si nous devions réorganiser le script original dans un autre but, nous devrions presque réécrire complètement les boucles. Si nous devions réorganiser le script refactorisé dans un autre but, nous n'aurions en réalité besoin que de modifier les tableaux et d'utiliser la fonction de recherche et de remplacement pour mettre à jour les noms des tableaux dans les boucles.