mirror of
https://github.com/jbranchaud/til
synced 2026-01-17 22:18:01 +00:00
Add Destructure The First Item From An Array as a Ruby til
This commit is contained in:
@@ -10,7 +10,7 @@ pairing with smart people at Hashrocket.
|
|||||||
|
|
||||||
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
For a steady stream of TILs, [sign up for my newsletter](https://crafty-builder-6996.ck.page/e169c61186).
|
||||||
|
|
||||||
_1153 TILs and counting..._
|
_1154 TILs and counting..._
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -895,6 +895,7 @@ _1153 TILs and counting..._
|
|||||||
- [Defaulting To Frozen String Literals](ruby/defaulting-to-frozen-string-literals.md)
|
- [Defaulting To Frozen String Literals](ruby/defaulting-to-frozen-string-literals.md)
|
||||||
- [Define A Custom RSpec Matcher](ruby/define-a-custom-rspec-matcher.md)
|
- [Define A Custom RSpec Matcher](ruby/define-a-custom-rspec-matcher.md)
|
||||||
- [Define A Method On A Struct](ruby/define-a-method-on-a-struct.md)
|
- [Define A Method On A Struct](ruby/define-a-method-on-a-struct.md)
|
||||||
|
- [Destructure The First Item From An Array](ruby/destructure-the-first-item-from-an-array.md)
|
||||||
- [Destructuring Arrays In Blocks](ruby/destructuring-arrays-in-blocks.md)
|
- [Destructuring Arrays In Blocks](ruby/destructuring-arrays-in-blocks.md)
|
||||||
- [Disassemble Some Codes](ruby/disassemble-some-codes.md)
|
- [Disassemble Some Codes](ruby/disassemble-some-codes.md)
|
||||||
- [Double Splat To Merge Hashes](ruby/double-splat-to-merge-hashes.md)
|
- [Double Splat To Merge Hashes](ruby/double-splat-to-merge-hashes.md)
|
||||||
|
|||||||
60
ruby/destructure-the-first-item-from-an-array.md
Normal file
60
ruby/destructure-the-first-item-from-an-array.md
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
# Destructure The First Item From An Array
|
||||||
|
|
||||||
|
In true Ruby fashion, there are plenty of idomatic ways to get the first
|
||||||
|
item from an array.
|
||||||
|
|
||||||
|
One of the ways is with assignment destructuring of the array.
|
||||||
|
|
||||||
|
It is common to see assignment destructuring with tuples:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
> name, email = ['Liz', 'liz.lemon@nbc.com']
|
||||||
|
=> ["Liz", "liz.lemon@nbc.com"]
|
||||||
|
> name
|
||||||
|
=> "Liz"
|
||||||
|
> email
|
||||||
|
=> "liz.lemon@nbc.com"
|
||||||
|
```
|
||||||
|
|
||||||
|
If you only want the first element, try this:
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
> name, *rest = ['Liz', 'liz.lemon@nbc.com']
|
||||||
|
=> ["Liz", "liz.lemon@nbc.com"]
|
||||||
|
> name
|
||||||
|
=> "Liz"
|
||||||
|
> rest
|
||||||
|
=> ["liz.lemon@nbc.com"]
|
||||||
|
```
|
||||||
|
|
||||||
|
The first element is assigned to `name` and the remaining items in the array
|
||||||
|
are assigned to `rest`. That's because of the `*`.
|
||||||
|
|
||||||
|
I like to use this approach with an array-returning method.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
> def lookup_person(id)
|
||||||
|
['Liz', 'liz.lemon@nbc.com', id]
|
||||||
|
end
|
||||||
|
=> :lookup_person
|
||||||
|
> name, *rest = lookup_person(22)
|
||||||
|
=> ["Liz", "liz.lemon@nbc.com", 22]
|
||||||
|
> name
|
||||||
|
=> "Liz"
|
||||||
|
irb(main):013:0> rest
|
||||||
|
=> ["liz.lemon@nbc.com", 22]
|
||||||
|
```
|
||||||
|
|
||||||
|
This method works as expected when dealing with an empty array.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
> name, *rest = []
|
||||||
|
=> []
|
||||||
|
> name
|
||||||
|
=> nil
|
||||||
|
> rest
|
||||||
|
=> []
|
||||||
|
```
|
||||||
|
|
||||||
|
In all of these, `, *rest` is important because otherwise the statement will be
|
||||||
|
a standard variable assignment.
|
||||||
Reference in New Issue
Block a user