Incluindo Outros Arquivos
Ao escrever seus primeiros programas em Ruby, você costuma colocar todo seu código em um único arquivo. Mas, a medida que você cresce como programador Ruby, seus programas também crescerão e em um determinado ponto você perceberá que ter um único arquivo contendo todo o código
não será uma boa ideia. É mais fácil quebrar seu código em grupos lógicos e colocar cada grupo em um arquivo separado. Quando você começa a utilizar múltiplos arquivos, você precisa usar os métodos require (requerer) e load (carregar) (ambos métodos são “funções” globais definidas no Kernel, mas são usadas como palavras-chave da linguagem) que o ajudam a incluir outros arquivos em seu programa.
O método load inclui o arquivo fonte referenciado toda vez que o método é executado:
1 load 'nome_do_arquivo.rb'
O mais comumente usado require carrega o arquivo dado apenas uma vez:
1 require 'nome_do_arquivo'
require lhe dá acesso a muitas extensões e bibliotecas de programação empacotadas com a linguagem de programação Ruby – além de um número ainda maior de extensões e bibliotecas escritas independentemente por outros programadores e disponibilizadas para uso com o Ruby.
Note que quando você escreve require ‘nome_do_arquivo’ e não ‘nome_do_arquivo.rb’. Especificamente, extensões escritas em C são armazenadas em arquivos terminados por .so ou .dll. Para manter o processo transparante – isso é, para lhe poupar o trabalho de saber qual a extensão do arquivo que você quer usar (.rb e etc) – o método aceita uma palavra e então faz uma busca automática tentando todos os nomes de arquivo possíveis até que encontra o arquivo correspondente a extensão que você requisitou.
require(string) => true or false
O Ruby tenta carregar a biblioteca chamada string, retornando true (verdadeiro) em caso de sucesso. Se o nome do arquivo não for resolvido para um caminho absoluto, ele será procurado nos diretórios listados em $:. Se o arquivo tem a extensão “.rb”, ele é carregado como um arquivo fonte; se a extensão for “.so”, “.o” ou “.dll”, ou qualquer que seja a extensão de bibliotecas compartilhadas na plataforma em questão, o Ruby carregará a biblioteca compartilhada como uma extensão Ruby. Em caso contrário, o Ruby tenta adicionar “.rb”, “.so” e assim por diante ao nome do arquivo. O nome do novo recurso é adicionado ao array em $:.
NO RAILS: O Rails usa load ao invés de require, por exemplo, no modo de desenvolvimento – o que significa que se você está testando sua aplicação em um navegador e fazendo mudanças no código ao mesmo tempo, suas mudanças serão recarregadas, sobrescrevendo qualquer comportamento de caching por parte do servidor Web. Múltiplas chamadas a require no mesmo lugar não tem o mesmo efeito se a aplicação já leu o arquivo por completo.
Agora, vamos olhar para o exemplo de outra classe – p030motorcycle.rb
1 class MotoCicleta 2 def initialize(fabricante, cor) 3 # Variáveis de instância 4 @fabricante = fabricante 5 @cor = cor 6 end 7 def ligaMotor 8 if (@estado_motor) 9 puts 'O motor já está ligado' 10 else 11 @estado_motor = true 12 puts 'Motor ocioso' 13 end 14 end 15 end
Escrevemos outro programa p031motorcycletest.rb para testar a classe acima.
1 # p031motorcycletest.rb 2 require 'p030motorcycle' 3 m = MotoCicleta.new('Yamaha', 'vermelha') 4 m.ligaMotor
A partir da versão 1.9 do Ruby, é usado require_relative quando o local onde está o arquivo que desejamos carregar é relativo ao do arquivo que o está carregando (eles estão no mesmo diretório).
Este material tem como base o tutorial do RubyLearning.com de Satish Talim e foi traduzido por membros do GURU-SP com a permissão do autor.
Ajude o RubyLearning participando em algum dos cursos pagos ou fazendo uma doação para o projeto