Здравствуйте, Аноним, Вы писали:
А>Если взглянуть на стандартную библиотеку — там о неудаче принято сообщать при помощи null, а не пустых строк или Special Case, так как null это однозначно, а "" может иметь большее значение.
Кто сказал, что стандартная библиотека — образец для подражания? О вреде null много сказано, повторяться не хочется...
А>Special Case хорошо, но тогда и вызывающий код и вызываемый должны иметь общее знание о некоей константе, то есть код будет более связанным.
А какая разница — будет ли завязка на null или константу. Только в первом случае, какой-нить новенький программист придет, и попробует разыменовать этот null. И если Special Case может просто показать окошечко с ошибкой или выкинуть внятный Assert, то обращение к null выкинет малоинформативное исключение, после чего пользователи будут брызгать слюной, стучать кулаками по столу и звонить в два часа ночи разработчику...
А>Special Case хорош тогда, когда валидный экземпляр объекта должен быть возвращен В ЛЮБОМ САМОМ РАСПЛОХОМ СЛУЧАЕ, или когда используются какие-то метки или теги, определяющие логику обработки, так что я за null.
По закону Мерфи все случаи относятся к вышеуказанному
Здравствуйте, Rafiki, Вы писали:
R>Простой довод (в случае с .NET): не производится упаковка/распаковка строки.
Строки не боксятся ...
С Уважением, Andir!
using(RSDN@Home 1.1.4 beta 3){/* Работаем! */}
Здравствуйте, GarryIV, Вы писали:
GIV>Вместо того чтоб один раз написать класс исключения ты вынужден в каждом обработчике делать лишние телодвижения...
я пытался показать как раз обратное
вместо того чтобы писать 20 классов на 20 вариатов ошибок в одной библиотеке пишщется всего один универсальный класс
GIV>Да и помещать код логгирования внутрь исключения мне как-то не нравиться.
код логгирования туда помещять не надо, просто из-за того что эксепшн универсальный его становиться проще логгировать и анализировать
например есть исключение "MyError11" и одним параметром
в коде анализатора
Analize( MyExc exc )
{
if( exc.Code == "MyError11" && exc.Params[ 0 ] == "MyData111" )
{
Console.WriteLine( "error in data111" );
}
}
это вместо того чтобы делать
Analize( MyExc exc )
{
if( exc is MyExc11 && ((MyExc23)exc).Data == "MyData111" )
{
Console.WriteLine( "error in data111" );
}
}