Tôi thấy mã hóa cứng (sic) "" mỗi lần kiểm tra một chuỗi trống không tốt bằng.
Cách tiếp cận mã sạch
Làm điều này: foo == ""
là thực hành rất xấu. ""
là một giá trị kỳ diệu. Bạn không bao giờ nên kiểm tra các giá trị ma thuật (thường được gọi là số ma thuật )
Những gì bạn nên làm là so sánh với một tên biến mô tả.
Tên biến mô tả
Người ta có thể nghĩ rằng "blank_ chuỗi" là một tên biến mô tả. Nó không phải là .
Trước khi bạn đi và làm empty_string = ""
và nghĩ rằng bạn có một tên biến tuyệt vời để so sánh với. Đây không phải là "tên biến mô tả" nghĩa là gì.
Một tên biến mô tả tốt được dựa trên bối cảnh của nó. Bạn phải suy nghĩ về chuỗi rỗng là gì .
- Nó đến từ đâu.
- Tại sao nó ở đó.
- Tại sao bạn cần kiểm tra nó.
Ví dụ trường mẫu đơn giản
Bạn đang xây dựng một biểu mẫu nơi người dùng có thể nhập các giá trị. Bạn muốn kiểm tra xem người dùng có viết gì hay không.
Một tên biến tốt có thể là not_filled_in
Điều này làm cho mã rất dễ đọc
if formfields.name == not_filled_in:
raise ValueError("We need your name")
Ví dụ phân tích cú pháp CSV kỹ lưỡng
Bạn đang phân tích tệp CSV và muốn chuỗi trống được phân tích cú pháp như None
(Vì CSV hoàn toàn dựa trên văn bản, nó không thể đại diện None
mà không sử dụng các từ khóa được xác định trước)
Một tên biến tốt có thể là CSV_NONE
Điều này giúp mã dễ dàng thay đổi và thích ứng nếu bạn có tệp CSV mới đại diện cho None
một chuỗi khác""
if csvfield == CSV_NONE:
csvfield = None
Không có câu hỏi về việc nếu đoạn mã này là chính xác. Nó là khá rõ ràng rằng nó làm những gì nó nên làm.
So sánh điều này với
if csvfield == EMPTY_STRING:
csvfield = None
Câu hỏi đầu tiên ở đây là, tại sao chuỗi trống xứng đáng được đối xử đặc biệt?
Điều này sẽ nói với các lập trình viên tương lai rằng một chuỗi rỗng phải luôn luôn được coi là None
.
Điều này là do nó trộn logic kinh doanh (Giá trị CSV phải là gì None
) với việc triển khai mã (Chúng ta thực sự so sánh với cái gì)
Cần phải có một sự tách biệt mối quan tâm giữa hai.
""
không tốt?