Để tránh tất cả các câu trả lời tiêu chuẩn mà tôi có thể có trên Google, tôi sẽ cung cấp một ví dụ mà tất cả các bạn có thể tấn công theo ý muốn.
C # và Java (và quá nhiều loại khác) có rất nhiều loại hành vi 'tràn' mà tôi không thích chút nào (ví type.MaxValue + type.SmallestValue == type.MinValue
dụ: ví dụ int.MaxValue + 1 == int.MinValue
:).
Nhưng, nhìn thấy bản chất xấu xa của tôi, tôi sẽ thêm một chút xúc phạm đến thương tích này bằng cách mở rộng hành vi này sang, giả sử là một DateTime
kiểu Ghi đè . (Tôi biết DateTime
được niêm phong bằng .NET, nhưng vì lợi ích của ví dụ này, tôi đang sử dụng ngôn ngữ giả giống hệt như C #, ngoại trừ thực tế là DateTime không được niêm phong).
Add
Phương thức ghi đè :
/// <summary>
/// Increments this date with a timespan, but loops when
/// the maximum value for datetime is exceeded.
/// </summary>
/// <param name="ts">The timespan to (try to) add</param>
/// <returns>The Date, incremented with the given timespan.
/// If DateTime.MaxValue is exceeded, the sum wil 'overflow' and
/// continue from DateTime.MinValue.
/// </returns>
public DateTime override Add(TimeSpan ts)
{
try
{
return base.Add(ts);
}
catch (ArgumentOutOfRangeException nb)
{
// calculate how much the MaxValue is exceeded
// regular program flow
TimeSpan saldo = ts - (base.MaxValue - this);
return DateTime.MinValue.Add(saldo)
}
catch(Exception anyOther)
{
// 'real' exception handling.
}
}
Tất nhiên là nếu có thể giải quyết điều này dễ như vậy, nhưng thực tế là tôi chỉ không hiểu tại sao bạn không thể sử dụng ngoại lệ (về mặt logic, tôi có thể thấy rằng khi hiệu suất là một vấn đề mà trong một số trường hợp ngoại lệ nên tránh ).
Tôi nghĩ rằng trong nhiều trường hợp, chúng rõ ràng hơn cấu trúc if và không phá vỡ bất kỳ hợp đồng nào mà phương thức đang thực hiện.
IMHO các loại Không bao giờ sử dụng chúng cho dòng chảy chương trình thông thường Phản ứng của mọi người dường như không được phát triển tốt vì sức mạnh của phản ứng đó có thể biện minh.
Hay là tôi nhầm?
Tôi đã đọc các bài viết khác, xử lý tất cả các trường hợp đặc biệt, nhưng quan điểm của tôi là không có gì sai với nó nếu cả hai bạn:
- Thông thoáng
- Tôn trọng hợp đồng theo phương pháp của bạn
Bắn tôi đi.
if
tuyên bố tự viết tài liệu ngắn hơn nhiều . Bạn sẽ thấy điều này rất khó khăn. Nói cách khác: chính tiền đề của bạn là thiếu sót, và kết luận bạn rút ra từ đó là sai.