1. theList chứa cái gì?
2. Ý nghĩa của chỉ số 0 trong phần tử của theList?
3. Số 4 có ý nghĩa gì?
4. Danh sách được return thì dùng kiểu gì?
Câu trả lời không có trong code, nhưng sẽ có ngay sau đây. Giả sử chúng tôi đang làm game dò mìn.
Chúng tôi thấy rằng giao diện trò chơi là một danh sách các ô vuông (cell) được gọi là theList. Vậy
nên, hãy đổi tên nó thành gameBoard.
Mỗi ô trên màn hình được biểu diễn bằng một sanh sách đơn giản. Chúng tôi cũng thấy rằng chỉ số
của số 0 là vị trí biểu diễn giá trị trạng thái (status value), và giá trị 4 nghĩa là trạng thái được gắn cờ
(flagged). Chỉ bằng cách đưa ra các khái niệm này, chúng tôi có thể cải thiện mã nguồn một cách đáng
kể:
public
List
<
int
[]> getFlaggedCells() {
List
<
int
[]> flaggedCells =
new
ArrayList
<
int
[]>();
for
(
int
[] cell
:
gameBoard)
if
(cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return
flaggedCells;
}
Cần lưu ý rằng mức độ đơn giản của code vẫn không thay đổi, nó vẫn chính xác về toán tử, hằng
số, và các lệnh lồng nhau,…Nhưng đã trở nên rõ ràng hơn rất nhiều.
Chúng ta có thể đi xa hơn bằng cách viết một lớp đơn giản cho các ô thay vì sử dụng các mảng
kiểu int. Nó có thể bao gồm một hàm thể hiện được mục đích (gọi nó là isFlagged – được gắn cờ
chẳng hạn) để giấu đi những con số ma thuật (Từ gốc: magic number – Một khái niệm về các hằng số,
tìm hiểu thêm tại
https://en.wikipedia.org/wiki/Magic_number_(programming)
).
public
List
getFlaggedCells() {
List
<
Cell
> flaggedCells =
new
ArrayList
<
Cell
>();
for
(
Cell
cell
:
gameBoard)
if
(cell.isFlagged())
flaggedCells.add(cell);
return
flaggedCells;
}
Với những thay đổi đơn giản này, không quá khó để hiểu những gì mà đoạn code đang trình bày.
Đây chính là sức mạnh của việc chọn tên tốt.
17
Chia sẻ với bạn bè của bạn: | |