12/08/2018, 11:56

Coding conventions and standards in ruby

Với những kinh nghiệm lập trình ruby có được sau một thời gian dài tìm tòi và học hỏi qua bài viết này mình xin chia sẽ các cách viết code nhìn đẹp mắt, ngắn gọn và hiệu quả. Nếu có cách nào tối ưu, hiệu quả hơn xin các bạn comment bên dưới để mình học hỏi thêm Đừng sử dụng and và or thay vào đó ...

Với những kinh nghiệm lập trình ruby có được sau một thời gian dài tìm tòi và học hỏi qua bài viết này mình xin chia sẽ các cách viết code nhìn đẹp mắt, ngắn gọn và hiệu quả. Nếu có cách nào tối ưu, hiệu quả hơn xin các bạn comment bên dưới để mình học hỏi thêm

  1. Đừng sử dụng and và or thay vào đó hãy sử dụng && và ||
  2. Bỏ hết comment có trong dòng code của bạn
#show full_name of company
    def full_name company
      "#{company.first_name} #{company.last_name}"
    end
  1. Thay vì dùngif not hoặc if ! thì hãy dùng unless
bad code
    if not @company.nil?
      @job.company_id = @company.id
    end
good code
    unless @company.nil?
      @job.company_id = @company.id
    end
4. Thay vì dùng `while !` thì hãy dùng `until`
```ruby

bad code
    while ! @person.ready?
      @person.stop
    end
good code
    until @person.ready?
      @person.stop
    end

  1. Viết ngắn gọn nhất các kiểm tra logic
bad code
    if @company.count == @job.count
      full_name = @company.name
    else
      full_name = @job.name
    end
good code
    full_name = if @company.count == @job.count
      @company.name
    else
      @job.name
    end

bad code
     if @job.name.blank?
       @company.name = @cadidate.name
     else
       @company.name = @job.name
     end
good code
     @company.name = @job.name || @candidate.name

bad code
     <% if @user.role == "admin" %>
       <%= link_to @company.full_name, edit_company_path(@company) %>
     <% else %>
       <%= @company.full_name %>
     <% end %>
good code
     <%= link_to_if @user.role == "admin",  @company.full_name, edit_company_path(@company) %>

  1. Cách lấy từng phần tử ra khỏi mảng
    colors = ["red", "blue", "white", "black"]
bad code
    for color in colors
      puts color
    end
good code
    colors.each do |color|
      puts color
    end

  1. Tránh các truy vấn dữ liệu trên view, đưa các truy vấn này vào controller
bad code
    index.html.erb
    <%= Employee.where(name_company: "Framgia").each do |employee| %>
      <%= employee.full_name %>
    <% end %>

  1. Viết ngắn gọn hơn với phương thức map và pluck
    bad code
    Company.all.map {|company| company.id}
    good code
    Company.all.map &:id
    very good code
    Company.pluck :id

  1. Bỏ dấu nháy kép đối với chuỗi string trong file ja.yml và en.yml khi ta sử dụng I18n
bad code
    result: "通常表示"
    date_time: "日時"
good code
    result: 通常表示
    date_time: 日時

  1. Những file dùng chung giữa 2 chức năng trở lên thì phải đặt vào thư mục shared
  2. Không truy vấn cơ sở dữ liệu trên view
  3. Với nhiều lệnh elsif thì thay if-elsif-else bằng case-when
   bad code
    if score < 4
     puts "F"
    elsif score  == 5
     puts "D"
    elsif score == 6
     puts "C"
    elsif score == 7
      puts "B"
    else
      puts "A"
    end
   good code
    case
    when score < 4
     puts "F"
    when score  == 5
     puts "D"
    when score == 6
      puts "C"
    when score == 7
       puts "B"
    else
      puts "A"
    end

0