Ruby good-practice

Hi, I'm fairly new to Ruby (3 weeks) and I always find my code for my
little projects to be awefully cluttered and excessive. Also, I'm never
sure when to use what. I'm sure a lot of this comes with practice and
experience, but it would be nice if someone could give me some general
pointers for good-practice or link me to a site that already has some
tips. I don't want to get too deep into my bad practices and habits. =)

Here's just a sample off the top of my head:
1) What's the stance on global variables? When to use them, if at all?
2) Two arrays that have related info. (i.e. a[0] relates to b[0]) or one
hash?
3) If I'm storing data and know I need to collect statistics on that
data,
   should I store everything and then iterate through them to capture
stats. or
   store and collect simultaneously?
etc....

I guess what I'm looking for is what's common practice out there in the
professional world. Sometimes I write 100 lines of code and find someone
else implemented the same thing in 3 lines. =(

Anyway, anything would help! THANKS!

···

--
Posted via http://www.ruby-forum.com/.

1) What's the stance on global variables? When to use them, if at all?

AFAIK try not using them (except if they are really needed).

2) Two arrays that have related info. (i.e. a[0] relates to b[0]) or one
hash?

A Hash, of course (IMHO).

Regards.

···

El Martes, 1 de Julio de 2008, Justin To escribió:

--
Iñaki Baz Castillo

Iñaki Baz Castillo wrote:

1) What's the stance on global variables? When to use them, if at all?

AFAIK try not using them (except if they are really needed).

Agreed. Prefer constants, class variables, then global variables, in
that order.

2) Two arrays that have related info. (i.e. a[0] relates to b[0]) or one
hash?

A Hash, of course (IMHO).

If the problem domain prefers arrays, you can iterate them using
Array#zip:

a.zip(b).each {|ai,bi| ... } # ai is a[i], bi is b[i], where i = 0 to
max(a,b)

Always use data structures that best suit the problem domain, IMHO.

···

El Martes, 1 de Julio de 2008, Justin To escribió:

--
Posted via http://www.ruby-forum.com/\.

Thanks, very helpful. How about using 'begin...rescue...ensure...end'.
Should I use this everywhere in my code and for every program I do? Or
is this only for debugging?

···

--
Posted via http://www.ruby-forum.com/.

Some methods don't return "false" when they fail (for example read IO class).
But they generate exceptions (different exceptions for each kind of failure).

For example, if you are handling a TCP connection and try to send a message,
if it fails you'd like to know the cause:
  - TCP connection closed.
  - ICMP error.
  - ...

Maybe TCPSocket#puts method return a different exception in case of failure
for the above cases (is just an example), and this info can be very useful
for you.

So, sometimes is more useful to match exceptions instead of getting the return
value of a method.

Regards.

···

El Martes, 1 de Julio de 2008, Justin To escribió:

Thanks, very helpful. How about using 'begin...rescue...ensure...end'.
Should I use this everywhere in my code and for every program I do? Or
is this only for debugging?

--
Iñaki Baz Castillo