25.07.2017 Views

Intro-CSharp-Book-v2015

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Глава 12. Обработка на изключения 451<br />

}<br />

reader = new StreamReader(filename);<br />

while (!reader.EndOfStream)<br />

{<br />

string line = reader.ReadLine();<br />

Console.WriteLine(line);<br />

}<br />

reader.Close();<br />

}<br />

catch (FileNotFoundException)<br />

{<br />

Console.WriteLine("The file '{0}' does not exist.", filename);<br />

}<br />

finally<br />

{<br />

if (reader != null)<br />

{<br />

reader.Close();<br />

}<br />

}<br />

По принцип вторият вариант се счита за по-лош, тъй като изключенията<br />

трябва да се ползват за изключителни ситуации, а липсата на файла в<br />

нашия случай е по-скоро обичайна ситуация.<br />

Недобра практика е да се разчита на изключения за обработка на очаквани<br />

събития и от още една гледна точка: производителност. Хвърлянето<br />

на изключение е бавна операция, защото трябва да се създаде обект,<br />

съдържащ изключението, да се инициализира stack trace, да се открие<br />

обработчик на това изключение и т.н.<br />

Точната граница между очаквано и неочаквано<br />

поведение е трудно да бъде ясно дефинирана. Най-общо<br />

очаквано събитие е нещо свързано с функционалността<br />

на програмата. Въвеждането на грешно име на файла е<br />

пример за такова. Спирането на тока докато работи<br />

програмата, обаче не е очаквано събитие.<br />

Да хвърляме ли изключения на потребителя?<br />

Изключенията са неясни и объркващи за обикновения потребител. Те<br />

създават впечатление за лошо написана програма, която "гърми неконтролирано"<br />

и "има бъгове". Представете си какво ще си помисли една възрастна<br />

служителка (с оглед на дадения пример), която въвежда фактури,<br />

ако внезапно приложението й покаже следния диалог:

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!