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

Шрифт
Фон

uma classe que podemos chamar de Biblioteca, e quando houver a necessidade

de mudarmos de Array para alguma outra estrutura, faremos em apenas um lu-

gar. Adicione a definição da classe Biblioteca dentro de um arquivo chamado

biblioteca.rb dentro do diretório lib:

class Biblioteca

def initialize

@livros = []

end

def adiciona(livro)

@livros << livro

end

end

Agora para guardar os livros que criamos, não vamos criar um Array e apendar

os valores diretamente nele. Criaremos um objeto do tipo Biblioteca e chama-

remos o método responsável por adicionar novos livros na biblioteca. Porém, para

testar a classe Biblioteca é necessário carregar o arquivo que contém sua defini-

ção:

require File.expand_path('lib/livro')

require File.expand_path('lib/biblioteca')

Ao passar do tempo, os arquivos necessários para efetuar os testes serão um

maior número. Para não dificultar os testes, vamos criar um único arquivo que fará o

require de todos os outros. Vamos chamá-lo de loja_virtual.rb e adicioná-

lo no diretório lib da pasta loja_virtual. Dentro dele faremos o carregamento

dos arquivos biblioteca.rb e livro.rb:

50

Casa do Código

Capítulo 4. Estruturas de dados

require File.expand_path('lib/livro')

require File.expand_path('lib/biblioteca')

Agora para efetuar os testes basta executar um único require, do arquivo

loja_virtual.rb:

require File.expand_path('lib/loja_virtual')

E executar os testes da classe Biblioteca:

biblioteca = Biblioteca.new

teste_e_design = Livro.new "Mauricio Aniche", "123454", 247, 70.5

web_design_responsivo = Livro.new "Tárcio Zemel", "452565", 189, 67.9

biblioteca.adiciona teste_e_design

biblioteca.adiciona web_design_responsivo

Se precisarmos acessar quais são os livros que existem dentro da nossa biblioteca,

basta expor a variável @livros através do attr_reader:

class Biblioteca

attr_reader :livros

def initialize

@livros = []

end

def adiciona(livro)

@livros << livro

end

end

E para acessar as variáveis, podemos chamar o método

livros na

Biblioteca:

biblioteca = Biblioteca.new

teste_e_design = Livro.new "Mauricio Aniche", "123454", 247, 70.5

web_design_responsivo = Livro.new "Tárcio Zemel", "452565", 189, 67.9

biblioteca.adiciona teste_e_design

51

4.3. Percorrendo meu array

Casa do Código

biblioteca.adiciona web_design_responsivo

p biblioteca.livros

# => [Autor: Mauricio Aniche, Isbn: 1, Páginas: 247,

Autor: Tárcio Zemel, Isbn: 1, Páginas: 189]

4.3

Percorrendo meu array

No capítulo 2, aprendemos algumas estruturas de controle, entre elas o for, que

serve para iterarmos sobre ranges, e também coleções como o Array. O método

livros do objeto biblioteca, retorna todos os livros em formato de Array. Para

acessar cada livro deste array, basta iterarmos através do for:

biblioteca = Biblioteca.new

# popula a biblioteca

for livro in biblioteca.livros do

p livro.valor

end

# => 70.5

# => 67.9

4.4

Como separar os livros por categoria: traba-

lhe com Hash

A medida que nossa biblioteca cresce, precisamos separar os livros dentro da bibli-

oteca por categorias. Dessa forma, o primeiro passo para fazermos essa separação é

adicionarmos um atributo chamado categoria à classe Livro:

# coding: utf-8

class Livro

attr_accessor :valor

attr_reader :categoria

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

categoria)

@autor = autor

@isbn = isbn

52

Casa do Código

Capítulo 4. Estruturas de dados

@numero_de_paginas = numero_de_paginas

@valor = valor

@categoria = categoria

end

def to_s

"Autor: #{@autor}, Isbn: #{@isbn},

Páginas: #{@numero_de_paginas}, Categoria: #{@categoria}"

end

end

A categoria do livro será um Symbol, como:

:ruby, :testes, :html,

:javascript,

:ios etc. Os livros que criamos anteriormente recebem um ar-

gumento a mais, contendo a sua respectiva categoria:

teste_e_design = Livro.new "Mauricio Aniche", "123454", 247, 60.9,

:testes

puts teste_e_design.categoria # => :testes

Agora que cada livro possui sua categoria, vamos adaptar nossa classe

Biblioteca para guardá-los. Dessa forma, a classe Biblioteca terá a organi-

zação de categorias.

Os arrays guardam os elementos sequencialmente e não existe nenhuma divisão

destes elementos. Precisamos de uma estrutura que suporte este tipo divisão, um

número N de objetos em um determinado container, sendo possível termos vários

containers também.

Vamos utilizar um Hash, estrutura que guarda sempre uma chave (identificador

único, que geralmente é um símbolo) e um valor (que pode ser qualquer tipo de

objeto Ruby). Sua inicialização é feita utilizando {}:

teste_e_design = Livro.new "Mauricio Aniche", "123454", 247, 60.9,

:testes

web_design_responsivo = Livro.new "Tárcio Zemel", "452565", 189, 70.9,

:web_design

hash = {"123454" => web_design_responsivo,

"452565" => web_design_responsivo}

O hash acima possui dois containers, um cujo identificador é a

String

"123454", que corresponde ao isbn do objeto teste_e_design, e outro

53

4.4. Como separar os livros por categoria: trabalhe com Hash

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

0
Шрифт
Фон

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