Reputation: 31
I'm relatively new to Ruby, so this is a pretty general question. I have found through the Ruby Docs page a lot of methods that seem to do the exact same thing or very similar. For example chars
vs split(' ')
and each
vs map
vs collect
. Sometimes there are small differences and other times I see no difference at all.
My question here is how do I know which is best practice, or is it just personal preference? I'm sure this varies from instance to instance, so if I can learn some of the more important ones to be cognizant of I would really appreciate that because I would like to develop good habits early.
Upvotes: 0
Views: 71
Reputation: 369468
I am a bit confused by your specific examples:
map
and collect
are aliases. They don't "do the exact same thing", they are the exact same thing. They are just two names for the same method. You can use whatever name you wish, or what reads best in context, or what your team has decided as a Coding Standard. The Community seems to have settled on map
.each
and map
/collect
are completely different, there is no similarity there, apart from the general fact that they both operate on collections. map
transform a collection by mapping every element to a new element using a transformation operation. It returns a new collection (an Array
, actually) with the transformed elements. each
performs a side-effect for every element of the collection. Since it is only used for its side-effect, the return value is irrelevant (it might just as well return nil
like Kernel#puts
does, in languages like C, C++, Java, C♯, it would return void
), but it is specified to always return its receiver.split
splits a String
into an Array
of String
s based on a delimiter that can be either a Regexp
(in which case you can also influence whether or not the delimiter itself gets captured in the output or ignored) or a String
, or nil
(in which case the global default separator gets used). chars
returns an Array
with the individual characters (represented as String
s of length 1, since Ruby doesn't have an specific Character
type). chars
belongs together in a family with bytes
and codepoints
which do the same thing for bytes
and codepoints
, respectively. split
can only be used as a replacement for one of the methods in this family (chars
) and split
is much more general than that.So, in the examples you gave, there really isn't much similarity at all, and I cannot imagine any situation where it would be unclear which one to choose.
In general, you have a problem and you look for the method (or combination of methods) that solve it. You don't look at a bunch of methods and look for the problem they solve.
There'll typically be only one method that fits a specific problem. Larger problems can be broken down into different subproblems in different ways, so it is indeed possible that you may end up with different combinations of methods to solve the same larger problem, but for each individual subproblem, there will generally be only one applicable method.
Upvotes: 4
Reputation: 1786
When documentation states that 2 methods do the same, it's just matter of preference. To learn the details, you should always start with Ruby API documentation
Upvotes: 0