0

Tổng quan về một số tính năng mới của Ruby 2.6.0

Ruby 2.6.0 đã được phát hành gần đây thực sự có một số tính năng thú vị thu hút tôi khám phá về nó. Khi kiểm chứng một số tính năng chính tôi đã tìm thấy rất nhiều bản cập nhật mới thực sự hữu ích và hay ho. Vì vậy, tôi đã lên kế hoạch chia sẻ tất cả quan điểm của tôi về các tính năng chính của nó với bài viết này. Các bản cập nhật này bao gồm Infinite Ranges, Ruby 2.6 benchmark, Ruby 2.6 Infinite Hashes, Ruby 2.6 union, Ruby 2.6 filter, Ruby 2.6 Enumerable chain và nhiều hơn nữa.

Install version Ruby 2.6.0:

  1. Click vào link, nó sẽ tải xuống file zip cho bạn sau đó bạn có thể giải nén nó.
  2. Nếu bạn đang sử dụng rvm thì hãy sử dụng lệnh này để cài đặt “rvm install ruby-2.6.0”.

Các tính năng mới trong version Ruby 2.6.0

1. Infinite Ranges

Trong Ruby 2.6.0, chúng ta có thể sử dụng infinite ranges hoặc endless ranges. Trước 2.6 chúng ta có thể đạt được endless ranges với Float::INFINITY, trong Ruby 2.6.0, chúng ta có thể nhận được endless ranges trực tiếp như tôi hiển thị bên dưới:

(1..Float::INFINITY).step(2).take(10).map(&:to_i)
=> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

Trong Ruby 2.6.0

(1..).step(2).take(10)
=> [1, 3, 5, 7, 9, 11, 13, 15, 17, 19]

2. Merging Hash By Passing Multiple Hashes As Arguments

Trong các version trước, nếu chúng ta muốn merge nhiều giá trị băm vào một thì chúng ta cần sử dụng merge 2 lần như trong ví dụ dưới đây:

hash1  = { one: 1 }
hash2  = { two: 2 }
hash3 =  { three: 3 }
 
hash1.merge(hash2).merge(hash3)
=> {:one=>1, :two=>2, :three=>3}

Trong Ruby 2.6.0, chúng ta có thể có 2 giá trị băm như các đối số như dưới đây:

hash1.merge(hash2, hash3)
=> {:one=>1, :two=>2, :three=>3}

3. Bytes Method In Random Class

Ruby 2.6.0 giới thiệu method bytes trong class Random để nhận một số bytes ngẫu nhiên.

Chúng ta cũng có thể đạt được điều này trong các phiên bản cũ hơn với sự trợ giúp của method bytes trong class SecureRandom.

require 'securerandom'
SecureRandom.bytes(20)
=> "\n\x9D\r0\xA3\t\xF3m\xA5\xD19Nf~\xD4\xFC\xEC\aS\xB3"

Trong Ruby 2.6.0, bạn có thể sử dụng method Random.bytes nhanh hơn 8 lần so với SecureRandom.

Random.bytes(20)
=>  "\x16\".\xB9Mhe\x93\xC8\x90\x95\x92v\xBDE\n\x11\xF5\xD7:"

4. % in Ranges

Version này giới thiệu % trong Ranges, đây là alias của step và đây là một ví dụ để sử dụng nhiều điều trong ruby 2.6.0

((0..100) % 5).take(5)
=> [0, 5, 10, 15, 20]

Điều tương tự bạn có thể đạt được nó bằng cách sử dụng step như sau:

(0..100).step(5).take(5)
=> [0, 5, 10, 15, 20]

5. Union And Difference Methods In Array

Version này thêm 2 method mới trong Array là uniondifference đòi hỏi nhiều nỗ lực hơn để hoàn thành nó trong các phiên bản cũ hơn.

Bây giờ có thể dễ dàng thực hiện nó với điều này:

[1,3,6,8,10].difference([1,6])
=> [3, 8, 10]
 
[1,3,6,8,10].union([1,6,2,9])
=> [1, 3, 6, 8, 10, 2, 9]

6. to_h accepts block

Trong version cũ ta muốn thực hiên một số thao tác trên Hash thì chúng ta phải dử dụng mapto_hash. Ruby 2.6 chấp nhận method to_h cho block.

Trong version cũ:

a  = { b: 2, c: 3 }
a.map { |k,v| [k,  v+1] }.to_h
=> {:b=>3, :c=>4}

Trong Ruby 2.6:

a.to_h { |k,v| [k, v+1]}
=> {:b=>3, :c=>4}

Tương tự chúng ta cũng có thể sử dụng trong Ranges và Array

(1..10).to_h { |k| [k, k*2] }
=> {1=>2, 2=>4, 3=>6, 4=>8, 5=>10, 6=>12, 7=>14, 8=>16, 9=>18, 10=>20}

7. Filter Method In Array

Ruby 2.6.0 có thêm method filter trong Array hoạt động tương tự như select và cũng là alias của select.

[1,2,3,4].select {|a| a == 2}
=> [2]

Trong ruby 2.6.0

2.6.0 :105 > [1,2,3,4].filter {|a| a == 2}
=> [2]

8. Enumerable chain and + methods

Điều này sẽ trả về object Enumerable chain

Version cũ:

list = (1..3).each + (5..7) + (9..10)
=> #<Enumerator::Chain: [#<Enumerator::Chain: [#<Enumerator: 1..3:each>, 5..7]>, 9..10]>
2.6.0 :016 > list.to_a
=> [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12]

Trong ruby 2.6.0

(1..4).chain((6..9), [10, 12]).to_a
=> [1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12]

9. Handling Exceptions

Thông thường trong ruby, nó không thể chuyển đổi chuỗi thành số nguyên và ngay cả khi chúng ta cố gắng chuyển đổi, nó sẽ là 1 exception.

Integer("example")
ArgumentError (invalid value for Integer(): "example")

Ruby 2.6.0 gới thiệu thêm option exception làm đối số:

Integer("example", exception: false)
=> nil

Tương tự chúng ta cũng có thể thêm đối số exception vào Integer(), Float(), Rational(), Complex().

10. Arithmetic Sequence ‘first’ and ‘last’ methods

Trong Ruby 2.6.0, chúng ta có thể nhận được các phần tử đầu tiên và cuối cùng trong Arithmetic sequence(cấp số cộng).

(1..10).step(2).first
=> 1
2.6.0 :023 > (1..10).step(2).last
=> 9

Và cũng có thể so sánh 2 Arithmetic sequence, ví dụ:

(1..10).step(2) == (1..10).step(2)
=> true

Kết luận

Như vậy đó là 10 tính năng mới của Ruby 2.6.0, hi vọng có thể giúp ích cho bạn khi bạn cần :v

Link tham khảo: https://www.agiratech.com/ruby-2-6-0-released-overview-of-all-new-features-in-ruby-2-6-0/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí