Articles

Ruby: Carga vs. Requerir vs. Incluir

Como principiante en cualquier cosa, es importante no solo practicar lo que sea que esté comenzando, sino también estudiar el trabajo de personas más avanzadas en el campo. Como alguien relativamente nuevo en programación, me gusta leer código de programadores a cualquier nivel, solo para descubrir diferentes enfoques para problemas similares.

Una diferencia evidente que noté entre mi código y el código de programadores más avanzados es la estructura de archivos y el número de archivos, pero si quieres ponerle una etiqueta, ellos estaban practicando la Separación de Preocupaciones, y yo no. Sabía que este era un concepto importante en la programación de computadoras, pero, para ser honesto, lo que más me tropieza al practicar SoC es que simplemente no me sentía cómodo al usar Cargar, Requerir e Incluir, también conocido como, las cosas que vinculan archivos en tu programa, y hacen que SoC sea mucho más fácil de implementar.

Echemos un vistazo entre bastidores a estos tres métodos y a cómo pueden llevar tus programas al siguiente nivel.

Include

Este es bastante sencillo. Si ha escrito varias clases que comparten métodos similares, puede extraer esos métodos en un Módulo. Una vez que los métodos se escriben en el módulo, puede «incluir» ese módulo en cualquiera de las clases que puedan necesitar llamar a esos métodos. No hay necesidad de mantener esos métodos por ahí. A continuación se muestra un breve ejemplo de cómo lo escribirías:

class Chocolate
include IceCream
endclass Vanilla
include IceCream
endmodule IceCream
def ice_cream
end
end

Ahora, ambas clases tienen acceso a la etiqueta ice_cream método a través del uso de include .

Load

Mientras que includedemuestra cómo podemos usar la funcionalidad de uso de otra clase Ruby, veamos cómo load tiene una funcionalidad similar, solo que en lugar de especificar clases, estamos especificando archivos de nuestro directorio de proyectos. Este y nuestro siguiente método, require, permiten que un programa tenga una Separación de Preocupaciones con solo unas pocas líneas adicionales en la parte superior de sus archivos.

La idea básica con SoC es reducir un aspecto de su programa para que realmente solo haga una cosa. Hacemos esto cuando refactorizamos el código para que nuestros métodos y funciones solo hagan una cosa. Lo mismo es cierto para nuestros archivos.

Lo que debe recordar con load es que el archivo que está pasando se cargará cada vez que se llame. Por lo tanto, si tiene una biblioteca de funcionalidades que espera usar, recuerde que cada vez que se llame al archivo dependiente, el archivo pasado a load también se carga. Si por alguna razón un archivo en su aplicación/programa está cambiando dinámicamente y se usa como dependencia de otros archivos, debe considerar usar load . De lo contrario, load puede tener efectos adversos en el rendimiento de la aplicación debido al número de veces que se carga el archivo.

Requiere

Requieren es mucho como load , pero la principal diferencia es que requieren sólo carga el pasado en el archivo una vez y, a continuación, recuerde que el archivo ha sido cargado. Por esta razón, require es la opción más popular cuando utiliza bibliotecas de terceros en su programa o aplicación. Espera un minuto, bibliotecas de terceros? ¡Suenan como gems gemas! ¡Así es! Una vez que instale una gema en su directorio o la especifique en su Gemfile, solo necesita «requerir» esa gema en la parte superior del archivo utilizando la funcionalidad de esa gema. Es pan comido.

Ahora, sé que require puede sonar como un poco de magia de Rubí, así que desenterremos al héroe desconocido en todo esto: $LOAD_PATH.

$LOAD_PATH es una variable global que viene con Ruby. Si carga IRB desde su terminal y escribe $LOAD_PATH, obtendrá algo que se asemeja a esto:


Es solo una matriz de rutas absolutas. Y cuando instala una gema, Ruby agrega las rutas absolutas de esas bibliotecas de gema a su $LOAD_PATH. Eso tiene más sentido, ¿verdad? Ruby puede simplemente llamar a la funcionalidad require que está solicitando, ya que ya tiene la ruta absoluta para almacenarla en $LOAD_PATH .

Esperaba usar esta publicación como un medio para explorar más sobre por qué usaríamos estos métodos y cómo nos ayudan a convertirnos en mejores desarrolladores. Si está interesado en más del «cómo» funcionan estos métodos, es posible que se requiera una investigación adicional.