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.