Ruby is constantly growing
Version 2.7 revolves around changes to new features and methods.
Expected release of the revised version on December 25, 2019
According to Matz (Yukihiro Matsumoto – the creator of Ruby), this is the last version 2.x before we welcome version 3.0 next year
Before waiting for the release of 2.7, let’s find out some of the changes and features that have been publicized in this version !!!
1.Enumerable # tally
This is a new Ruby method, which counts all the elements in an array and returns a hash
with their count.
You can do this yourself, but this tally
method saves you the work.
For example:
1 2 3 4 | %w(a a a b b c).tally # {"a"=>3, "b"=>2, "c"=>1} |
It is very useful, isn’t it?
2.Numbered Parameters For Blocks (Experimental)
This is an interesting new feature, it is a default name for the parameters in a block
.
For example with a simple block
:
1 2 | [1,2,3].each { |n| puts n } |
|n|
As a parameter, how can you define and use it?
But what if we give them default names?
It’s one of the features that Ruby 2.7 brings, albeit an experimental feature, which can save us a lot of code.
For example:
1 2 3 | [1,2,3].each { puts _1 } # 1 |
With _1
being the first parameter, we can also use _2
for the second parameter and _3
for the third parameter.
Note that there will be no value of _0
Previously, Matz had intended to name the above variable @1
, but since it looked quite similar to the instance variable, after discussion, it was replaced with _1
3.Array # intersection
New method but not a new function
It is like being an alias
Ruby 2.6 previously introduced the Array’s #union
& #difference
methods, in order to accommodate the brevity #|
and # -
.
But it lacks the #intersection method, we only know it with a shorter syntax that is &
(find the same elements between 2 arrays)
For example
1 2 3 4 5 6 | [1, 2, 3].intersection([2, 3, 4]) # [2, 3] [1, 2, 3] & [2, 3, 4] # [2, 3] |
4.Enumerable # filter_map
filter_map
is a combination of filter
and map
methods (As the name implies)
You can do this in 2 ways:
1 2 3 4 | (1..8).select(&:even?).map { |n| n ** 2 } # OR (1..8).map { |n| n ** 2 if n.even? }.compact |
We are inclined toward the first way, because it is explicitly easier to visualize
And for now, ruby 2.7 will do it with filter_map
1 2 3 | (1..8).filter_map { |n| n ** 2 if n.even? } # [4, 16, 36, 64] |
Simple is not it
Besides, there are a few things you should know
That is filter_map
is not the same as map + compact
, because it will remove both false object
and compact
does not
5.Enumerator # produce
This is an interesting new method, but it requires some of your creativity if you want to make the most of your skin
What is Enumerator#produce
???
As suggested by the feature:
“This method produces an infinite sequence where each next element is calculated by applying the block to the previous element.”
Meaning it will create an infinite sequence with no stops
For example:
1 2 3 | Enumerator.produce(1, &:next).take(5) # [1, 2, 3, 4, 5] |
In the above example, it doesn’t matter if you want to get 10 take(10)
or 10000 take(10000)
elements
1
is its initialization value
And &:next
is the method called to generate the next element in the string
6.IRB Gets a Face Lift?
Recently, IRB has received a lot of attention, and Ruby 2.7 continues to add it.
We’re getting:
We will have:
- Multi-line editing
- Write multi-line syntax (Multi-line editing)
- Syntax Highlighting
- Integrate more Ruby Documents
- Command history is on by default
- Auto-completion is enabled by default
This is a big change, it is so large that a message will appear if you start installing irb with Ruby 2.7.
7.Ruby Pattern Matching (Experimental)
A feature that is always required and it came in version 2.7 named Pattern Matching
It is marked as experimental.
As far as I understand, pattern matching
same as regular expressions
, but for data structures (Array / Hash).
For example:
1 2 3 | [1,2,3] in [a,b,c] # true [1,2,3] in [a] # false |
If the match succeeds, the variable names a
will become local, and you can access it.
Example with hash:
1 2 3 4 5 6 | { a: 1, b: 2, c: [] } in { a: a, b: b, c: [] } # true p a # 1 |
Keyword is in
It’s easy to understand, isn’t it !!
8. Summary
Above are the latest updates on the Ruby programming language
Hopefully this article will give everyone an overview before the 2.7 release
Thanks for watching
References: https://www.rubyguides.com/2019/12/ruby-2-7-new-features/