Entonces, una pregunta aquí que es, creo, en el contexto de una abstracción, ¿sientes que la abstracción no debería extenderse o sería mejor simplemente extenderla y ver qué sucede hasta que termines con tres o cuatro funciones y luego cambies? Entonces, tal vez no estoy entendiendo completamente la pregunta pero mi proceso de pensamiento normalmente, esto es algo por lo que realmente tuve que luchar, pero mientras trabajo en algo de code antes de haber comprometido algo solo estoy jugando con cosas, estoy pensando constantemente, oh, esto se parece mucho a esto y entonces, simplemente pongamos eso en una función. Y realmente tuve que luchar contra mí mismo y decir, no, no, no, no, no hagas eso todavía. Solo copia, incluso si son como cinco líneas de code, parece tan duplicado, solo copia y pega eso porque eventualmente descubrirás una de dos cosas. Descubrirás que no lo necesitabas en absoluto en primer lugar y entonces, como tomar el tiempo para hacer la abstracción y crear los nombres de las variables y la generalización de esa función fue una pérdida de tiempo de todos modos o descubres que no eran tan similares como pensabas que eran. Entonces sí, no sé si eso responde a la pregunta porque tal vez la entendí mal, pero eso es, sí.
Me gustaría hacer un seguimiento de eso en realidad. Entonces, cuando dices que te das cuenta de que no son tan similares como pensabas que eran, ¿tienes como un ejemplo? Porque siento que eso es una de esas cosas que es fácil de decir en abstracto y difícil de poner en términos concretos. Entonces, si alguien está pensando en esto, ¿cuándo es el caso en que el mismo code, code que has copiado y pegado no es tan similar como pensamos que es.
Sí, esa es una gran pregunta. Entonces, un ejemplo de esto que acabo de experimentar recientemente y especialmente es una conferencia de React, entonces, un ejemplo de React, tenía un botón de inicio de sesión y un botón de registro, muy similares, solo palabras diferentes y diferentes etiquetas ARIA para el modal, aparecen colores diferentes y cosas así. Y pensé, ¿sabes qué? Estos son realmente similares. Podría hacer un componente de React, solo toma un par de propiedades, pero me he abstenido. Y descubrí que si fuera a hacer un componente para esto, habría tantas pequeñas propiedades que son como, esto es lo que debería ser la etiqueta ARIA, este es el título del modal, este es el tipo de botón que debería ser. Y simplemente no veo que este tipo de abstracción sea más simple que la duplicación que tengo en su lugar. Es como si cada uno fuera seis o siete líneas de code. Ahora hay una pequeña pieza allí que el modal que aparece tiene un pequeño botón de cierre que está diseñado específicamente para los modales de inicio de sesión y registro. Y entonces todo lo que hice para eso fue que extraje el CSS para eso porque no hay como variables o nada, no el CSS, sino el JSX para eso. Entonces, simplemente creé un elemento JSX y luego enlacé ese elemento como una variable. Y entonces, como puedo tomar esa pequeña pieza de similitud sin hacerlo un componente de función completo que tiene como 12 propiedades en él. Y sabes, esa es una distinción realmente interesante también porque en ambos casos, estás hablando de code que visualmente se vería igual. Como lo que aparece en el navegador, visualmente se ve igual. Es un botón de cierre o es un formulario de registro, pero la implementación es donde la diferencia comienza a aparecer. Si tienes que cambiar cada parte de esos atributos, no estás realmente escribiendo una abstracción, solo te estás dando tareas.
Sí, exactamente. Y luego, cada vez que quieres hacer algo que los hace ligeramente diferentes, tienes que agregar otro argumento, otra propiedad, y es solo más tarea para ti. Y al final del día, lo que terminas teniendo es JSX copiado y pegado que son solo dos copias de casi lo mismo o un componente de función que estás llamando que es casi la misma cantidad de líneas de propiedades. Entonces, ¿qué te estás comprando allí? No mucho, solo tareas. Totalmente, totalmente. Bueno, entonces otra pregunta siguiendo eso. ¿Es el costo de una mala abstracción generalmente mucho peor que el de duplicar el code en las pruebas y posiblemente duplicar los errores? ¿Cuál ha sido tu experiencia con eso? Esa es una gran pregunta, y es bastante matizada porque no quiero que nadie se vaya de mi charla diciendo, oh, a Kent le gusta la duplicación, odia la abstracción.
Comments