Trabajar con archivos
Parte de la sección Programación orientada a objetos del Journey de Ruby de Coddy. Lección 1 de 57.
Los programas reales se dividen en varios archivos. Un archivo de Ruby carga otro con require_relative, seguido de la ruta del archivo relativa al archivo actual, normalmente sin la terminación .rb. Después de esa línea, se pueden usar los métodos y las clases del archivo cargado:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")Al ejecutar ruby main.rb, se imprime Hello, Ada!: main.rb carga greeting.rb y luego llama a su método.
El programa comienza en el archivo que ejecutas, aquí main.rb, y Ruby lo ejecuta de arriba abajo. require_relative ejecuta el otro archivo en ese punto, y solo la primera vez: un segundo require_relative 'greeting' devuelve false y no hace nada. Un nombre solo se puede usar después de que se haya cargado el archivo que lo define:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb aún no se ha cargado
require_relative 'greeting' # ejecuta greeting.rb, devuelve true
require_relative 'greeting' # ya se ha cargado, devuelve false
puts greeting("Bo")La organización habitual es una clase por archivo, y el archivo lleva el nombre de la clase en snake_case: class Dog está en dog.rb, class BankAccount en bank_account.rb. En los desafíos de esta sección, main.rb contiene el código de entrada/salida proporcionado y comienza con una línea require_relative por archivo, en el orden de carga: primero se carga una clase sobre la que se basa otra.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # métodos auxiliares
main.rb # líneas de require_relative, luego el código de entrada/salidaLo que comparte un archivo depende del tipo de nombre. Los métodos definidos con def al principio de un archivo, las clases y las constantes pueden usarse en todos los archivos cargados después. Una variable local pertenece únicamente a su propio archivo:
# settings.rb
limit = 3 # variable local: solo settings.rb puede acceder a ella
MAX_ITEMS = 3 # constante: visible después de cargar
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # como máximo 3
puts MAX_ITEMS # 3
# puts limit # NameError: variable local no definidaDesafío
FácilEl programa tiene dos archivos. main.rb carga greeting.rb, lee nombres e imprime el resultado de greeting(name). Completa greeting en greeting.rb para que devuelva Hello, Ada! para el nombre Ada, o Hello, friend! cuando el nombre esté vacío.
Tu código va en greeting.rb. main.rb contiene el código de entrada/salida proporcionado y no se puede editar.
Pruébalo tú mismo
require_relative 'greeting'
# Código de entrada/salida proporcionado: déjalo tal como está
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Clases y objetos
Trabajar con archivosDefinir clasesVariables de instanciaMétodos y selfto_s e inspectRepaso: tarjeta de biblioteca4Encapsulación
Métodos privadosMétodos protegidosAsignadores privadosProtección del estadoRepaso: máquina expendedora7Polimorfismo y tipado pato
PolimorfismoTipado patoMétodos abstractoscase y clasesRepaso: métodos de pago2Accesores y self
Lectores y escritoresSetters personalizadosself en los métodosIdentidad e igualdadRepaso: lista de contactos5Herencia
SubclasesSobrescritura de métodosLlamar a superis_a? y ancestrosRepaso - Nómina del personal8Métodos especiales
Igualdad y hashMétodos de operadoresIndexación y adiciónColecciones personalizadasRepaso: fracciones11Proyecto: Gestión de biblioteca
Libros y miembrosPréstamo de librosPractica por tu cuenta: Compilador de Ruby online