Trong bài viết này, chúng ta sẽ xem xét hai phong cách viết mã phổ biến mà các lập trình viên sử dụng để xử lý các tình huống trong đó một đoạn mã có thể bị lỗi. “Hãy Nhìn Trước Khi Bạn Nhảy” (LBYL) và “Xin Tha Thứ Dễ Hơn Xin Phép” (EAFP) Show Nếu bạn không quen thuộc với LBYL so với. Cuộc tranh luận về EAFP, điều đó tốt thôi. Chúng tôi sẽ bao gồm cả hai trong thời gian ngắn Hiểu các sắc thái của các mô hình này sẽ giúp bạn viết mã sạch hơn và hiệu quả hơn. Chúng ta sẽ xem xét chủ đề này từ góc độ Python, nhưng một số khái niệm cũng áp dụng cho các ngôn ngữ khác Bắt đầu nào Xem xét trước khi bạn bước nhảy vọt LBYL là phong cách lập trình truyền thống trong đó chúng tôi kiểm tra xem một đoạn mã có hoạt động hay không trước khi thực sự chạy nó Nói cách khác, nếu một đoạn mã cần một số điều kiện tiên quyết, chúng tôi đặt các câu lệnh có điều kiện sao cho mã chỉ chạy nếu tất cả các điều kiện tiên quyết được đáp ứng Trong ví dụ dưới đây, chúng tôi kiểm tra xem các khóa (_______0, Xin tha thứ dễ hơn xin phép Thuật ngữ EAFP được đặt ra bởi Chuẩn đô đốc Grace Murray Hopper, người phát minh ra COBOL. Theo cách tiếp cận này, chúng tôi chỉ cần chạy mã của mình, hy vọng điều tốt nhất trong khi sẵn sàng xử lý bất kỳ lỗi nào nếu mã bị lỗi Thông thường, điều này có nghĩa là đặt mã của chúng tôi trong các khối Trong ví dụ dưới đây, chúng tôi chỉ cần in nội dung của từ điển mà không cần kiểm tra. Nếu thiếu khóa, khối Vì vậy, cái nào tốt hơn? Theo nguyên tắc thông thường, EAFP được coi là Pythonic hơn và nên được ưu tiên trong hầu hết các tình huống. Dưới đây là một số lý do tại sao EAFP được ưa thích hơn LBYL Rõ ràng và dễ đọc hơnEAFP làm cho “con đường hạnh phúc” trở nên rõ ràng và dễ đọc hơn. “Rõ ràng tốt hơn ẩn ý” là một nguyên lý quan trọng của Python. Trong ví dụ trên, chúng tôi hy vọng rằng các khóa sẽ có mặt trong từ điển trong hầu hết các trường hợp, đó là những gì mã EAFP gợi ý. Tuy nhiên, mã LBYL nhấn mạnh trường hợp hiếm khi các phím bị thiếu Hiệu suất tốt hơnEAFP thường nhanh hơn LBYL — đặc biệt khi cần nhiều lần kiểm tra. Xem xét ví dụ trên. Trong phương pháp LBYL, chúng tôi thực hiện ba lần kiểm tra xem liệu các khóa có trong từ điển hay không. Gọi từ điển ba lần là tốn thời gian và lặp đi lặp lại. EAFP nhanh hơn vì nó chỉ in trực tiếp từ điển Bây giờ, đúng là các trường hợp ngoại lệ đắt hơn các câu lệnh Ngăn chặn điều kiện chủng tộcQuan trọng nhất, EAFP giúp chúng tôi tránh các điều kiện chủng tộc. Điều kiện chủng tộc xảy ra khi nhiều luồng đang cố truy cập vào một đối tượng. Xem xét hai luồng đang cố truy cập từ điển Tuy nhiên, trong EAFP, chúng tôi có thể yên tâm rằng bất kể trường hợp nào xảy ra, tất cả các trường hợp ngoại lệ sẽ được xử lý bởi khối Vậy có trường hợp nào cho LBYL không? Có, có một số trường hợp sử dụng LBYL có ý nghĩa hơn Tác dụng phụ phức tạpNếu chức năng của bạn có tác dụng phụ khó hoàn tác, sử dụng EAFP có thể là một ý tưởng tồi. Giả sử bạn bắt đầu ghi vào một tệp và nhận được một ngoại lệ khi một số thay đổi đã được thực hiện. Cố gắng hoàn nguyên các thay đổi trong khối Quá nhiều ngoại lệNếu bạn mong đợi các ngoại lệ được ném vào nhiều điểm trong mã của mình, việc sử dụng EAFP có thể làm giảm khả năng theo dõi nơi mã thực sự bị lỗi. Tốt nhất, bạn nên cấu trúc lại mã của mình để có các khối Vào cuối ngày, cuộc tranh luận này vẫn mở và một số nhà phát triển chỉ thích phong cách này hơn phong cách kia. Nếu bạn không đồng ý, tôi rất muốn nghe suy nghĩ của bạn Từ Wikipedia, bách khoa toàn thư miễn phí Bước tới điều hướng Bước tới tìm kiếmEAFP có thể đề cập đến
Xem thêm [sửa]Các chủ đề được gọi bằng cùng một thuật ngữ |