Những điều kỳ lạ về Ruby mà bạn nên biết
Bài đăng này đã không được cập nhật trong 7 năm
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