Clean code - Đặt tên có ý nghĩa

Chia sẻ qua:

Overview

Đặt tên có ý nghĩa như thế nào trong lập trình?

Bạn có biết câu nói: There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Karlton

Khi lập trình bạn phải đặt tên cho biến, hàm, package ... một code tốt ngoài việc đảm bảo tính chính xác còn phải dễ dàng đọc hiểu, nâng cấp và chỉnh sửa và việc đặt tên chính đúng giúp việc này dễ dàng hơn.

Tên thể hiện ý nghĩa và mục đích sử dụng.

Tên của lớp, biến và phương thức phải có ý nghĩa và chỉ rõ một phương thức thực hiện chức năng gì hoặc thuộc tính là gì.

Chúng ta đi vào một ví dụ cụ thể:

1public List<Merchant> getList() {
2  List<Merchant> list = new ArrayList<>();
3  for (Merchant merchant: theList) {
4    if (merchant.getStatus() == 1){
5      list.add(merchant);
6    }
7  }
8  return list;
9}

Có các vấn đề như sau:

  • getList:
    • Get list gì ở đây?
    • Lấy list merchant hoạt động
    • => đặt tên hàm: getActiveMerchants
  • List<Merchant> list = new ArrayList<>()
    • list ở đây là gì?
    • Là danh sách merchant hoạt động
    • => đặt tên biến: activeMerchants
  • merchant.getStatus() == 1:
    • 1 là gì
    • Trạng thái hoạt động của merchant
    • => tạo 1 biến với tên: int activeStatus = 1
 1public List<Merchant> getActiveMerchants() {
 2  List<Merchant> activeMerchants = new ArrayList<>();
 3  int activeStatus = 1;
 4  for (Merchant merchant: theList) {
 5    if (merchant.getStatus() == activeStatus){
 6      activeMerchants.add(merchant);
 7    }
 8  }
 9  return activeMerchants;
10}

Tên biến phải đọc được

Date yyyyMMdd

Đừng làm thế. Chúng ta đã nói ở trên tên biến thể hiện mục đích của nó. Trường này chúng ta dùng làm gì.

Ví dụ: nếu đây là thời gian khởi tạo ta có thể đặt là createTime

Hạn chế viết tắt

Hạn chế viết tắt nhất có thể. Khi viết tắt mà còn viết tắt từ tiếng Việt nữa thì rất khó để biết cái tên đó muốn thể hiện gì.

Ví du: hvt viết tắt cho Họ và tên nhưng không ai dịch ra được đâu hãy sử dụng fullName

Hạn chế lặp lại ngữ cảnh

Ví dụ bạn có một Object với tên Merchant Thì thay vì:

merchantName => name
merchantId => id

Một số convention chung

Class: là danh từ
Method: là động từ
Không đặt tên 1 ký tự (trừ i, j trong loop)