Classes and methods |
|
Implementing AddressBook |
Now let's create a Person class. We said that a person should have a first name, last name, email and address.
class Person attr_accessor :first_name, :email attr_accessor :last_name, :address def initialize @first_name = @last_name = @email = "" @address = Address.new end end |
The only thing new here is the "@address = Address.new" line. @address is not a string, but an Address object, so we must create it as such.
Now we can create a person:
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 |
Notice that we didn't put down a state, zip or an email. Since we default all values to "", we are free to creat an Address and a Person object with incomplete information. We can still call sandy.email without trouble. We will just get "" in return.
Now let's add some more behaviour to Person. Let's add a method that returns the full name of the person.
class Person def full_name @first_name + " " + @last_name end end puts sandy.full_name |
This prints "Sandy Koh".
Wouldn't it be nice if we could just type "puts address"? We can make that happen.
The puts function works by calling Class#to_s and sending the result to the terminal (remember Integer#to_s and friends?). So, what we need to do is define an Address#to_s method.
class Address def to_s " " + @street + "\n" + \ " " + @city + "\n" + \ " " + @state + ", " + @zip end end |
What's that "\n"? It indicates a "new line" character. It is the character that your keyboard sends when you press the "Enter" key. The "\" at the end of each line ensures that this is all read as one statement. The resulting string is returned.
Now we can type:
address.street = "23 St George St." address.city = "Silver Spring" address.state = "MD" address.zip = "20465" puts address |
Which prints:
23 St George St. Silver Spring MD, 20465 |
Write a Person#to_s method that prints the person's full name, email, address and phone. Use the Address#to_s method we just wrote.
Classes and methods |
|
Implementing AddressBook |