Souza Lucas - Ruby: Aprenda a programar na linguagem mais divertida стр 12.

Шрифт
Фон

atual que definimos no IRB:

class Livro

def initialize(autor, isbn = "1", numero_de_paginas)

puts "Autor: #{autor}, ISBN: #{isbn}, Pág: #{numero_de_paginas}"

end

end

Agora que a classe Livro foi colocada em um arquivo separado precisamos al-

terar a maneira que os testes desta classe serão feitos. Quando um IRB é aberto o

arquivo lib/livro.rb não é carregado automaticamente, você pode validar ten-

tando criar um objeto Livro abrindo um novo terminal:

Livro.new "Lucas Souza", 200

# => NameError: uninitialized constant Livro

Para carregar o conteúdo do arquivo lib/livro.rb é necessário utilizar o

método require da classe Kernel. O método require recebe como parâmetro

uma String que pode ser o nome do arquivo .rb que você deseja carregar. Se o

33

3.2. Crie a estrutura do projeto

Casa do Código

parâmetro não for o caminho absoluto do arquivo .rb o mesmo será procurado em

diretórios que estão definidos na constante $LOAD_PATH.

O arquivo lib/livro.rb não está em nenhum dos diretório listados em

$LOAD_PATH, que em geral, contém os diretórios onde estão os arquivos .rb

das classes core do Ruby. Sendo assim temos dois caminhos para fazer com que o

Ruby consiga carregar o arquivo que contém a classe Livro. O primeiro é adicionar

na

constante $LOAD_PATH, que é um objeto Array, o diretório lib do projeto

loja_virtual:

$LOAD_PATH << "caminho relativo do projeto loja_virtual/lib"

Ao executar este código, o require pode ser feito apenas com o nome do ar-

quivo da pasta lib que desejamos carregar:

require 'livro'

A segunda opção, e melhor na minha opinião, é carregar o arquivo passando o

seu caminho absoluto. Porém, isso pode ser um pouco custoso já que você pode

simplesmente resolver alterar o nome da pasta de loja_virtual para loja.

O ideal é utilizar o método expand_path da classe File que retorna o cami-

nho absoluto de um nome de arquivo passado como parâmetro, levando em con-

sideração o diretório onde a chamada do método é executado. Supondo que o

arquivo livro.rb esteja dentro da pasta lib, que por sua vez está dentro do

diretório '/home/lucas/loja_virtual' ao executar a chamada ao método

expand_path dentro deste diretório passando a String lib/livro o retorno do

método será '/home/lucas/loja_virtual/lib/livro':

# executando a partir do diretório /home/lucas/loja_virtual

puts File.expand_path("lib/livro")

# => "/home/lucas/loja_virtual/lib/livro"

Exatamente o diretório onde se encontra o arquivo livro.rb.

Agora para testar a classe Livro como fizemos na seção anterior, basta abrir um

novo IRB no diretório loja_virtual e invocar o método require passando o

caminho absoluto do arquivo livro.rb:

# executando a partir do diretório /home/lucas/loja_virtual

require File.expand_path("lib/livro")

# objeto Livro criado com sucesso

Livro.new "Lucas Souza", 200

34

Casa do Código

Capítulo 3. O começo da nossa aplicação

A partir de agora, todos as novas classes serão colocadas dentro de arquivos .rb

na pasta lib. E os testes serão feitos no IRB, lembrando que deve ser sempre aberto

a partir do diretório loja_virtual. E claro, é necessário carregar, utilizando o

método require, todas as classes que serão utilizadas no teste.

Outra dica importante: quando for necessário criar classes novas, haverá uma

indicação dos procedimentos que deverão ser feitos para que a mesma possa ser

testada. Quando houver alteração em classes já existentes, basta editar o conteúdo

da classe dentro de seu respectivo arquivo .rb. E lembre-se o projeto pode final

com a implementação completa pode ser encontrado no github:

https://github.com/lucasas/projeto-ruby

Encoding arquivos .R B

Os arquivos que contém as classes criadas em nosso sistema, ficarão

em arquivos .rb dentro de um diretório de sua preferência. Porém é

importante ressaltar que arquivos .rb possuem um encoding US-ASCII

por padrão. Caso seu código contenha qualquer caractere que não for

compatível com o ASCII, a interpretador Ruby será finalizado e acusará

o erro: invalid multibyte char (US-ASCII).

Se você quiser alterar o encoding padrão do arquivo .rb, basta adi-

cionar a seguinte linha do arquivo:

# encoding: utf-8

Neste exemplo, ajustamos o encoding do arquivo para UTF-8, que

permitirá que você use acentos e outros caracteres.

3.3

Defina os atributos de instância

Os parâmetros passados para o método initialize são na verdade variáveis lo-

cais, ou seja, assim que terminar a execução do método, as variáveis locais simples-

mente desaparecem.

Vamos precisar as informações do autor, número de páginas e ISBN para traba-

lhar com elas mais adiante nos nossos programas. Queremos que a informação dos

livros acompanhem o objeto que vai ser instanciado. Para resolver este problema

precisamos copiar o valor destes parâmetros para variáveis de instância de cada ob-

jeto. Este comportamento é muito comum quando criamos métodos construtores.

35

3.3. Defina os atributos de instância

Casa do Código

Então vamos copiar os valores dos parâmetros do método initialize para

Ваша оценка очень важна

0
Шрифт
Фон

Помогите Вашим друзьям узнать о библиотеке