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ử .
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!