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
- Đừng sử dụng and và or thay vào đó hãy sử dụng && và ||
- 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
- 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
- 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) %>
- 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
- 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 %>
- 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
- 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: 日時
- 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
- Không truy vấn cơ sở dữ liệu trên view
- 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