Video transcript & code
Just a quick tip today. It's one of those things that I often forget, and so I hope that by making an episode about it, I'll finally remember it.
Like many languages, in Ruby we can fetch the first item in an array by using subscript zero.
shopping_list = [:eggs, :olives, :cheese, :salsa] shopping_list # => :eggs
Unlike a lot of those other languages, in Ruby there's an alternative to this syntax: the #first method.
shopping_list = [:eggs, :olives, :cheese, :salsa] shopping_list.first # => :eggs
What if we need the first two items in the array? For this I usually switch to square brackets.
shopping_list = [:eggs, :olives, :cheese, :salsa] shopping_list[0, 2] # => [:eggs, :olives]
But this isn't the only way to get the first two items. What I often forget is that
#first takes an optional argument: the number of elements to retrieve. Instead of the square brackets, we can use
#first with the argument 2 to get the first two elements.
shopping_list = [:eggs, :olives, :cheese, :salsa] shopping_list.first(2) # => [:eggs, :olives]
If there aren't enough elements in the array,
#first with an argument will return as many as it can.
shopping_list = [:eggs, :olives, :cheese, :salsa] shopping_list.first(5) # => [:eggs, :olives, :cheese, :salsa]
#first with an argument differs in an important way from first without an argument. Without an argument,
#first may return
nil if the array is empty. By contrast, when given an argument it will always return an array, even if that array is empty. This is consistent with subscript notation.
.first # => nil .first(1) # =>  [0,1] # => 
This example demonstrates, again, that the #first method takes a few more characters than subscripting. But there's just something about reading the word
first that helps me absorb the intent of code a few moments faster than I would given the equivalent subscript code. For that reason, I prefer to use
#first when I can.
And that's all for today. Happy hacking!