Computer >> Máy Tính >  >> Lập trình >> Ruby

9 tính năng mới trong Ruby 2.6

Một phiên bản mới của Ruby sắp ra mắt với các tính năng và cải tiến hiệu suất mới.

Bạn có muốn cập nhật những thay đổi không?

Hãy cùng xem!

Dãy vô tận

Ruby 2.5 và các phiên bản cũ hơn đã hỗ trợ một dạng dải vô tận (với Float::INFINITY ), nhưng Ruby 2.6 đưa điều này lên cấp độ tiếp theo.

Phạm vi vô tận mới trông như thế này:

(1..)

Điều này khác với một phạm vi thông thường vì nó không có giá trị kết thúc như (1..10) .

Ví dụ về cách sử dụng :

["a", "b", "c"].zip(1..)
# [["a", 1], ["b", 2], ["c", 3]]

[1,2,3,4,5][1..]
# [2, 3, 4, 5]

(1..).step(5).take(100)
# [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]

Bạn có thể nghĩ ra những ví dụ nào khác?

Enumerable ::ArithmethicSequence

Một loại đối tượng Enumerable mới đã được giới thiệu trong Ruby 2.6.

Tôi đang nói về Enumerable::ArithmethicSequence .

Hiện tại, có hai phương pháp cung cấp cho bạn một ArithmethicSequence :

  • Phạm vi # bước
  • # bước số

Điều gì đặc biệt về điều này?

Một ArithmethicSequence biết có bao nhiêu phần tử, phần tử đầu tiên và phần tử cuối cùng là gì.

Ví dụ :

(1..10).step(2).first
# 1

(1..10).step(2).last
# 9

first này &last các phương thức không khả dụng trước Ruby 2.6 và đó là lý do tại sao ArithmethicSequence tồn tại ngay bây giờ!

Một sự khác biệt khác :

(1..10).step(2) == (1..10).step(2)
# false - Ruby 2.5 (and older)

(1..10).step(2) == (1..10).step(2)
# true - Ruby 2.6

Các dãy số học có thể được so sánh với nhau trong 2.6.

Hợp nhất băm với nhiều đối số

Nếu bạn muốn hợp nhất nhiều hàm băm để có thể kết hợp chúng thành một…

Bạn có thể làm điều này :

a = { a: 1 }
b = { b: 2 }
c = { c: 3 }

a.merge(b).merge(c)
# {:a=>1, :b=>2, :c=>3}

Ruby 2.6 thêm một cách mới :

a.merge(b, c)
# {:a=>1, :b=>2, :c=>3}

Kết quả tương tự, nhưng bạn chỉ phải gọi phương thức một lần!

Tùy chọn Ngoại lệ Mới

Khi bạn sử dụng phương pháp chuyển đổi như Integer bạn sẽ nhận được một ngoại lệ nếu không thể chuyển đổi giá trị.

Ví dụ :

Integer("a")
# ArgumentError (invalid value for Integer(): "a")

Ruby 2.6 thêm một exception mới đối số từ khóa cho:

  • Số nguyên ()
  • Float ()
  • Rational ()
  • Phức tạp ()

Bạn có thể kiểm soát hoạt động của các phương pháp này bằng từ khóa này.

Ví dụ :

Integer("a", exception: false)
# nil

Random.byte

Nếu bạn cần một số byte ngẫu nhiên, Ruby 2.6 sẽ thêm một bytes mới phương thức đến Random lớp học.

Đây là một ví dụ :

Random.bytes(10)
# "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"

Đây không phải là chức năng hoàn toàn mới vì chức năng này luôn có sẵn thông qua securerandom mô-đun.

require 'securerandom'

SecureRandom.bytes(10)

Tại sao lại bận tâm với phương pháp mới này?

Random.bytes giao dịch bảo mật để lấy tốc độ, nhanh hơn gấp 8 lần so với SecureRandom .

Phạm vi #%

% mới phương thức đã được thêm vào Range trong Ruby 2.6.

Ví dụ :

((0..) % 2).take(5)

# [0, 2, 4, 6, 8]

Phương thức này tương đương với Range#step .

Tham số TracePoint #

TracePoint lớp giúp bạn theo dõi các sự kiện như lời gọi phương thức, định nghĩa lớp và luồng.

Ruby 2.6 thêm một parameters mới phương pháp.

Với phương thức mới này, bạn có thể in danh sách tham số cho phương thức đang được gọi.

Ví dụ :

TracePoint.trace(:call, :b_call, :c_call) do |tp|
  p [tp.event, tp.parameters]
end

def orange(a,b,c*)
end

orange(1,2,3)

Kết quả trong :

[:call, [[:req, :a], [:req, :b], [:rest, :c]]]

Heap tạm thời

Heap tạm thời là một cải tiến hiệu suất cho các đối tượng tồn tại trong thời gian ngắn nhằm giảm vấn đề phân mảnh bộ nhớ và các cuộc gọi chậm đến malloc.

Malloc là cách trình thông dịch Ruby (và hầu hết các chương trình C) yêu cầu bộ nhớ từ hệ điều hành.

Theo mục TIN TỨC, chúng tôi đang xem xét tốc độ tăng 6-7%.

Tôi đã chạy một số điểm chuẩn:

Có vẻ như cách này hiệu quả nhất khi tạo nhiều hàm băm nhỏ hơn 10 phần tử .

9 tính năng mới trong Ruby 2.6

Các hàm băm lớn hơn sẽ chậm hơn trong Ruby 2.6 (xem trước 3) dựa trên các kết quả này.

Các đối tượng khác có thể hưởng lợi từ Heap tạm thời :

  • Mảng
  • Cấu trúc
  • Đối tượng thông thường (từ các lớp bạn tạo)

Mảng # union &Mảng # chênh lệch

Hai phương pháp mới, union &difference được thêm vào Array lớp trong Ruby 2.6.

Ví dụ :

[1,2,3,4,5].difference([3])
# [1, 2, 4, 5]

[1,2,3,4,5].union([5,6,7])
# [1, 2, 3, 4, 5, 6, 7]

Các phương thức mới này có nhiều đối số.

Tóm tắt

Ruby 2.6 sắp ra mắt với các tính năng hữu ích mới giúp bạn viết mã tốt hơn trong thời gian ngắn hơn. Một tính năng mới khác liên quan đến hiệu suất, MJIT (Trình biên dịch Just-in-TIme dựa trên phương pháp) sẽ được đề cập trong một bài báo dành riêng.

Ruby 2.6 dự kiến ​​sẽ được phát hành vào ngày 25 tháng 12 năm 2018 .

Nếu bạn muốn cập nhật những thay đổi, cải thiện kỹ năng Ruby của mình và trở thành một nhà phát triển Ruby tuyệt vời, đừng quên tham gia bản tin Ruby của tôi ngay hôm nay.

Cảm ơn vì đã đọc!