Бросать или не бросать - PullRequest
       26

Бросать или не бросать

17 голосов
/ 25 марта 2010
//
// To Throw
void PrintType(object obj)
{
    if(obj == null) 
    {
        throw new ArgumentNullException("obj")
    }
    Console.WriteLine(obj.GetType().Name);    
}

//
// Not to Throw
void PrintType(object obj)
{
    if(obj != null)
    {
        Console.WriteLine(obj.GetType().Name);
    }
}

Какой принцип соблюдать?

Лично я предпочитаю первый один из них, скажем для разработчиков (уведомляется о каждой "аномалии"). Второй - скажем удобный (пусть пользователь продолжит работу, даже если "внутри" не все правильно).

Я думаю, что гораздо сложнее найти ошибки и ошибки на этапе обслуживания, когда вы молча позволяете этому продолжаться. Если что-то идет не так, вы сразу не получаете уведомления, и иногда у вас возникают ошибки вдали от основной причины ошибки, и вы тратите много времени на ее поиск.

Что вы думаете?

Ответы [ 14 ]

0 голосов
/ 25 марта 2010

Id для

void PrintType (объектный объект) { Console.WriteLine (obj.GetType () Имя.); }

0 голосов
/ 25 марта 2010

Это действительно зависит от ваших инвариантов. Если параметром является optiona, тогда игнорирование параметра null вполне подойдет, но если этот параметр требуется, то это скроет ошибку в вашем приложении. Кроме того, в зависимости от языка, если инвариант является достаточно плохим, вы можете рассмотреть третий вариант: отменить приложение.

Все дискуссии о том, использовать или нет исключения, всегда можно сопоставить с решением о том, является ли ситуация исключительной или нет, и, если она является исключительной, выбрасывание или, скорее, прерывание приложения зависит от того, восстанавливаемый или нет.

0 голосов
/ 25 марта 2010

В этом конкретном примере ничего не давать принтеру - все равно, что сказать «ничего не печатать», и, следовательно, работать как следует.

Я знаю, что это пример, но я просто хочу пояснить, что это относительно.

Если ваш код каким-то образом отображает дружественные пользователю сообщения об исключениях, какая разница? первый будет как для разработчика, так и для пользователя.

0 голосов
/ 25 марта 2010

Подумайте об использовании шаблона Null Object очень полезно, чтобы не загромождать ваш код при помощи try-catch, нулевых проверок (или не дай бог проглоченных ошибок).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...