1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Dúvida em código Ruby

Olá pessoal,

Estou começando à estudar Ruby, para, posteriormente partir para Rails.

Estou acompanhando a apostila da casa do código, do Lucas Souza, onde começamos a desenvolver um sistema básico de biblioteca.

Para melhor entendimento vou colar as duas classes que desenvolvemos até então:

A classe Livro, que recebe as informações sobre o livro:

class Livro
    def initialize (autor, isbn = "1", numero_de_paginas, 
    preco, categoria)
        @autor = autor
        @isbn = isbn
        @numero_de_paginas = numero_de_paginas
        @preco = preco
        @categoria = categoria
    end

    def to_s
    "Autor: #{@autor}, Isbn: #{@isbn}, Paginas: #{@numero_de_paginas}, Categoria: #{@categoria}"
    end

     attr_accessor     :preco
    attr_reader     :categoria

end

E a classe biblioteca, que armazena os livros adicionados até então:

class Biblioteca

    attr_reader :livros

    def initialize 
        @livros = []
    end

    def adiciona(livro)
        @livros << livro
    end
end

Até então ok, sem dúvidas.

Porém em um momento foi alterada a classe Biblioteca para receber uma hash como parâmetro, hash esta que contém o ISBN do livro:

class Biblioteca

    attr_reader :livros

    def initialize 
        @livros = {} #inicializa a classe com uma hash
    end

    def adiciona(livro)
        @livros[livro.categoria] ||= []
        @livros[livro.categoria] << livro
    end
end

Sendo assim, executando o código temos algo mais ou menos assim:

hobbit = Livro.new("J.R.R. Tolkien", "123456789", 300, 30.9, :fantasia)

hash = {"123456789" => hobbit}

puts hash["123456789"]

Retorno:

Autor: J.R.R. Tolkien, Isbn: 123454, Paginas: 300, Categoria: fantasia

O problema é que eu definitivamente não entendi o que é feito no método adiciona(livro) da classe Biblioteca.

Antes da alteração era adicionada as informações de objetos do tipo livro na variável livro que era uma array, sendo assim cada posição da array era um livro.

Porém com a adição das linhas

@livros[livro.categoria] ||= []
@livros[livro.categoria] << livro

não entendi muito bem o que é feito, não compreendi o que significam os parênteses e nem os argumentos dentro deles e a passagem ||=

Alguém poderia me esclarecer estas dúvidas?

Muito obrigado.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

1 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags ruby ou faça a sua própria pergunta.