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