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

Шрифт
Фон

dos princípios da orientação a objetos, guardar dados sobre uma determinada enti-

dade do nosso sistema.

A melhor maneira de provermos estas informações é no momento que criamos

nossos objetos do tipo Livro. Para isso existe o método initialize que é cha-

mado toda vez que executamos o método new afim de criar um objeto.

teste_e_design = Livro.new("Mauricio Aniche", 247, "123454")

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

Podemos até mesmo remover os parênteses:

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

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

30

Casa do Código

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

Quando criamos uma classe,

ganhamos automaticamente um método

initialize default, para que o objeto possa ter suas informações inicializadas.

Como queremos passar dados para inicializar nosso objeto de uma maneira

diferente, no caso passando o nome do autor, número de páginas e ISBN, devemos

implementar nosso próprio método initialize em nossa classe Livro:

class Livro

def initialize(autor, numero_de_paginas, isbn)

end

end

Sobrescrevemos o método initialize default, criando um método cujo

nome deve ser initialize. O método initialize é um método especial do

Ruby, invocado pelo Livro.new para criar um novo objeto. Nesse momento, o

Ruby aloca espaço em memória e depois invoca o método initialize passando

os parâmetros necessários para criar o objeto.

Agora vamos imaginar que existem alguns livros que não possuem o atributo

isbn, o natural seria omitir o valor do isbn:

teste_e_design = Livro.new "Mauricio Aniche", 247

Isso não funciona, pois para a linguagem Ruby, a aridade do método é impor-

tante, ou seja, devemos passar exatamente a quantidade de argumentos definido no

método initialize.

Se pensarmos em linguagens como Java, podemos definir um outro método

initialize que recebe apenas o nome do autor e o número de páginas, recurso

conhecido como sobrecarga :

class Livro

def initialize(autor, numero_de_paginas, isbn)

end

def initialize(autor, numero_de_paginas)

end

end

Mas isso também não funcionará, pois o interpretador do Ruby considera apenas

o último método

definido na classe. Ruby não suporta sobrecarga. Para essa situação,

a linguagem suporta o uso de argumentos com valores padrão:

31

3.1. A definição da classe Livro

Casa do Código

class Livro

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

end

end

Quando declaramos o argumento isbn = "1", definimos que no momento da

inicialização dos objetos do tipo Livro, podemos omitir o último argumento:

Livro.new "Lucas Souza", 198

O valor do argumento isbn é 1.

Agora vamos inverter a ordem dos argumentos do método initialize, colo-

cando o atributo isbn antes do atributo numero_de_paginas e vamos também

imprimir os valores de cada um dos argumentos:

class Livro

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

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

end

end

Livro.new "Lucas Souza", 200

E o resultado é:

Autor: Lucas Souza, ISBN: 1, Páginas: 200.

Veja que o Ruby é esperto e consegue atribuir o valor 200 ao atributo

numero_de_paginas e não ao atributo isbn. Isso ocorre porque a linguagem

Ruby possui três tipos de argumentos:

Obrigatórios;

Com valores padrão;

Opcionais.

Vimos dois deles até o momento: Obrigatório e com valores padrão. Veremos

sobre os atributos opcionais nos próximos capítulos. Mas vamos ao que interessa,

como o Ruby consegue descobrir para qual atributo deve atributo os valores da cha-

mada ao método initialize?

Quando um método recebe a chamada, o interpretador divide a atribuição dos

valores em alguns passos. Primeiro ele procura todos argumentos obrigatórios e

32

Casa do Código

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

associa os valores a estes, caso não encontre valor para algum destes atributos um

erro do tipo ArgumentException acontece. Em seguida, se ainda existirem valo-

res sobrando, estes são atribuídos aos argumentos default que existirem no método.

Caso sobre apenas 1 valor, e existirem dois argumentos com valores default, o Ruby

atribuirá o valor restante para o primeiro argumento com valor default.

3.2

Crie a estrutura do projeto

O código final do projeto que será construído foi disponibilizado no meu github:

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

Agora, é importante que seja criada a estrutura básica do projeto, que facilitará a

alteração das classes que serão criadas ao longo dos capítulos. O ideal é que somente

os testes sejam feitos utilizando o IRB e todas as outras classes e códigos fiquem

dentro do projeto.

Crie uma pasta chamada loja_virtual em um diretório de sua preferência

e dentro deste diretório loja_virtual crie uma pasta chamada lib. Dentro do

diretório lib serão criados os arquivos que representam as classes do sistema, como

por exemplo, a classe Livro que podemos transferir para lá agora mesmo.

Crie um arquivo chamado livro.rb dentro da pasta lib com o conteúdo

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

0
Шрифт
Фон

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