+3

Những điều kỳ diệu về Ruby có thể bạn chưa biết

Ruby là một ngôn ngữ tuyệt vời với nhiều chi tiết thú vị mà có thể bạn chưa từng thấy trước đây. Dưới đây giới thiệu một số chi tiết thú vị đó. 1. Heredoc + Method Nếu bạn có một số dữ liệu mà bạn muốn nhúng vào chương trình của bạn, bạn có thể sử dụng "heredoc" như ví dụ bên dưới

input = <<-IN
ULL
RRDDD
LURDL
IN

Kết quả sẽ trả về 1 string. Nhưng nếu bạn muốn thực hiện một số xử lý như tách chuỗi thành một mảng, Ruby cho phép bạn sử dụng:

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

Mẹo: Ruby 2.3 đã giới thiệu "squiggly heredoc" <<~. Điều này sẽ loại bỏ tất cả các dấu cách sinh ra bởi các thụt đầu dòng, đây là một vấn đề phổ biến khi sử dụng heredocs cho văn bản. 2. Gọi phương thức bằng cách sử dụng dấu hai chấm

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

3. Hàm với nhiều đối số Khá đơn giản, nhưng có thể hữu ích trong một số tình huống.

puts 1,2,3
1
2
3

4. Lập chỉ mục vô hạn Ví dụ:

words = ["abc", "foo"]
#  ["abc", "foo"]
words[0][0][0][0][0]
# "a"

Điều này hoạt động bởi vì [] chỉ là một phương thức và nó giữ lại ký tự đầu tiên, cũng là một string. 5. Xóa cấu trúc các đối số Bạn muốn thoát khỏi một số biến địa phương? Bạn sẽ yêu thích thủ thuật này!

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

Điều này có hiệu quả tương tự như khi chúng ta thực hiện:

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

Nhưng nó tiết kiệm cho bạn một dòng mã 😃. 6. Các biến số toàn cục đặc biệt Khi bạn sử dụng một biểu thức chính quy (Regular Expression) với các pattern, nó sẽ đặt biến toàn cầu $1 vào pattern đầu tiên, $2 cho pattern thứ hai, v.v ... Các biến toàn cục này không hành xử như các biến bình thường. Chúng là các 'method-local' và 'thread-local', như được mô tả trong tài liệu. Ngoài ra chúng không thể được gán giá trị trực tiếp như các biến toàn cục thông thường.

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

7.Phương thức << với string Có những phương thức chuyển đổi trên chuỗi mà nó sẽ không thực hiện như những gì bạn mong đợi khi bạn sử dụng nó với 1 con số ...

"" << 97
# a

Nó giải thích 1 số như là một ký tự của bảng mã ASCII. Đây là một cách làm khác:

97.chr
# a

8. Ký tự chữ Điều này rất ít khi sử dụng

?a
# "a"
?aa
# Syntax error

9. Module RbConfig RbConfig là một mô đun không được ghi lại và nó chứa một số thông tin về cài đặt Ruby của bạn.

RbConfig.constants
[:TOPDIR, :DESTDIR, :CONFIG, :MAKEFILE_CONFIG]

Có một số thông tin hữu ích dưới RbConfig :: CONFIG (như cờ biên dịch, phiên bản ruby và hệ điều hành).

RbConfig::CONFIG['host_os']
# "linux-gnu"
 
RbConfig::CONFIG['ruby_version']
# "2.4.0"

10. Dấu cách, dấu cách ở mọi nơi! Bạn có thể đặt dấu cách nhiều như bạn muốn giữa một phương thức và đối tượng gọi phương thức đó.

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

Vâng, đây là cú pháp Ruby hợp lệ 😃 11.Vô hạn các hằng số lồng nhau Bạn có thể có một số lượng vô hạn các hằng số lồng nhau như sau:

String::String::Fixnum::Float

Lý do cái này hoạt động là do tất cả các hằng số cấp trên (được định nghĩa bên ngoài bất kỳ một lớp nào) được chứa trong lớp Object và mọi lớp thừa kế từ Object theo mặc định. Hãy thử Object.constants để biết thêm về những hằng số này. 12. Toán tử << Bạn có thể sử dụng toán tử << nhiều lần trong một lần gọi:

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

13. BEGIN & END Hai từ khóa mà bạn không nhìn thấy thường là BEGINEND. Những từ này bắt nguồn từ Perl / Unix, nơi thường viết các kịch bản ngắn để xử lý đầu ra từ các chương trình khác. Hãy xem một ví dụ về cách hoạt động này:

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

Mã này sẽ in"Program starting..." trước khi nó in 123. Nó có thể hữu ích nếu bạn đang viết các loại chương trình ngắn, nhưng có lẽ không phải là rất hữu ích trong các ứng dụng web. 14. Flip-Flop Tôi khuyên bạn nên tránh xa nó bởi vì nó có thể gây nhầm lẫn và hầu hết mọi người không quen thuộc với tính năng này. Nhưng nó có thể hữu ích để biết trong trường hợp bạn tìm thấy điều này trong code của người khác. Đây là cú pháp:

if (condition)..(condition)
  # do something
end

Ý tưởng là khi điều kiện đầu tiên là đúng, một "switch" sẽ bật lên và mọi thứ từ đó sẽ được đánh là đúng cho đến khi điều kiện thứ 2 là đúng. Ví dụ:

(1..20).each do |i|
  puts i if (i == 3)..(i == 15)
end
3
4
5
6
7
8
9
10
11
12
13
14
15
=> 1..20

Điều này in tất cả các số từ 3 đến 15, nhưng nếu bạn bỏ qua 15 nó sẽ tiếp tục in ra. 15. Từ khóa Redo Một từ khóa khác mà bạn thường không nhìn thấy là redo, điều này cho phép bạn lặp lại cùng một vòng lặp bên trong một vòng lặp ...

10.times do |n|
  puts n
  redo
end

Nhưng trừ khi bạn sử dụng next hoặc break nếu không bạn sẽ có một vòng lặp vô hạn. Vì vậy, tôi nghĩ bạn không nên sử dụng tính năng này.

Như vậy, bạn đã học được thêm về một vài mẹo mới mẻ của Ruby! Link tham khảo: http://www.blackbytes.info/2017/02/weird-ruby/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí