Ruby good-practice

J

Justin To

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!
 
I

Iñaki Baz Castillo

El Martes, 1 de Julio de 2008, Justin To escribi=C3=B3:
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.




=2D-=20
I=C3=B1aki Baz Castillo
 
S

Suraj Kurapati

Iñaki Baz Castillo said:
El Martes, 1 de Julio de 2008, Justin To escribió:


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, bi is b, where i = 0 to
max(a,b)

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

Justin To

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

Iñaki Baz Castillo

El Martes, 1 de Julio de 2008, Justin To escribi=C3=B3:
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?

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

=46or example, if you are handling a TCP connection and try to send a messa=
ge,=20
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=
=20
for the above cases (is just an example), and this info can be very useful=
=20
for you.

So, sometimes is more useful to match exceptions instead of getting the ret=
urn=20
value of a method.

Regards.

=2D-=20
I=C3=B1aki Baz Castillo
 

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

Forum statistics

Threads
473,994
Messages
2,570,223
Members
46,815
Latest member
treekmostly22

Latest Threads

Top