12/08/2018, 15:10

10 Weird Things About Ruby That You Should Know

Ruby là một ngôn ngữ tuyệt vời với nhiều điều thú vị mà có thể bạn chưa từng thấy. Trong bài viết này tôi sẽ đưa ra cho các bạn một số điều thú vị mà tôi thấy được. 1. Heredoc + Method Nếu bạn có một số dữ liệu, và bạn muốn nhúng vào chương trình, bạn có thể dùng "heredoc" input = < ...

Ruby là một ngôn ngữ tuyệt vời với nhiều điều thú vị mà có thể bạn chưa từng thấy. Trong bài viết này tôi sẽ đưa ra cho các bạn một số điều thú vị mà tôi thấy được.

1. Heredoc + Method

Nếu bạn có một số dữ liệu, và bạn muốn nhúng vào chương trình, bạn có thể dùng "heredoc"

input = << -IN
XBC
SSSS
QQQQ
IN

Đoạn code trên sẽ trả về một chuỗi. Nhưng bạn muốn xử lý chuỗi ở trên, ví dụ tách chuỗi trên thành mảng. Bạn có thể làm như sau:

input = << -IN.split
XBC
SSSS
QQQQ
IN

2. Call a Method Using Double Colon

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

3. Puts with Multiple Arguments

Khá đơn giản nhưng sẽ hữu ích trong 1 số tình huống.

puts 1,2,3
1
2
3

5. Special Global Variables

$1, $2 ... Các biến trên không giống với các biến ta thường gawph trong ruby. Chúng được gọi là ‘method-local’ & ‘thread-local’ Và được định nghĩa tại đây

6. Shovel Method on Strings

"" << 97
# a

Đoạn code trên lúc biên dịch sẽ được hiểu 97 là a, 1 ký tự của ASCII Hoặc 1 cách khác.

97.chr
# a

7. The RbConfig Module

RbConfig là một module không có document và nó chưa một số thông tin về bản cài đặt ruby của bạn.

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

Hoặc

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

8. Spaces, Spaces Everywhere!

Bạn có thể để bao nhiêu khoảng trắng cũng được vào giữa method và object.

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

Và vẫn đảm bảo syntax của ruby.

8. Chaining the Shovel Operator

Có thể sử dụng << nhiều lần.

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

9. Flip-Flop

Tôi nghĩ tính năng này khá lạ so với hầu hết mọi người, và tôi khuyên bạn nên tránh sử dụng nó vì nó có thể dễ gây nhầm lẫn. Nhưng nó rất có ích trong trường hợp bạn phải đọc hiểu code người khác.

(1..20).each do |i|
  puts i if (i == 3)..(i == 15)
end

Đoạn code trên sẽ in ra tất cả các số từ 3 đến 15

10. Redo Keyword

Một từ khác mà bạn hiếm khi thấy đó là redo.

10.times do |n|
  puts n
  redo
end

Đoạn code trên sẽ dẫn tới là lặp vô hạn nếu chúng ta không sư dụng break or next.

Nguồn dịch http://www.blackbytes.info/2017/02/weird-ruby/

0