Trabalhando com Arquivos
Parte da seção Programação orientada a objetos do Journey de Ruby da Coddy. Lição 1 de 57.
Programas reais são divididos em vários arquivos. Um arquivo Ruby carrega outro com require_relative, seguido pelo caminho do arquivo relativo ao arquivo atual, geralmente sem a extensão .rb. Depois dessa linha, os métodos e as classes do arquivo carregado podem ser usados:
# greeting.rb
def greeting(name)
"Hello, #{name}!"
end
# main.rb
require_relative 'greeting'
puts greeting("Ada")Executar ruby main.rb imprime Hello, Ada!: main.rb carrega greeting.rb e, em seguida, chama seu método.
O programa começa no arquivo que você executa, neste caso main.rb, e o Ruby o executa de cima para baixo. require_relative executa o outro arquivo nesse ponto, e somente na primeira vez: um segundo require_relative 'greeting' retorna false e não faz nada. Um nome só pode ser usado depois que o arquivo que o define tiver sido carregado:
# main.rb
# puts greeting("Bo") # NoMethodError: greeting.rb ainda não foi carregado
require_relative 'greeting' # executa greeting.rb, retorna true
require_relative 'greeting' # já carregado, retorna false
puts greeting("Bo")O layout usual é uma classe por arquivo, com o arquivo nomeado de acordo com a classe em snake_case: class Dog fica em dog.rb, class BankAccount em bank_account.rb. Nos desafios desta seção, main.rb contém o código de entrada/saída fornecido e começa com uma linha require_relative por arquivo, na ordem de carregamento: uma classe na qual outra classe se baseia é carregada primeiro.
dog.rb # class Dog ... end
bank_account.rb # class BankAccount ... end
functions.rb # métodos auxiliares
main.rb # linhas require_relative, depois o código de entrada/saídaO que um arquivo compartilha depende do tipo de nome. Métodos definidos com def no início de um arquivo, classes e constantes podem ser usados por todos os arquivos carregados depois dele. Uma variável local pertence apenas ao próprio arquivo:
# settings.rb
limit = 3 # variável local: somente settings.rb a vê
MAX_ITEMS = 3 # constante: visível após o carregamento
def limit_text
"at most #{MAX_ITEMS}"
end
# main.rb
require_relative 'settings'
puts limit_text # at most 3
puts MAX_ITEMS # 3
# puts limit # NameError: variável local indefinidaDesafio
FácilO programa tem dois arquivos. main.rb carrega greeting.rb, lê os nomes e imprime o resultado de greeting(name). Complete greeting em greeting.rb para que ele retorne Hello, Ada! para o nome Ada ou Hello, friend! quando o nome estiver vazio.
Seu código deve estar em greeting.rb. main.rb contém o código fornecido de entrada/saída e não pode ser editado.
Experimente você mesmo
require_relative 'greeting'
# Código de entrada/saída fornecido: mantenha-o como está
input = []
while (line = gets)
input << line.chomp
end
input.each { |name| puts greeting(name) }
Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Programação orientada a objetos
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesVariáveis de InstânciaMétodos e selfto_s e inspectRevisão - Cartão da Biblioteca4Encapsulamento
Métodos privadosMétodos protegidosSetters privadosProtegendo o estadoRevisão - Máquina de venda automática7Polimorfismo e Duck Typing
PolimorfismoDuck TypingMétodos Abstratoscase e ClassesRevisão - Métodos de Pagamento2Acessores e self
Leitores e GravadoresSetters Personalizadosself nos MétodosIdentidade e IgualdadeRecapitulação - Lista de Contatos5Herança
SubclassesSobrescrita de métodosChamando superis_a? e ancestraisRevisão - Folha de pagamento da equipe8Métodos Especiais
Igualdade e hashMétodos de OperadoresIndexação e AdiçãoColeções PersonalizadasRevisão - Frações11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Compilador de Ruby online