Best Practice Advise for a Total Ruby Beginner

Discussion in 'Ruby' started by cros, Dec 8, 2005.

  1. cros

    cros Guest

    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
    cros, Dec 8, 2005
    #1
    1. Advertising

  2. On Dec 8, 2005, at 15:17, cros wrote:
    >
    > 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.
    Matthew Smillie, Dec 8, 2005
    #2
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Mako
    Replies:
    2
    Views:
    338
  2. sarmin
    Replies:
    1
    Views:
    297
    BW Glitch
    Dec 4, 2003
  3. INTP56

    Total Beginner Question

    INTP56, Feb 3, 2009, in forum: ASP .Net
    Replies:
    7
    Views:
    455
    Alexey Smirnov
    Feb 5, 2009
  4. Colin Higwell

    Total newbie question: Best practice

    Colin Higwell, Nov 29, 2011, in forum: Python
    Replies:
    6
    Views:
    175
    Pedro Henrique G. Souto
    Nov 30, 2011
  5. oldyork90
    Replies:
    1
    Views:
    143
    Jeremy J Starcher
    Sep 10, 2008
Loading...

Share This Page