O'z xatosini aniqlaydigan kod

Quyidagi kod parchasini ko'rib chiqing:

int index = FindClosestIndex(frame);
if (_data[index].Frame == frame)
    return _data[index];
else
    return interpolateData(frame, _data[index - 1], _data[index]);

Endi bu holatda ushbu kod blokidan oldin FindClosestIndex() kodini hech qachon qaytarmasligiga ishonch hosil qilish uchun ba'zi tekshiruvlar qildim. Bu mumkin emas. Biroq, FindClosestIndex dagi mantiq juda murakkab, shuning uchun hech qanday taxmin qilinmagan ba'zi bir noyob burchakda buglarning hali topilmaganligi va hatto kodim to'g'ri bo'lsa ham FindClosestIndex 0 noto'g'ri qaytishi mumkin.

0 qaytarsa, _data [index - 1] iborasini ArgumentOutOfRangeException olaman. Men bu istisnolarni berkitib qo'yishim mumkin edi, lekin buni amalga oshirishni xohlayman:

if (index == 0)
    throw new ApplicationLogicException("There is a bug that caused FindClosestIndex to return an int <= 0 when it shouldn't have.");

Agar sizning kodingiz xato holatini aniqlasa, bu maxsus istisnodan foydalanish amaliyotini tavsiya qilasizmi? Bunday vaziyatga tushganda nima qilasiz?

1

1 javoblar

Shaxsan men shunga o'xshash maxsus istisnolarni kiritmoqchiman. Bu prezervativ argumentiga o'xshaydi: bunga ega bo'lish yaxshiroqdir, bunga muhtoj emas va kerak emas. Agar ro'y beradigan nodir holatda, jumladan, maxsus istisno xabari bo'lsa, mantiqiy xatolarni kuzatishni osonlashtiradi, ammo bajariladigan faylingiz faqat kichikroq. Aks holda, ArgumentOutOfRangeException har qanday joyda bo'lishi mumkin. Istisno qo'shish uchun zarur bo'lgan vaqt sizdan xatoni kuzatib borish uchun kerak bo'lgan vaqtdan ancha ustundir.

1
qo'shib qo'ydi