Clean Code Ruby - Variables
Giới thiệu Bài viết này dựa trên các nguyên tắc kỹ thuật trong lập trình từ cuốn sách Clean Code của Robert C. Martin, được điều chỉnh cho Ruby. Đây không phải là một hướng dẫn cách viết bắt buộc. Đó là một hướng dẫn để sản xuất phần mềm có thể đọc, tái sử dụng và có thể tái cấu trúc trong ...
Giới thiệu
Bài viết này dựa trên các nguyên tắc kỹ thuật trong lập trình từ cuốn sách Clean Code của Robert C. Martin, được điều chỉnh cho Ruby. Đây không phải là một hướng dẫn cách viết bắt buộc. Đó là một hướng dẫn để sản xuất phần mềm có thể đọc, tái sử dụng và có thể tái cấu trúc trong Ruby.
Không phải mọi nguyên tắc trong tài liệu này đều phải được tuân thủ nghiêm ngặt, cũng như phổ biến trên toàn cầu. Đây là những hướng dẫn và không có gì khác, nhưng chúng là những thứ được rút ra qua nhiều năm kinh nghiệm tập thể của các tác giả của Clean Code.
Nghề kỹ sư phần mềm của chúng tôi chỉ hơn 50 tuổi một chút và chúng tôi vẫn đang học hỏi rất nhiều. Khi kiến trúc phần mềm cũng cũ kĩ như kiến trúc ngoài đời thật, có lẽ sau đó chúng ta sẽ có những quy tắc khó hơn để tuân theo. Hiện tại, hãy để những hướng dẫn này đóng vai trò là nền tảng để đánh giá chất lượng mã Ruby mà bạn và nhóm của bạn tạo ra.
Một điều nữa: biết những điều này sẽ không ngay lập tức giúp bạn trở thành một nhà phát triển phần mềm tốt hơn và làm việc với họ trong nhiều năm không có nghĩa là bạn sẽ không phạm sai lầm. Mỗi đoạn mã bắt đầu như một bản nháp đầu tiên, giống như đất sét ướt được định hình thành dạng cuối cùng của nó. Cuối cùng, chúng tôi loại bỏ những điểm không hoàn hảo khi chúng tôi xem xét nó với các đồng nghiệp của mình. Đừng tự thoả mãn bản thân bởi những bản nháp đầu tiên cần cải thiện. Thay vào đó hãy liên tục cải thiện chúng.
Variables
Sử dụng tên biến có ý nghĩa và phát âm được.
Bad:
yyyymmdstr = Time.now.strftime('%Y/%m/%d')
Good:
current_date = Time.now.strftime('%Y/%m/%d')
Sử dụng cùng một từ vựng cho cùng một loại biến
Chọn một từ cho toàn bộ concept và chỉ sử dụng nó.
Bad:
user_info user_data user_record starts_at start_at start_time
Good:
user starts_at
Sử dụng tên có thể tìm kiếm và sử dụng hằng số
Chúng ta sẽ đọc nhiều mã hơn là viết. Điều quan trọng là mã chúng ta viết là có thể đọc và tìm kiếm được. Nếu không đặt tên các biến cuối cùng có ý nghĩa, chúng ta sẽ làm tổn thương người đọc code. Vì vậy hãy làm cho tên biến của bạn có thể tìm kiếm.
Ngoài ra, thay vì các giá trị mã hóa cứng và sử dụng "số ma thuật", hãy tạo các hằng số.
Bad:
# What the heck is 86400 for? status = Timeout::timeout(86_400) do # ... end
Good:
# Declare them as capitalized globals. SECONDS_IN_A_DAY = 86_400 status = Timeout::timeout(SECONDS_IN_A_DAY) do # ... end
Sử dụng các biến có ý nghĩa giải thích
Bad:
address = 'One Infinite Loop, Cupertino 95014' city_zip_code_regex = /^[^,\]+[,\s]+(.+?)s*(d{5})?$/ save_city_zip_code(city_zip_code_regex.match(address)[1], city_zip_code_regex.match(address)[2])
Good:
address = 'One Infinite Loop, Cupertino 95014' city_zip_code_regex = /^[^,\]+[,\s]+(.+?)s*(d{5})?$/ _, city, zip_code = city_zip_code_regex.match(address).to_a save_city_zip_code(city, zip_code)
Tránh sử dụng các biến mapping không ý nghĩa
Rõ ràng là tốt hơn so với ngầm.
Bad:
locations = ['Austin', 'New York', 'San Francisco'] locations.each do |l| do_stuff do_some_other_stuff # ... # ... # ... # Wait, what is `l` for again? dispatch(l) end
Good:
locations = ['Austin', 'New York', 'San Francisco'] locations.each do |location| do_stuff do_some_other_stuff # ... # ... # ... dispatch(location) end
Không thêm vào những nội dung không cần thiết
Nếu class/object của bạn nói co bạn mọi thứ, thì đừng lặp lại điều đó trong tên biến
Bad:
car = { car_make: 'Honda', car_model: 'Accord', car_color: 'Blue' } def paint_car(car) car[:car_color] = 'Red' end
Good:
car = { make: 'Honda', model: 'Accord', color: 'Blue' } def paint_car(car) car[:color] = 'Red' end
Sử dụng đối số mặc định thay vì điều kiện
Đối số mặc định thường sạch hơn so với điều kiện. Xin lưu ý rằng nếu bạn sử dụng chúng, phương thức của bạn sẽ chỉ cung cấp các giá trị mặc định cho các đối số không xác định. Các giá trị "falsy" khác như false và nil sẽ không được thay thế bằng giá trị mặc định. Bad:
def create_micro_brewery(name) brewery_name = name || 'Hipster Brew Co.' # ... end
Good:
def create_micro_brewery(brewery_name = 'Hipster Brew Co.') # ... end
Next
Clean Code Ruby - Methods (comming soon)