Menu
Coddy logo textTech

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ída

O 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 indefinida
challenge icon

Desafio

Fácil

O 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) }
quiz iconTeste seus conhecimentos

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

Pratique por conta própria: Compilador de Ruby online