Что кошернее возвращать, null или "" ?
От: Dog  
Дата: 09.11.04 09:16
Оценка:
Необходимо вернуть результат функции и виде строки. Сабж.
... << RSDN@Home 1.1.3 stable >>

12.11.04 11:04: Перенесено из '.NET'
Re: Что кошернее возвращать, null или "" ?
От: Сантехник Беларусь  
Дата: 09.11.04 09:24
Оценка:
Здравствуйте, Dog, Вы писали:

Dog>Необходимо вернуть результат функции и виде строки. Сабж.


Смотря по смыслу: если у тебя пустая строка не в ходит в набор допустимых значений, то, имхо, "" лучше.
... << RSDN@Home 1.1.4 beta 3 rev. 225>>
Re: Что кошернее возвращать, null или "" ?
От: Воронков Василий Россия  
Дата: 09.11.04 10:01
Оценка: 30 (5) +1
Здравствуйте, Dog, Вы писали:

Dog>Необходимо вернуть результат функции и виде строки. Сабж.


У МС в гайдлайнах написано что вместо строк null-ы лучше не возвращать. Т.е. исходить из того, что такой клиентский код не должен бросать исколючение:

if (someObj.StringValue.Length == 0)
{
...
}
Что кошернее возвращать, null или &quot;&quot; ?
От: Аноним  
Дата: 09.11.04 09:23
Оценка:
Это смотря как удобнее после вызова проверять:
if (ret != null)
или
if (ret != "")
в общем случае null более широкое понятие, чем пустая строка, поэтому это предпочтительнее визуально, код будет одинаково выглядеть для всех проверок значений ссылочных типов, == или != null.
Sincerely yours,
Valery Chesnokov
<A href=http://chv.tele-kom.ru>http://chv.tele-kom.ru</A>


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Что кошернее возвращать, null или &quot;&quot; ?
От: Аноним  
Дата: 09.11.04 09:35
Оценка:
предлагаю тогда String.Empty чтобы вы не ссорились

Автор благодарит русский алфавит за предоставленные буквы.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Что кошернее возвращать, null или "" ?
От: kondrat_kiev  
Дата: 09.11.04 10:36
Оценка:
Здравствуйте, Dog, Вы писали:

Dog>Необходимо вернуть результат функции и виде строки. Сабж.


Если необходимо результат вернуть ввиде строки, то просто нужно поставить проверку внутренней логики функции.
И если условие не удослетворяеться по тем или иным причинам, то возвращать string.Empty.
... << RSDN@Home 1.1.3 stable >>
Re: Что кошернее возвращать, null или "" ?
От: Banch  
Дата: 09.11.04 11:06
Оценка: 1 (1) -1 :))
Здравствуйте, Dog, Вы писали:

Dog>Необходимо вернуть результат функции и виде строки. Сабж.


вообще лучще кидать исключение, чтоб никаких неоднозначностей не было
Re[2]: Что кошернее возвращать, null или "" ?
От: Dog  
Дата: 09.11.04 11:29
Оценка:
Dog>>Необходимо вернуть результат функции и виде строки. Сабж.
ВВ>У МС в гайдлайнах написано что вместо строк null-ы лучше не возвращать. Т.е. исходить из того, что такой клиентский код не должен бросать исколючение:
ВВ>if (someObj.StringValue.Length == 0)
ВВ>{
ВВ> ...
ВВ>}
Нечто подобное было написано в "Java. Эффективное программирование", вроде. Сам я склоняюсь к тому же мнению. Вот только что-то с утра проглючило
... << RSDN@Home 1.1.3 stable >>
Re[2]: Что кошернее возвращать, null или "" ?
От: migel  
Дата: 09.11.04 11:35
Оценка:
Здравствуйте, Banch, Вы писали:

Dog>>Необходимо вернуть результат функции и виде строки. Сабж.


B>вообще лучще кидать исключение, чтоб никаких неоднозначностей не было

Далеко не лучше, ой как не лучше
... << RSDN@Home 1.1.4 beta 3 rev. 214>>
Re[3]: Что кошернее возвращать, null или "" ?
От: Banch  
Дата: 09.11.04 12:37
Оценка:
Здравствуйте, migel, Вы писали:

B>>вообще лучще кидать исключение, чтоб никаких неоднозначностей не было

M>Далеко не лучше, ой как не лучше
почему?
конечно бывают случаи когда лучше возвращать -1 или "", но они как раз крайне редкие
Re[2]: Что кошернее возвращать, null или "" ?
От: Сантехник Беларусь  
Дата: 09.11.04 12:48
Оценка: +4
Здравствуйте, Banch, Вы писали:

B>вообще лучще кидать исключение, чтоб никаких неоднозначностей не было


Исключения нужно выбрасывать в исключительной ситуации, т.е. когда нарушается нормальный ход выполнения. Если же логикой программы допускается возврат пустой строки, то исключения ни к чему, имхо.
... << RSDN@Home 1.1.4 beta 3 rev. 225>>
Re[4]: Что кошернее возвращать, null или "" ?
От: migel  
Дата: 09.11.04 13:18
Оценка:
Здравствуйте, Banch, Вы писали:

B>Здравствуйте, migel, Вы писали:


B>>>вообще лучще кидать исключение, чтоб никаких неоднозначностей не было

M>>Далеко не лучше, ой как не лучше
B>почему?
B>конечно бывают случаи когда лучше возвращать -1 или "", но они как раз крайне редкие
Нельзя строить логику обработки данных на исключениях
А вообще по этому поводу уж столько копий сломано, что повторяться не имеет смысла — ибо Гугл рулит
... << RSDN@Home 1.1.4 beta 3 rev. 214>>
Re: Что кошернее возвращать, null или "" ?
От: gwg-605 Россия  
Дата: 10.11.04 21:30
Оценка:
Я предпочитаю возвращать null.

Я не единыжды читал, что не стоит этого делать, но толковых доводов почему этого не стоит делать, так и не услышал.

Мне кажется так понятней и быстрее
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Re: Что кошернее возвращать, null или &quot;&quot; ?
От: Аноним  
Дата: 10.11.04 22:27
Оценка: +2
>Я не единыжды читал, что не стоит этого делать, но толковых доводов почему этого не стоит делать, так и не услышал.

Если в любом случае будет возвращаться string, пусть и пустой, у возвращаемого значения всегда можно без приключений (NullReferenceException) и лишних проверок вызывать методы string'a.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re: Что кошернее возвращать, null или "" ?
От: Nuald Россия http://nuald.blogspot.com
Дата: 11.11.04 00:26
Оценка:
Здравствуйте, Dog, Вы писали:

Dog>Необходимо вернуть результат функции и виде строки. Сабж.


Паттерн "Special Case" (из Фаулера "Архитектура корпоративных приложений"). Введите особый объект, отвечающий за особую ситуацию: в частном случае пустая строка, но лучше ввести какую-либо константу (и с ней потом сравнивать), потому что пустая строка в процессе разработки может стать валидным объектом, имеющим самостоятельное значение.
Re: Что кошернее возвращать, null или &quot;&quot; ?
От: Аноним  
Дата: 11.11.04 05:10
Оценка:
Я так понял, что раз у автора выбор между null и "" значит функция возвращает что-то пустое только в случае неудачи, то есть вызывающий код должен вопринять подобный возврат как своеобразный код ошибки. Бросать Exception — некорректно, так как исключением это является для вызывающего а не для вызываемого кода.
Если взглянуть на стандартную библиотеку — там о неудаче принято сообщать при помощи null, а не пустых строк или Special Case, так как null это однозначно, а "" может иметь большее значение.
Так что если "" или null это сигнал о проблеме (типа что-то не найдено) лучше вернуть null.
Special Case хорошо, но тогда и вызывающий код и вызываемый должны иметь общее знание о некоей константе, то есть код будет более связанным.
Special Case хорош тогда, когда валидный экземпляр объекта должен быть возвращен В ЛЮБОМ САМОМ РАСПЛОХОМ СЛУЧАЕ, или когда используются какие-то метки или теги, определяющие логику обработки, так что я за null.
Насчет somestring.Length==0 vs somstring=="" это все понятно, что первое лучше, но это не значит, что something!=null чем-то хуже. Тем более что под проверку на Null заточен синтаксис Debug,Trace,NUnit и т.д.
То есть:
string res = myFunk();
Assert.IsNotNull(res); //ИМХО понятный и почти что в декларативном стиле код
if(res.Length==0)
{
firstLogic();
}
else
{
secondLodgik();
}

или даже

string res;
Assert.IsNotNull(res=myFunk());

ИМХО Null на то и Null, при этом это не БД, издержек на доступ и сверку с Null нет...


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[5]: Что кошернее возвращать, null или "" ?
От: StanislavB  
Дата: 11.11.04 11:34
Оценка:
Здравствуйте, migel, Вы писали:

B>>>>вообще лучще кидать исключение, чтоб никаких неоднозначностей не было

M>>>Далеко не лучше, ой как не лучше
M>Нельзя строить логику обработки данных на исключениях
Вот я пишу класс для коннекта с сервером. Метод Login, например, у меня как раз бросает исключение. (я, правда, думаю, стоит ли писать свои классы исключений или оставить Exception). Не через код возврата же работать...
Так реализованы функции типа Connect в FCL.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[6]: Что кошернее возвращать, null или "" ?
От: Banch  
Дата: 11.11.04 17:33
Оценка: 1 (1)
Здравствуйте, StanislavB, Вы писали:

SB>я, правда, думаю, стоит ли писать свои классы исключений или оставить Exception


есть хороший способ бросать только одно свое исключение, а в нем сделать свойство по которому различать что именно произошло
плюсы:
избавляет от постоянно написания классов эксепшнов под каждый чих
удобно для логирования и анализа эксепшнов, потому как понятно где лежат тип и дополнительные параметры
минусы:
нельзя четко ловить нужное исключение
но можно написать несколько методов для фильтрации
например:
catch( Exception e )
{
  MyExc.CheckMyExc( e, "MyTypeZZZ" ); //прокидывает эксепшн дальше, если это не MyExc
  
  // тут обработка того, если это действительно MyExc с типом "MyTypeZZZ"
}

получается почти как на VB, где есть
catch ... with
Re: Что кошернее возвращать, null или &quot;&quot; ?
От: Аноним  
Дата: 11.11.04 17:38
Оценка: -2 :)
Простой довод (в случае с .NET): не производится упаковка/распаковка строки.


данное сообщение получено с www.gotdotnet.ru
ссылка на оригинальное сообщение
Re[7]: Что кошернее возвращать, null или "" ?
От: GarryIV  
Дата: 11.11.04 18:52
Оценка:
Hello, Banch!

SB>> я, правда, думаю, стоит ли писать свои классы исключений или оставить

SB>> Exception

B> есть хороший способ бросать только одно свое исключение, а в нем сделать

B> свойство по которому различать что именно произошло плюсы:
B> избавляет от постоянно написания классов эксепшнов под каждый чих
B> удобно для логирования и анализа эксепшнов, потому как понятно где лежат
B> тип и дополнительные параметры минусы:
B> нельзя четко ловить нужное исключение
B> но можно написать несколько методов для фильтрации
B> например:
B>
 B> catch( Exception e )
 B> {
 B>   MyExc.CheckMyExc( e, "MyTypeZZZ" ); //прокидывает эксепшн дальше, если
 B> это не MyExc

 B>   // тут обработка того, если это действительно MyExc с типом
 B> "MyTypeZZZ" }
 B>

B> получается почти как на VB, где есть
B> catch ... with

Что то я ничего хорошего в этом способе не вижу... Вместо того чтоб один раз написать класс исключения ты вынужден в каждом обработчике делать лишние телодвижения... Да и помещать код логгирования внутрь исключения мне как-то не нравиться.

WBR, Igor Evgrafov.
Posted via RSDN NNTP Server 1.9 gamma
WBR, Igor Evgrafov
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.