Mais sobre classes

Classe Person

Agora vamos criar a classe Person (pessoa). Nós falamos que uma classe tem primeiro nome, último nome, e-mail e endereço.


class Person
    attr_accessor :first_name, :email
    attr_accessor :last_name, :address  
    def initialize
        @first_name = @last_name = @email = ""  
        @address = Address.new
    end
end
                       

A única coisa nova aqui é a linha "@address = Address.new". @address não é uma string, mas um objeto de Address, por isso temos que criá-la como tal.

Agora vamos criar uma pessoa :


sandy_addr = Address.new
sandy_addr.street = "324 Campus Dr."  
sandy_addr.city   = "College Park"

sandy = Person.new
sandy.first_name = "Sandy"
sandy.last_name  = "Koh"
sandy.address = sandy_addr
                       

Aviso que não estabeleça um state (estado), zip (CEP) ou um e-mail. Uma vez que todos os valores padrão forem "", estamos livres para criar um Address e um Person com informações incompletas. Podemos ainda chamá-la sandy.email sem problemas. Vamos receber apenas "" em troca.

Agora vamos acrescentar mais alguns comportamentos em Person. Vamos adicionar um método que retorna o nome completo da pessoa.


class Person
    def full_name
        @first_name + " " + @last_name  
    end
end

puts sandy.full_name

                       

Isso imprime na tela "Sandy Koh".

Imprimindo uma classe

Não seria bom se pudéssemos apenas digitar "puts address"? podemos fazer isso acontecer.

A função puts trabalha chamando Class#to_s e enviando o resultado ao terminal (lembra do Integer#to_s e amigos?) . Portanto, o que temos de fazer é definir um método Address#to_s.


class Address
    def to_s
        "    " + @street + "\n" + \
        "    " + @city   + "\n" + \
        "    " + @state  + ", " + @zip  
    end
end
                       

O que é "\ n"? Ele indica uma "nova linha". É o caráter que o seu teclado envia quando você pressiona a tecla "Enter". O "\" no final de cada linha garante que esta declaração seja lida como um todo. A string resultante é retornada.

Agora podemos digitar:


address.street = "23 St George St."  
address.city   = "Silver Spring"
address.state  = "MD"
address.zip    = "20465"

puts address
                       

Que imprime:


    23 St George St.  
    Silver Spring
    MD, 20465
                       

Exercícios

1- Escreva um método Person#to_s que imprima o nome (name), email, endereço (address) e telefone (phone). Use o método Address#to_s que escrevemos.

topo da página

<< Página Anterior | índice | Próxima Página >>
Apostilas de Ruby e RGSS

nossos tutoriais

navegue

livros recomendados