Menu
Coddy logo textTech

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/salida

Lo 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 definida
challenge icon

Desafío

Fácil

El 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) }
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de Ruby online