IT Staff

Blog về chuyên ngành IT

Qui ước về coding trong Ruby và Rails

leave a comment »

Article: Qui ước về coding trong Ruby và Rails 1805

Ruby
ngocdaothanh.myopenid.com 176
Updated over 3 years ago

Khi làm project theo nhóm, việc cả nhóm cùng dùng chung một qui ước là điều cần thiết. Bài viết này tổng hợp các qui ước được đa số lập trình viên trên thế giới sử dụng khi làm project về Ruby và Rails. Nếu phát hiện ra qui ước gì mới, xin tự do bổ sung.

  • Dưới đây chỉ là những qui ước không bắt buộc (như dùng 2 khoảng trắng để thụt đầu dòng). Những qui ước bắt buộc thuộc về bản thân ngôn ngữ (như tên lớp phải viết hoa ít nhất kí tự đầu), xin đọc tài liệu khác.
  • Mặc dù không bắt buộc, nhưng vì nhiều người theo nên cũng hãy nên theo.

Vẻ ngoài

Thụt đầu dòng

Để mã dễ đọc, cần thụt đầu dòng, mỗi lần 2 khoảng trắng. Không dùng tab vì độ rộng của tab phụ thuộc môi trường. Qui ước này áp dụng cho tất cả tập tin trong chương trình Rails (ví dụ .html.erb, .js, .css).

Ví dụ:

if x > 0 if y > 0 puts 123 end end

Số cột một dòng

Tối đa 80 cột trong một dòng.

Dòng trắng

Dùng dòng trắng để ngăn cách các khối mã, trước khối đầu tiên và sau khối cuối cùng không dùng dòng trắng.

Ví dụ sai:

class Foo attr :bar def baz ... end def quux ... end end class Bar end

Ví dụ đúng:

class Foo attr :bar def baz ... end def quux .. end end class Bar end

Chú thích

Nên dùng tiếng Anh. Tránh chú thích trong nội bộ phương thức. Nếu nghĩ rằng đoạn mã nào đó nhất định phải có chú thích, thì rất có thể nên tách đoạn mã đó thành phương thức riêng.

Khi chú thích ở đầu lớp, module, phương thức public, hãy chú thích theo kiểu RDoc.

Ví dụ:

# Ngắt chuỗi kí tự +str+, kết quả trả về là mảng. def split_csv(str) return str.split(/,/) end

Qui ước liên quan đến cấu trúc chương trình

Các thành tố của lớp

Viết theo thứ tự sau:

  1. Khai báo nhúng module (include)
  2. Hằng số
  3. Biến của lớp, biến instance
  4. Phương thức public của lớp
  5. Accessors
  6. Object initialization (initialize method)
  7. Phương thức public của instance
  8. Phương thức protected của lớp
  9. protected access
  10. Phương thức protected của instance
  11. Phương thức private của lớp
  12. private access
  13. Phương thức private của instance
  14. Lớp con được lồng bên trong

Định nghĩa access

Dùng attr_accessor, attr_reader, attr_writer. Không dùng attr.

Định nghĩa phương thức

Thêm ngoặc nếu phương thức có tham số.

Địn nghĩa phương thức của lớp

Dùng self.

Ví dụ sai:

class Foo def Foo.foo ... end end

Ví dụ đúng:

class Foo def self.foo ... end end

Gọi phương thức

Phải có ngoặc nếu có tham số. Đối với p, print, puts có thể bỏ ngoặc.

Block

Dùng do end nếu nhiều dòng, dùng {} nếu một dòng.

VÍ dụ sai:

foo(x, y) { ... } s = ary.collect do |i| i.to_s end.join(", ")

 

Ví dụ đúng:

foo(x, y) do ... end

s = ary.collect { |i| i.to_s }.join(', ')

return

Để ngắn gọn và thoáng, không cần dùng return nếu không cần thiết. Nếu dùng return, không dùng ngoặc bao quanh giá trị trả về.

Ví dụ sai:

def add(x, y) return(x + y) end

Ví dụ đúng:

def add(x, y) x + y end def add(x, y) return x + y end

Rẽ nhánh

Không dùng then. Dùng unless x thay cho !x, nhưng nếu có else thì không dùng unless. Nếu điều kiện đơn giản, có thể viết thành vị ngữ.

Ví dụ sai:

if x > 0 then puts 1 end unless x puts 1 else puts 2 end puts 1 if foo && bar && baz && quux

Ví dụ đúng:

if x > 0 puts 1 else puts 2 end unless x puts 1 end puts 1 if x

Dùng case khi có thể, lược bỏ then

Ví dụ sai:

if x == 1 ... elsif x == 2 ... end case x when 1 then ... when 2 then ... end

Ví dụ đúng:

case x when 1 ... when 2 ... end

Không gán khối rẽ nhánh thành giá trị.

Ví dụ sai:

msg = if x > 0 1 else 2 end

Ví dụ đúng:

if x > 0 msg = 1 else msg = 2 end

Vòng lặp

Lược bỏ do khi dùng while until. Thay while !x bằng until x. Dùng loop cho vòng lặp vô hạn.

Ví dụ sai:

while cond do ... end while true ... end

Ví dụ đúng:

while cond ... end until cond ... end loop do ... end

Toán tử logic

Dùng  !, &&, || thay cho not, and, or.

Chuỗi kí tự literal

Để dễ phân biệt nội suy và không nội suy, dùng nháy đơn khi không có nội suy. Không dùng here document, thay vào đó dùng %, %q, %Q (thường dùng {} hoặc ()).

Ví dụ:

a = 8 b = 'a' c = "#{a}" d = %{ A line The value of a is #{a} }

Qui ước đặt tên

Qui ước chung

  1. Sử dụng từ tiếng Anh để đặt tên
  2. Về nguyên tắc, không viết tắt.
  3. Biến lặp đặt theo thứ tự i, j, k.
  4. Biến dùng ở phạm vi hẹp có thể viết tắt từ tên lớp, ví dụ eo = ExampleObject.

Tên lớp, tên module

Viết hoa chữ đầu của từng từ, không dùng dấu gạch dưới. Tuy nhiên đối với từ viết tắt thì để nguyên toàn bộ là chữ hoa (như HTTP chẳng hạn).

Ví dụ sai:

Example_Class EXAMPLE_CLASS HttpClient HTTPclient HTTP_Client

Ví dụ đúng:

ExampleClass HTTPClient

Tên phương thức

Dùng snake case.

Ví dụ sai:

addsSomething Add_Something

Ví dụ đúng:

add_something

Phương thức trả về giá trị đúng sai kết thúc bằng dấu ?, không dùng is_.

Ví dụ sai:

is_visible is_visible?

Ví dụ đúng:

visible?

Tên phương thức làm thay đổi nội bộ đối tượng kết thúc bằng dấu !

Ví dụ:

o.split # Không làm thay đồi o o.split! # Thay đổi o

Tên hằng

Viết hoa toàn bộ, các từ nối với nhau bởi dấu gạch dưới.

Ví dụ:

EXAMPLE_CONSTANT

Tên biến

Dùng snake case.

Ví dụ:

tmp local_variable @instance_variable $global_variable

Tên tập tin

Dùng snake case.

Ví dụ:

foo.rb # Trong tập tin này định nghĩa lớp Foo foo_bar.rb # Trong tập tin này định nghĩa lớp FooBar foo/bar_baz.rb # Trong thư mục foo, tập tin bar_baz định nghĩa lớp Foo::BarBaz (lớp BarBaz nằm trong module Foo)

Tham khảo:

Written by Xavier

Tháng Tám 3, 2013 lúc 9:57 sáng

Posted in Staff

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

%d bloggers like this: