Можно ли возвращать null из функции?
Ну вот, вроде нашел тему для большого базара
Одни говорят нет, при проблемах бросаем exception или возвращаем null объект.
Другие говорят да, без этого и жить то невозможно.
А есть ли какая то золотая середина?
Всё можно - зависит от задачь, условий, обстоятельств. Просто так, из принципа что-то запрещать или разрешать - путь в никуда.
Просто так, из принципа
Ну как бы не из принципа, а есть достаточно много веских оснований так не делать.
Однако исторически сложилось всё по другому.
Вот допустим у тебя функция string GetTaxIdByCustomerId(int) и у клиента нет номера?
Кидать исключение уж точно зашквар.
Возвращать пустую строку? Ну, такое.
Можно начать с того, что данная функция просто не имеет права возвращать null
string Get...
А после npex может быть или сразу или где-нибудь в другом месте. То бишь везде нужно делать дополнительные проверки.
Иначе говоря знание того что у клиента нет номера откладывается на неопределённое время, при этом без дополнительных проверок пользователь увидит просто трах тирибах.
Можно начать с того, что данная функция просто не имеет права возвращать null
string Get...
Функция возвращает такс айди, каким бы он неприятным, вонючим, неухоженным ни оказался. Если такс айди налл, надо вернуть налл, а не строить тут из себя...
Возвращать пустую строку?
Не обязательно, можно например так:
public const string NullTaxId = "TaxID does not exist";
при этом без дополнительных проверок пользователь увидит просто трах тирибах.
А может именно это они и хотят увидеть? Вы проводили опросы в фокус-группах, прежде чем сесть разрабатывать своё приложение?
А может именно это они и хотят увидеть?
Предполагаю, что если прога вылетает, то это именно то что хочет увидеть пользователь
NullTaxId = "TaxID does not exist";
Кто дал вам право вот так легкомысленно приравнивать простой и лаконичный налл и вот это ваше "сочинение на тему", которое в скобках? А другие в вашей команде знают, чем вы тайком занимаетесь, пока тимлид отвернулся?
Предполагаю, что если прога вылетает, то это именно то что хочет увидеть пользователь
И что? Чем больше вылетает прога, чем больше приходится перезагружать сервер или там ждать коннекта к базе данных, тем больше поводов для кофе-брейка и очень важных обсуждений в переговорках. Перезагружать сервера весело!
В таком случае могу только пожелать что бы после окончания набора боольшого текста ворд вылетел или после часового создания картинки то же самое произошло и редактором и т.п.
Кто дал вам право вот так легкомысленно приравнивать простой и лаконичный налл
Не всегда то что кажется простым будет и правильным.
Можно приводить множество примеров как за одну точку зрения, так и за другую.
Нее, нельзя.
Если НУЛЛ - значит - НУЛЛ. т.е. вообще не назнаался.
А как его представить как предложено то надо как то регламентировать невозможность его введения пользователем... тем самым дублируя НУЛЛ.
А есть ли какая то золотая середина?
Нет никакой золотой середины.
Делать null объект на каждый тип - немного перебор. Вместе с тем использование этого паттерна может облегчить понимание логики и упростить архитектуру.
Как обычно, серебрянных пуль не существует и каждое решение следует использовать там, где это имеет смысл.
то надо как то регламентировать невозможность его введения пользователем
интересное замечание, хотя нигде и не предполагался ручной ввод. Можно например добавить в конец '\0'
Но проблема то не в этом, а в том какой подход выбрать и при каких критериях, если оба варианта допустимы.
Выбор выдачи null просто похоже на привычку от которой трудно отказаться.
и каждое решение следует использовать там, где это имеет смысл
Варианты есть? При каких случаях что лучше использовать?