Deutsch

Можно ли возвращать null из функции?

1850  1 2 3 4 5 6 7 все
AlexNek патриот09.04.24 18:52
AlexNek
09.04.24 18:52 

Ну вот, вроде нашел тему для большого базара улыб

Одни говорят нет, при проблемах бросаем exception или возвращаем null объект.

Другие говорят да, без этого и жить то невозможно.


А есть ли какая то золотая середина?

#1 
alex445 патриот09.04.24 20:27
NEW 09.04.24 20:27 
в ответ AlexNek 09.04.24 18:52

Всё можно - зависит от задачь, условий, обстоятельств. Просто так, из принципа что-то запрещать или разрешать - путь в никуда.

#2 
AlexNek патриот09.04.24 20:36
AlexNek
NEW 09.04.24 20:36 
в ответ alex445 09.04.24 20:27
Просто так, из принципа

Ну как бы не из принципа, а есть достаточно много веских оснований так не делать.

Однако исторически сложилось всё по другому.

#3 
Срыв покровов патриот09.04.24 21:04
NEW 09.04.24 21:04 
в ответ AlexNek 09.04.24 20:36

Вот допустим у тебя функция string GetTaxIdByCustomerId(int) и у клиента нет номера?

Кидать исключение уж точно зашквар.

Возвращать пустую строку? Ну, такое.



#4 
AlexNek патриот09.04.24 21:27
AlexNek
NEW 09.04.24 21:27 
в ответ Срыв покровов 09.04.24 21:04

Можно начать с того, что данная функция просто не имеет права возвращать null

string Get...

А после npex может быть или сразу или где-нибудь в другом месте. То бишь везде нужно делать дополнительные проверки.

Иначе говоря знание того что у клиента нет номера откладывается на неопределённое время, при этом без дополнительных проверок пользователь увидит просто трах тирибах.

#5 
alex445 патриот09.04.24 21:32
NEW 09.04.24 21:32 
в ответ AlexNek 09.04.24 21:27, Последний раз изменено 09.04.24 21:33 (alex445)
Можно начать с того, что данная функция просто не имеет права возвращать null
string Get...

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

#6 
AlexNek патриот09.04.24 21:32
AlexNek
NEW 09.04.24 21:32 
в ответ Срыв покровов 09.04.24 21:04
Возвращать пустую строку?

Не обязательно, можно например так:


public const string NullTaxId = "TaxID does not exist";

#7 
alex445 патриот09.04.24 21:34
NEW 09.04.24 21:34 
в ответ AlexNek 09.04.24 21:27
при этом без дополнительных проверок пользователь увидит просто трах тирибах.

А может именно это они и хотят увидеть? Вы проводили опросы в фокус-группах, прежде чем сесть разрабатывать своё приложение?

#8 
AlexNek патриот09.04.24 21:35
AlexNek
NEW 09.04.24 21:35 
в ответ alex445 09.04.24 21:32
такс айди налл

в этом случае должно быть хотя бы так: string? Get..

#9 
AlexNek патриот09.04.24 21:37
AlexNek
NEW 09.04.24 21:37 
в ответ alex445 09.04.24 21:34
А может именно это они и хотят увидеть?

Предполагаю, что если прога вылетает, то это именно то что хочет увидеть пользователь спок

#10 
alex445 патриот09.04.24 21:37
NEW 09.04.24 21:37 
в ответ AlexNek 09.04.24 21:32, Последний раз изменено 09.04.24 21:44 (alex445)
NullTaxId = "TaxID does not exist";

Кто дал вам право вот так легкомысленно приравнивать простой и лаконичный налл и вот это ваше "сочинение на тему", которое в скобках? А другие в вашей команде знают, чем вы тайком занимаетесь, пока тимлид отвернулся?

#11 
alex445 патриот09.04.24 21:41
NEW 09.04.24 21:41 
в ответ AlexNek 09.04.24 21:37
Предполагаю, что если прога вылетает, то это именно то что хочет увидеть пользователь спок

И что? Чем больше вылетает прога, чем больше приходится перезагружать сервер или там ждать коннекта к базе данных, тем больше поводов для кофе-брейка и очень важных обсуждений в переговорках. Перезагружать сервера весело!

#12 
AlexNek патриот09.04.24 21:44
AlexNek
NEW 09.04.24 21:44 
в ответ alex445 09.04.24 21:41

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

#13 
alex445 патриот09.04.24 21:45
NEW 09.04.24 21:45 
в ответ AlexNek 09.04.24 21:44, Последний раз изменено 09.04.24 21:45 (alex445)

Вы мне угрожаете?! зло

Пытаетесь напугать?

#14 
AlexNek патриот09.04.24 21:47
AlexNek
NEW 09.04.24 21:47 
в ответ alex445 09.04.24 21:45

Нет просто уважаю пожелания пользователей бебе

#15 
AlexNek патриот09.04.24 21:50
AlexNek
NEW 09.04.24 21:50 
в ответ alex445 09.04.24 21:37
Кто дал вам право вот так легкомысленно приравнивать простой и лаконичный налл

Не всегда то что кажется простым будет и правильным.


Можно приводить множество примеров как за одну точку зрения, так и за другую.

#16 
Murr патриот10.04.24 01:50
Murr
NEW 10.04.24 01:50 
в ответ AlexNek 09.04.24 21:32

Нее, нельзя.

Если НУЛЛ - значит - НУЛЛ. т.е. вообще не назнаался.

А как его представить как предложено то надо как то регламентировать невозможность его введения пользователем... тем самым дублируя НУЛЛ.

#17 
Программист коренной житель10.04.24 10:11
NEW 10.04.24 10:11 
в ответ AlexNek 09.04.24 18:52
А есть ли какая то золотая середина?

Нет никакой золотой середины.


Делать null объект на каждый тип - немного перебор. Вместе с тем использование этого паттерна может облегчить понимание логики и упростить архитектуру.


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

#18 
AlexNek патриот10.04.24 18:05
AlexNek
NEW 10.04.24 18:05 
в ответ Murr 10.04.24 01:50
то надо как то регламентировать невозможность его введения пользователем

интересное замечание, хотя нигде и не предполагался ручной ввод. Можно например добавить в конец '\0'

Но проблема то не в этом, а в том какой подход выбрать и при каких критериях, если оба варианта допустимы.

Выбор выдачи null просто похоже на привычку от которой трудно отказаться.

#19 
AlexNek патриот10.04.24 18:06
AlexNek
NEW 10.04.24 18:06 
в ответ Программист 10.04.24 10:11
и каждое решение следует использовать там, где это имеет смысл

Варианты есть? При каких случаях что лучше использовать?

#20 
1 2 3 4 5 6 7 все