Cómo usar los atributos con Ruby

Para crear componentes reutilizables (que pueden ser usados fácilmente en otros programas), un lenguaje de programación debe tener alguna forma de importar ese código sin problemas en tiempo de ejecución. En Ruby, el método require se usa para cargar otro archivo y ejecutar todas sus sentencias. Esto sirve para importar todas las definiciones de clases y métodos en el archivo. Además de simplemente ejecutar todas las sentencias del archivo, el método require también hace un seguimiento de qué archivos han sido requeridos previamente y, por lo tanto, no requerirá un archivo dos veces.

 

Usar el método 'require'

El método require toma el nombre del archivo a requerir, como una cadena, como un solo argumento. Puede ser una ruta al archivo, como ./lib/some_library.rb o un nombre abreviado, como some_library. Si el argumento es una ruta y un nombre de archivo completo, el método require buscará allí el archivo. Sin embargo, si el argumento es un nombre abreviado, el método require buscará ese archivo en varios directorios predefinidos de su sistema. La utilización del nombre abreviado es la forma más común de utilizar el método requerido.

El siguiente ejemplo muestra cómo utilizar la sentencia de necesidad. El archivo test_library.rb se encuentra en el primer bloque de código. Este archivo imprime un mensaje y define una nueva clase. El segundo bloque de código es el archivo test_program.rb. Este archivo carga el archivo test_library.rb utilizando el método requerido y crea un nuevo objeto TestClass.

 

puts "test_library included"

 

class TestClass

  def initialize

    puts "TestClass object created"

  end

end

#!/usr/bin/env ruby

require 'test_library.rb'

 

t = TestClass.new

Evite los conflictos de nombres

Al escribir componentes reutilizables, es mejor no declarar muchas variables en el ámbito global fuera de cualquier clase o método o usando el prefijo $. Esto es para prevenir algo llamado "contaminación del espacio de nombres". Si declara demasiados nombres, otro programa o biblioteca podría declarar el mismo nombre y provocar un conflicto de nombres.

 

Cuando dos bibliotecas sin relación alguna empiezan a cambiar las variables del otro accidentalmente, las cosas se rompen, aparentemente al azar. Este es un error muy difícil de rastrear y es mejor evitarlo.

 

Para evitar conflictos de nombres, puede encerrar todo lo de su biblioteca dentro de una instrucción de módulo. Esto requerirá que la gente se refiera a sus clases y métodos con un nombre completamente calificado como MyLibrary::my_method, pero vale la pena, ya que generalmente no se producirán conflictos de nombres. Para las personas que quieren tener todos sus nombres de clases y métodos en el ámbito global, pueden hacerlo usando la sentencia include.

El siguiente ejemplo repite el ejemplo anterior, pero incluye todo en un módulo de MyLibrary. Se dan dos versiones de my_program.rb; una que usa la sentencia include y otra que no.

 

puts "test_library included"

 

module MyLibrary

  class TestClass

    def initialize

      puts "TestClass object created"

    end

  end

end

#!/usr/bin/env ruby

require 'test_library2.rb'

 

t = MyLibrary::TestClass.new

#!/usr/bin/env ruby

require 'test_library2.rb'

include MyLibrary

 

t = TestClass.new

Evitar los caminos absolutos

Debido a que los componentes reutilizables a menudo se desplazan, también es mejor no utilizar rutas absolutas en las llamadas necesarias.

 

Una ruta absoluta es una ruta como /home/user/code/library.rb. Notará que el archivo debe estar en esa ubicación exacta para que funcione. Si el script es movido o su directorio home cambia, eso requerirá que la sentencia deje de funcionar.

 

En lugar de rutas absolutas, a menudo es común crear un directorio./lib en el directorio de tu programa Ruby. El directorio./lib se añade a la variable $LOAD_PATH que almacena los directorios en los que el método require busca archivos Ruby. Después de eso, si el archivo my_library.rb está almacenado en el directorio lib, puede ser cargado en su programa con una simple instrucción'my_library'.

El siguiente ejemplo es el mismo que el anterior ejemplo test_program.rb. Sin embargo, asume que el archivo test_library.rb está almacenado en el directorio./lib y lo carga usando el método descrito anteriormente.

 

#!/usr/bin/env ruby

$LOAD_PATH << './lib'

require 'test_library.rb'

 

t = TestClass.new

(0 votes)