Magic comment in Ruby

Đăng bởi Lưu Đại vào ngày 18-12-2022

Comment và Magic comment trong Ruby

Comment là những câu ghi chú trong đoạn code, bắt đầu bằng ký tự #. Mặc định những dòng có kí tự # sẽ không được thực thi khi chạy code…. Ngoại trừ Magic comment - những comment đặc biệt trong Ruby có tác dụng báo cho ruby biết là nó sẽ thực hiện một chức năng nhất định. 

Cú pháp magic comment

Có 2 loại cú pháp để khai báo magic comment: 
  • # frozen_string_literal: true 
  • # -*- encoding: UTF-8 -*- 

Scope & Order của magic comment

Phạm vi ảnh hưởng của mỗi magic comment là trong chính file mà nó được khai báo. Kể cả trong trường hợp require 1 file có magic comment vào file khác thì magic comment cũng không tác động tới file đó. Ví dụ: Có một file calculate_money có magic comment là # frozen_string_literal: true sau đó file này được require vào bank.rb thì magic comment cũng sẽ không áp dụng cho bank.rb 
Thứ tự của comment sẽ tính từ trên xuống dưới. Trong trường hợp có nhiều comment khác nhau thì ruby sẽ thực thi lần lượt từ dòng đầu tiên tới cuối cùng. Trong trường hợp khác có 2 comment cùng loại thì sẽ ưu tiên lấy dòng comment cuối cùng. 
# frozen_string_literal: true
# frozen_string_literal: false
Ví dụ trên sẽ thực thi dòng frozen_string_literal: false. 

Một số magic comment thông dụng. 

Xét về comment được sử dụng nhiều nhất mình thấy là # frozen_string_literal: true nó nói với ruby là với mỗi một biến string được khai báo thì chỉ có một object được tạo ra. Mặc định là mỗi khi biến string thay đổi giá trị thì ruby sẽ tạo ra một object mới chứ không thay đổi dữ liệu của object cũ.

Một comment nữa được sử dụng là # encoding: xxx giá trị encoding mặc định của ruby là UTF-8, nếu muốn set giá trị khác thì có thể sử dụng comment này. Có thể sử dụng encoding hay coding đêu cho ra kết quả tương đương.

# warn_indent: true Magic comment này mình thấy tùy trường hợp mà cũng hữu dụng nhưng hầu hết các dự án mình làm đều có cài Rubocop rồi nên chắc không cần warn_indent