Tôi nghĩ rằng nó hoàn toàn hợp lệ để sử dụng các xác nhận trong Ruby. Nhưng bạn đang đề cập đến hai điều khác nhau:
- xUnit frameworks use
assert
phương pháp để kiểm tra kỳ vọng kiểm tra của bạn. Chúng được dự định sẽ được sử dụng trong mã thử nghiệm của bạn, chứ không phải trong mã ứng dụng của bạn.
- Một số ngôn ngữ như C, Java hoặc Python, bao gồm một công trình xây dựng
assert
nhằm mục đích được sử dụng bên trong mã chương trình của bạn, để kiểm tra các giả định bạn thực hiện về tính toàn vẹn của chúng. Các kiểm tra này được xây dựng bên trong chính mã. Chúng không phải là tiện ích thử nghiệm, mà là một tiện ích phát triển.
Gần đây tôi đã viết solid_assert: a little Ruby library implementing a Ruby assertion utility và cũng a post in my blog explaining its motivation .. Nó cho phép bạn viết các biểu thức dưới dạng:
assert some_string != "some value"
assert clients.empty?, "Isn't the clients list empty?"
invariant "Lists with different sizes?" do
one_variable = calculate_some_value
other_variable = calculate_some_other_value
one_variable > other_variable
end
Và họ có thể bị ngừng hoạt động để assert
và invariant
được đánh giá là phát biểu có sản phẩm nào. Điều này cho phép bạn tránh bất kỳ vấn đề hiệu suất trong sản xuất. Nhưng hãy lưu ý rằng The Pragmatic Programmers khuyên bạn nên hủy kích hoạt chúng. Bạn chỉ nên hủy kích hoạt chúng nếu chúng thực sự ảnh hưởng đến hiệu suất.
Liên quan đến câu trả lời nói rằng cách Ruby độc đáo đang sử dụng câu lệnh bình thường raise
, tôi nghĩ nó thiếu tính biểu cảm. Một trong những quy tắc vàng của chương trình quyết đoán không sử dụng các xác nhận cho xử lý ngoại lệ thông thường. Chúng là hai thứ hoàn toàn khác nhau. Nếu bạn sử dụng cùng một cú pháp cho hai người trong số họ, tôi nghĩ rằng mã của bạn sẽ tối nghĩa hơn. Và tất nhiên bạn mất khả năng hủy kích hoạt chúng.
Bạn có thể tin rằng việc sử dụng xác nhận là điều tốt vì hai cuốn sách cổ điển phải đọc như The Pragmatic Programmer From Journeyman to Master và Code Complete dành toàn bộ các phần cho chúng và đề xuất sử dụng chúng. Ngoài ra còn có một bài viết hay có tiêu đề Programming with assertions minh họa rất rõ những gì là lập trình quyết đoán và khi nào sử dụng nó (nó dựa trên Java, nhưng các khái niệm áp dụng cho bất kỳ ngôn ngữ nào).
Tôi thích các vấn đề làm cả hai: dạy bạn và hoàn thành công việc. :) –