Những điều kỳ lạ về Ruby mà bạn nên biết

Ruby là một ngôn ngữ tuyệt vời với rất nhiều điều thú vị mà bạn chưa từng gặp trước đó. Trong bài viết này mình sẽ giới thiệu cho các bạn một vài điểm thú vị đó.

1. Heredoc + Method

Nếu bạn muốn nhúng data vào chương trình của bạn hãy sử dụng heredoc. Ví dụ:

input = <<-IN
ULL
RRDDD
LURDL
IN

Đoạn mã trên sẽ trả về cho bạn một string. Nếu bạn muốn cắt đoạn tring đó thành một array chẳng hạn.

input = <<-IN.split
ULL
RRDDD
LURDL
IN

Ruby 2.3 còn cung cấp thêm cho bạn squiggly heredoc <<~ giúp xóa hết những khoảng trắng như là thụt vào đầu dòng.

2. Gọi một method bằng cách sử dụng dấu hai chấm

"abc"::size
# 3
 
[1,2,3,4,5]::size
# 5

3. Put với nhiều tham số

Một chức năng khá đơn giản nhưng lại cực kỳ hữu dụng trong một vài trường hợp

puts 1,2,3
1
2
3

4. Index vô hạn

words = ["abc", "foo"]
=> ["abc", "foo"]
words[0][0][0][0][0]
=> "a"
words[1][0][0][0][0]
=> "f"

Ở đây [] là một method của ruby và nó giữ và trả về một character hoặc một string

5. Cấu trúc lại tham số của block

Ta có 2 cách viết nhưng đều nhận được một kết quả như sau

a = [[1,2],[3,4]]
 
a.each do |(first, last), memo|
  # ...
end
a = [[1,2],[3,4]]
 
a.each do |sub_array, memo|
  first, last = sub_array
  # ...
end

Như ta thấy với cách viết đầu tiên chúng ta rút ngắn đi được một dòng code

6. Biến global đặc biệt

Khi bạn sử dụng một regular expression với các capture group thì Ruby sẽ thiết lập các biến global $1 cho group đầu tiên và lần lượt $2, $3 … cho các group tiếp theo.

Ngoài ra các biến này không thể trực tiếp gán được giá trị

$1 = 'test'
# SyntaxError: (eval):2: Can't set variable $1

7. Đặt dấu cách ở mọi chỗ

Bạn có thể đặt bao nhiêu dấu cách cũng được giữa object và method của nó. Ví dụ:

a = [1,2,3]
 
a    [0]
a .size
a   . empty?

8. Sử dụng method << nhiều lần

a = []
 
a << 1 << 2 << 3
 
# a = [1, 2, 3]

9. Begin và End

Bạn sẽ không thường xuyên gặp 2 keyword này. Chúng hay được dùng để viết một đoạn script để đưa ra một output. Ví dụ :

puts 123
 
BEGIN {
  puts "Program starting..."
}

Đoạn mã trên sẽ in ra Program starting... trước 123. Việc này thường không hữu ích đối với một hệ thống web

10. Redo

Một chức năng nữa mà bạn ít khi nghe đến nữa đó là redo. Nó cho phép bạn lặp đi lặp lại một action trong vòng lặp. Ví dụ :

10.times do |n|
  puts n
  redo
end

Nếu không sử dụng next hoặc break bạn sẽ có một vòng lặp vô hạn. Hãy cân nhắc trước khi bạn sử dụng nó.

Tổng kết

Phía trên tôi đã giới thiệu một vài điều thú vị về Ruby cũng như là các trick quay quanh nó. Mong những điều trên giúp ích cho các bạn. Xin cảm ơn


All Rights Reserved