12/08/2018, 18:16

[Clean code] Chapter 2: Đặt tên có ý nghĩa

Tên xuất hiện mọi nơi trong phần mềm. Chúng ta có tên biến, tên hàm, tên đối số, tên lớp, và package. Chúng ta đặt tên cho file mã nguồn, đường dẫn chứa chúng... Chúng ta thực hiện đặt tên, đặt tên và đặt tên. Bởi vì chúng ta làm việc đặt tên rất nhiều nên hãy cố làm nó một cách tốt nhất. Một số ...

Tên xuất hiện mọi nơi trong phần mềm. Chúng ta có tên biến, tên hàm, tên đối số, tên lớp, và package. Chúng ta đặt tên cho file mã nguồn, đường dẫn chứa chúng... Chúng ta thực hiện đặt tên, đặt tên và đặt tên. Bởi vì chúng ta làm việc đặt tên rất nhiều nên hãy cố làm nó một cách tốt nhất. Một số tips là một số rule đơn giản giúp bạn tạo ra một cái tên tốt ^^

Tên cuả một biến, hàm hoặc lớp nên trả lời tất cả các câu hỏi lớn: nó nói cho bạn là tại sao nó tồn tại, nó làm cái gì và sử dụng nó như thế nào. Hãy xem xét cách đặt tên sau:

int d; // elapsed time in days

Tên d hoàn toàn không có một ý nghĩa nào. Bạn không nên đặt tên như vậy, thay vào đó bạn nên đặt một tên gợi lên ý nghĩa, như thêm đơn vị chẳng hạn, cái gì đang được đo lường trong biến này và đơn vị đo lường của nó là gì:

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

OK, code có vẻ dễ đọc hơn rồi đó. Bây giờ thử xem xét đoạn code sau:

public List<int[]> getThem() {
    List<int[]> list1 = new ArrayList<int[]>();
    for (int[] x : theList)
        if (x[0] == 4)
            list1.add(x);
    return list1;
}

Đoạn code chạy rất ổn nhưng có vẻ khó hiểu quá. Hàng tỉ câu hỏi có thể được đặt ra với đống code này nhưng mình trích xuất 4 câu hỏi chính:

  1. theList là cái quái gì?
  2. Tầm quan trọng cuả x[0], tại sao lại dùng nó để so sánh?
  3. Dấu hiệu 4 để so sánh mang ý nghĩa gì ????
  4. Giá trị trả về được sử dụng như thế nào?

Các câu trả lời hoặc hàm ý trả lời các câu hỏi đó hoàn toàn có thể được bạn thể hiện trong code nếu bạn tinh ý một chút trong việc đặt tên biến. Hãy coi đoạn code trên xử lý một trò chơi, mỗi hàng (Cell) trên bảng (gameBoard) được biểu diễn bởi một mảng đơn giản. Nhiện vụ của ta là xem phần tử đầu của mỗi hàng đó có phải là một "cờ" nào đó không (isFlagged) và trả về các cột thỏa mãn điều kiện đó, easy thôi mà:

public List<Cell> getFlaggedCells() {
    List<Cell> flaggedCells = new ArrayList<Cell>();
    for (Cell cell : gameBoard)
        if (cell.isFlagged())
            flaggedCells.add(cell);
    return flaggedCells;
}

Đoạn code có vẻ ngon hơn rồi đó             </div>
            
            <div class=

0