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")Ejecutar ruby main.rb imprime Hello, Ada!: main.rb carga greeting.rb y después 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 puede usarse después de que se haya cargado el archivo que lo define:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb aún no está cargado
require_relative 'greeting' # ejecuta greeting.rb, devuelve true
require_relative 'greeting' # ya cargado, devuelve false
puts greeting("Bo")La estructura habitual es una clase por archivo, cuyo nombre sigue el de la clase en snake_case: class Dog se encuentra en dog.rb, y 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 clase.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # métodos auxiliares
main.rb # líneas 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 ser utilizados por todos los archivos cargados después de él. Una variable local pertenece únicamente a su propio archivo:
# settings.rb
limit = 3 # variable local: solo settings.rb la ve
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 suministrado: mantenlo 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