Best Practice Advise for a Total Ruby Beginner

C

cros

Hey, I've just started running through the first edition of
"Programming Ruby" and I'm already enjoying this language. I'm not the
best programmer in the world (self-taught) so I'm coming here to ask
for advise. Here's the situation (simplified for example):

class Ticket
def initialize( id )
@id = id
@messages = Array.new(0)
end

def addMessage( message )
@messages << message #push message
@messages = @messages.sort { |a,b| a.created <=> b.created } #sort by
create time
end
end

class Message
def initialize( created )
@created = created
end

def created
@created
end
end

ticket = Ticket.new( 1 )
ticket.addMessage( Message.new( 2005 ) )
ticket.addMessage( Message.new( 1999 ) )

I found I had to make a method to access the "created" instance var in
the Message class in the sort block. I tried using a.@created and
b.@created but it threw a syntax error. So, my question: Is making a
method simply to access a var as in this case "good programming"?

Paul
 
M

Matthew Smillie

I found I had to make a method to access the "created" instance var in
the Message class in the sort block. I tried using a.@created and
b.@created but it threw a syntax error. So, my question: Is making a
method simply to access a var as in this case "good programming"?

Paul


Basically, yes. It's generally referred to as 'encapsulation' in
object-oriented circles. One big advantage that's often cited is
that if you change the internal representation of 'created' in
Message (say, to seconds since 1970 or something), you only change
the accessor method to maintain compatibility. If you directly
accessed the variable, you'd have to change every piece of code that
used Message to keep it compatible.

As I'm sure will be pointed out before I manage to send this off,
Ruby provides some shortcuts for making these methods:

class Message
attr :created
def initialize(created)
@created = created
end
end

'attr' is a method which adds accessor methods to the class for its
arguments. The arguments are symbols which correspond to variable
names you want the accessors for.

matt.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,755
Messages
2,569,537
Members
45,021
Latest member
AkilahJaim

Latest Threads

Top