12/08/2018, 16:40

10 Tính năng mới trong Ruby 2.5

1. Nhiều methods module được public Các module#attr, attr_accessor, attr_reader, attr_writer, define_method, alias_method, undef_method và remove_method đều được public. Ví dụ: # Ruby v2.4 Integer.alias_method :plus, :+ #=> NoMethodError: private method `alias_method' called for ...

1. Nhiều methods module được public

Các module#attr, attr_accessor, attr_reader, attr_writer, define_method, alias_method, undef_method và remove_method đều được public. Ví dụ:

# Ruby v2.4
Integer.alias_method :plus, :+
#=> NoMethodError: private method `alias_method' called for Integer:Class

# Cách sửa 1:
Integer.send(:alias_method, :plus, :+)

# Cách sửa 2:
class Integer
  alias_method :plus, :+
end

# Ruby v2.5
Integer.alias_method :plus, :+

2. string#start_with? hỗ trợ regexp

Cải tiến này giúp ngăn ngừa một số sai lầm phổ biến khi thao tác với chuỗi trong ruby. Ví dụ:

# Kiểm tra một chuỗi có bắt đầu với chữ thường không

string.match?(/^[a-z]/) # BAD!
string.match?(/A[a-z]/) # Good

Như ở trên, dấu ^ có nghĩa là bắt đầu của một line, không phải bắt đầu của một chuỗi( bắt đầu của một chuỗi là A) Dùng method String#start_with? thì sẽ ngăn ngừa được lỗi trên

# Ruby v2.5
string.start_with?(/[a-z]/) # Also good

3. Cải tiến binding.irb

Trong vài năm gần đây, các công cụ dành cho việc debug trong Ruby của lập trình viên đa phần là pry, byebug,... Từ ruby 2.5 chúng ta có 2 cải tiến trong thư viện nhằm thu hẹp vấn đề đó

  • require 'irb' không còn cần trong code ruby của bạn nữa
  • mã nguồn quanh binding.irb ngoài ra còn được hiển thị lúc startup Ví dụ:
# Ruby v2.4

# test.rb:
require 'irb'
def test
  binding.irb
end
test

# Chạy file yields:
irb(main):001:0>

# Ruby v2.5:
# test.rb:
def test
  binding.irb
end
test

# Chạy file yields:
From: test.rb @ line 2 :

    1: def test
 => 2:   binding.irb
    3: end
    4: test

irb(main):001:0>

4. Interger.sqrt đã được thêm vào Ruby 2.5

Đôi khi trong thuật toán, bạn cần tìm "số nguyên lớn nhất bé hơn sqrt(n)". Ví dụ, một thuật toán đơn giản để kiểm tra n có phải là số nguyên tố bằng cách thử chia n cho tất các số nguyên tố cho đến sqrt(n). Thao tác này bây giờ có thể thực thi như sau:

# Ruby v2.4
Math.sqrt(4) #=> 2.0
Math.sqrt(4).to_i #=> 2

Math.sqrt(10) #=> 3.1622776601683795
Math.sqrt(10).to_i #=> 3

# Ruby v2.5
Integer.sqrt(4) #=> 2
Integer.sqrt(10) #=> 3

5. String#casecmp và casecmp? bây giờ trả về nil với các đối số không phải là chuỗi thay vì raise một TypeError

# Ruby v2.4
"foo".casecmp 123
#=> TypeError: no implicit conversion of Integer into String

# Ruby v2.5
"foo".casecmp 123
#=> nil

6. Loại bỏ thư viện mathn.rb

Mathn là một thư viện khá bất thường, Nó không chỉ thêm vào mà còn làm thay đổi hành vi của Integers.

1/3 # => 0
(1/3).class #=> Integer

# Trong Ruby v2.5, dòng này sẽ `raise LoadError: cannot load such file -- mathn`
# (Trừ khi bạn cài thêm gem `mathn`.)
require 'mathn'
1/3 # => (1/3)
(1/3).class #=> Rational

7.Mã hóa template file mặc định được thay đổi từ ASCII-8BIT sang UTF-8 trong erb

8. Hash#slice đã được thêm

# Ruby v2.5
{a: 1, b: 2, c: 3}.slice(:a, :b)
#=> {:a=>1, :b=>2}

9. Net::HTTP::STATUS_CODES

Những status code sau đã được thêm vào Ruby phiên bản 2.5

# Ruby v2.5
require 'net/http/status_codes'
Net::HTTP::STATUS_CODES
{
  # ...
  208 => 'Already Reported',
  308 => 'Permanent Redirect',
  421 => 'Misdirected Request',
  506 => 'Variant Also Negotiates',
  508 => 'Loop Detected',
  510 => 'Not Extended',
  # ...
}

10. Unicode 10.0 support

Ruby 2.5 đã được cập nhật để hỗ trợ các ký tự mới Những ký tự mới bao gồm, ký hiệu Bitcoin và 56 emojis mới.

0