Untuk menghindari semua jawaban standar yang saya bisa gunakan di Google, saya akan memberikan contoh yang Anda semua bisa serang sesuka hati.
C # dan Java (dan terlalu banyak yang lain) miliki dengan banyak tipe beberapa perilaku 'overflow' yang saya tidak suka sama sekali (misalnya misalnya type.MaxValue + type.SmallestValue == type.MinValue
:) int.MaxValue + 1 == int.MinValue
.
Tapi, melihat sifat jahat saya, saya akan menambahkan beberapa penghinaan untuk cedera ini dengan memperluas perilaku ini, katakanlah DateTime
tipe Overridden . (Saya tahu DateTime
disegel dalam. NET, tetapi demi contoh ini, saya menggunakan bahasa semu yang persis seperti C #, kecuali untuk fakta bahwa DateTime tidak disegel).
Add
Metode yang diganti :
/// <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.
}
}
Tentu saja jika bisa menyelesaikan ini dengan mudah, tetapi kenyataannya tetap saja saya gagal melihat mengapa Anda tidak dapat menggunakan pengecualian (secara logis artinya, saya dapat melihat bahwa ketika kinerja merupakan masalah yang dalam beberapa kasus pengecualian harus dihindari. ).
Saya pikir dalam banyak kasus mereka lebih jelas daripada jika-struktur dan tidak melanggar kontrak apa pun yang dibuat metode ini.
IMHO reaksi "Jangan pernah menggunakannya untuk aliran program reguler" yang tampaknya dimiliki semua orang tidak terlalu buruk karena kekuatan reaksi itu dapat dibenarkan.
Atau saya salah?
Saya sudah membaca posting lain, berurusan dengan semua jenis kasus khusus, tetapi poin saya adalah tidak ada yang salah dengan itu jika Anda berdua:
- Bersih
- Hormati kontrak metode Anda
Tembak saya.
if
pernyataan yang mendokumentasikan diri sendiri jauh lebih pendek . Anda akan menemukan ini sangat sulit. Dengan kata lain: premis Anda sendiri cacat, dan kesimpulan yang Anda ambil darinya salah.