El propósito de este proyecto es analizar los datos bursátiles de las empresas de energía verde en 2017 y 2018. Calculamos tanto la suma de los volúmenes diarios totales para cada año como el rendimiento anual de cada símbolo.
En general, estas acciones de energía verde tuvieron un desempeño mucho mejor en 2017 que en 2018, con la excepción de TerraForm Power (símbolo de cotización TERP), como puede ver en los datos a continuación.
Los scripts refactorizados ejecutaron las subrutinas en 0,55 sy 0,57 s para los años 2017 y 2018 respectivamente. Esta es una mejora marginal con respecto a los 0,64 sy 0,67 s del script original; se proporcionan capturas de pantalla a continuación.
La principal diferencia entre los dos métodos utilizados para producir los mismos datos es el método de almacenamiento de datos. En la subrutina original, las celdas de la hoja de trabajo se actualizan con cada iteración de un bucle for, similar al código siguiente.
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
El script para el método refactorizado almacena los datos de salida del bucle en tres matrices de datos, que luego se utilizan para actualizar la hoja de trabajo con los datos después de que se hayan ejecutado los bucles de adquisición de datos, de forma similar al código siguiente.
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
Esta manipulación puede parecer trivial, pero redujo aproximadamente una décima de segundo el tiempo de ejecución de cada subrutina.
El código de refactorización puede tener ventajas o desventajas según la situación. En cualquier caso, si el código original no está suficientemente comentado, o el propósito del código es algo con lo que uno no está muy familiarizado, puede ser muy difícil refactorizarlo porque es posible que no se tenga suficiente conocimiento de los métodos de codificación o del propósito. del código.
Si el código no está suficientemente comentado, puede resultar extremadamente difícil descubrir el propósito de cada declaración y función. Esto haría que el código fuera muy difícil de refactorizar.
Si el propósito del código es algo con lo que uno no está familiarizado, es difícil refactorizar el código sin saber cuál es el objetivo final. Tomemos como ejemplo simulaciones electrodinámicas de nanopartículas semiconductoras metálicas utilizando la teoría generalizada de Mie multipartículas. ¿Ves el problema? No importa qué tan bueno uno pueda ser reestructurando el código, este tema requiere conocimientos avanzados tanto de electrodinámica como de ecuaciones diferenciales parciales avanzadas.
Además, refactorizar el código podría terminar siendo mucho trabajo por una pequeña recompensa. Tomemos como ejemplo nuestro análisis de acciones con VBA. Si los conjuntos de datos con los que uno está trabajando permanecen en el orden de magnitud que manipulamos aquí, reestructurar el código para que pueda ejecutarse 0,1 s más rápido puede no ser algo que le interese. Sin embargo, si tuviéramos que analizar sectores más grandes del stock rendimiento del mercado o de los fondos de cobertura, esta reestructuración podría ser extremadamente valiosa cuando el código comience a tardar treinta minutos o más en ejecutarse.
El código de refactorización también tiene muchas ventajas. En general, la refactorización de código suele hacer que el código sea más elegante, eficiente y, a veces, incluso más fácil de entender.
Si uno es capaz de manipular el código de manera que se logre el mismo objetivo con menos líneas y funciones más potentes, el código generalmente será más fácil de entender y probablemente también se ejecutará más rápido.
Además, la refactorización del código brinda una comprensión más profunda de lo que originalmente debía hacer el código y cómo se logró el objetivo final. Al refactorizar código, uno puede echar un segundo vistazo a un script y decidir qué hace cada declaración y si el código puede hacerse más eficiente y cómo hacerlo. Este aumento en el conocimiento del código probablemente significará que los comentarios sobre el código refactorizado serán más útiles y descriptivos la segunda vez.
La ventaja más obvia de nuestro script VBA refactorizado es el tiempo de ejecución. Como se indicó anteriormente, el script refactorizado se ejecuta aproximadamente una décima de segundo más rápido que el script original.
Nuestro script refactorizado también contiene comentarios mucho mejores para que podamos revisar el código más adelante y comprender el script refactorizado mucho mejor de lo que podríamos entender el script original.
Además, nuestro script refactorizado contiene una macro con una subrutina que lo hace todo, mientras que el script original realizaba las mismas tareas con múltiples subrutinas.
Por último, el script refactorizado se puede modificar más fácilmente para realizar tareas similares para otros análisis. Los datos se almacenan en matrices en las propias macros en lugar de llenar celdas en las hojas de trabajo mientras se ejecutan los bucles. Si tuviéramos que reescribir el script original para otro propósito, casi tendríamos que reescribir completamente los bucles. Si tuviéramos que reestructurar el script refactorizado para otro propósito, en realidad solo necesitaríamos editar las matrices y usar la función de búsqueda y reemplazo para actualizar los nombres de las matrices en los bucles.