Y es importante señalar nuevamente, esas pruebas deben cubrir el comportamiento existente. Si estamos corrigiendo un error en una pieza de código, pero decidimos refactorizarlo primero, entonces esas pruebas deben cubrir todo el comportamiento existente, incluso si es incorrecto. Porque si estamos cambiando la prueba y el código al mismo tiempo, entonces no podemos saber si la refactorización funcionó. Necesitamos escribir las pruebas que aseguren que el código hace que la función asegure que hace lo mismo una vez que lo hemos refactorizado. Y solo entonces cambiamos la prueba y cambiamos el código para corregir el error. Y luego, en ese punto, podemos refactorizar.
Y así, para la última parte de la charla, quería repasar algunos pequeños consejos que nos van a ayudar a refactorizar el código frente a esta idea de complejidad y comprensibilidad. Y así, la complejidad cognitiva, bastante obviamente, como una puntuación, castiga el código anidado. Cuantas más cosas ponemos en la pila del cerebro, empujadas a la pila del cerebro, supongo, más complejas se vuelven las cosas. Y así, reducir el anidamiento va a ayudarte a lidiar con eso y simplemente sacar algunas de esas cosas de la pila del cerebro y dejarte con menos que considerar mientras lees una función.
Y así, las cosas que vamos a cubrir para esto son invertir condiciones y salir temprano, colapso estructural, extraer funciones auxiliares y solo un par de características de JavaScript que nos van a ayudar con esto también que son un poco más modernas. Y así, invertir condiciones y salir temprano. Esto se refiere a lo primero que te mostré en esa función de insertar muchos en la que dije que había esta gran condicional alrededor del exterior que está verificando que la longitud del array de documentos es mayor que cero. De lo contrario, simplemente devuelve un objeto vacío, realmente, un conteo insertado de cero. Esta gran condición alrededor de la función que luego tiene todo lo demás dentro, obviamente, aumenta ese anidamiento. Y si invertimos la condición, es decir, si la longitud del documento es cero o menos que cero, supongo, realmente no va a suceder con un array. Pero si la longitud del documento es cero, entonces podemos devolver inmediatamente nuestro tipo de objeto cero y luego descartar la idea de que esto es un problema más. La función puede entonces simplemente continuar segura en el conocimiento de que estamos tratando con una lista de documentos y eso está bien. Invertir y salir temprano simplemente, sí, saca cosas de la pila del cerebro y significa que no tenemos que considerar eso más adelante en la función. Simplemente sácalo de la pila del cerebro. Eso es con lo que voy.
El colapso estructural es algo similar. Estamos tratando de reducir el número de condicionales, especialmente los condicionales anidados, si podemos de alguna manera aplastarlos juntos. Y así, en este caso, insertar muchos en realidad puede tratar con un documento de opciones, objeto de opciones que puede tener un array de vectores, y luego va a intentar y unir esos vectores y documentos juntos. Pero si la longitud de los vectores y la longitud de los documentos no es la misma, entonces eso es un error, porque no van a ir juntos. Pero esto es como condicionales anidados aquí. Y lo que podríamos hacer es aplastar ese tipo de cosa juntos para verificar que si tenemos vectores y si los vectores no son iguales a la misma longitud que los documentos, entonces podemos lanzar un error. Y así, esto en realidad nos permite, en este caso, devolver temprano a través de un error en lugar de simplemente continuar anidando más y luego podemos dejar que el resto del código continúe. Aplastar esas cosas en un condicional nos permite, sí, considerarlo tratado mucho más rápido y simplemente sacarlo de la pila del cerebro.
Extraer métodos auxiliares, creo, es en realidad lo más útil aquí.
Comments