русский

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

5168  1 2 3 4 5 6 7 8 alle
Срыв покровов патриот10.04.24 21:23
NEW 10.04.24 21:23 
in Antwort AlexNek 09.04.24 21:32
public const string NullTaxId = "TaxID does not exist";

серьёзно? И потом такой мусор напечатать на каком-нибудь счете?

Когда-то это был форум программистов (с)

#21 
Бесконечный цикл постоялец10.04.24 21:24
NEW 10.04.24 21:24 
in Antwort Murr 10.04.24 01:50
Нее, нельзя.Если НУЛЛ - значит - НУЛЛ. т.е. вообще не назнаался.А как его представить как предложено то надо как то регламентировать невозможность его введения пользователем... тем самым дублируя НУЛЛ.

Постепенно этот холивар переходит в соседний: null vs. 0 vs. "" vs. "Тут ничего нет"



#22 
Срыв покровов патриот10.04.24 21:26
NEW 10.04.24 21:26 
in Antwort AlexNek 09.04.24 21:37
Предполагаю, что если прога вылетает, то это именно то что хочет увидеть пользователь спок

а кто сказал, что прога будет вылетать?

Если ты не проверяешь полученное значение или не оборачиваешь вызов в try-catch, то сам дурак.

#23 
AlexNek патриот10.04.24 22:01
AlexNek
NEW 10.04.24 22:01 
in Antwort Срыв покровов 10.04.24 21:23
серьёзно?

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

И почему лучше в каких-то местах проверять на null и не проверять на NullTaxId?

Дело то ведь не в одном конкретном случае, а в "глобальной" проблеме.

#24 
AlexNek патриот10.04.24 22:04
AlexNek
NEW 10.04.24 22:04 
in Antwort Бесконечный цикл 10.04.24 21:24
этот холивар

ну так с самого начала об этом и говорилось, а то уж сколько времени никаких сообщений вообще не было.

Хоть можно узнать различные точки зрения, тоже иногда полезно

#25 
AlexNek патриот10.04.24 22:13
AlexNek
NEW 10.04.24 22:13 
in Antwort Срыв покровов 10.04.24 21:26
Если ты не проверяешь полученное значение

Ну так собственно в этот то и есть проблема.

Проверять х раз на null где только пользуем или на nullObject только там где действительно надо.

А ведь присваивание может происходить в одном месте, а использование в другом и ищи потом откуда там null.


не оборачиваешь вызов в try-catch

тут возникает следующих вопрос. А если указатель используется множество раз зачем его постоянно проверять, не проще ли один раз сказать - "фигвам нету такого ид тута"

И всё сразу ясно, в этом месте проблема возникла. А не ждать когда указатель понадобится, а потом сказать - "получили нулевой указатель".

#26 
alex445 патриот11.04.24 06:44
NEW 11.04.24 06:44 
in Antwort AlexNek 10.04.24 22:01, Zuletzt geändert 11.04.24 06:48 (alex445)
И почему лучше в каких-то местах проверять на null и не проверять на NullTaxId?

Сколько видел кода - любое введение своих собственных обозначений для "налл", "нуль" и прочего заставляет проверять кроме стандартных обозначений ещё и свои собственные. Т.е. просто прибавляется работы.


Т.е. вместо привычных условных

if (null)

else if (0)


становится

if (null)

else if (0)

else if (empty)

else if (whateverAdditionalDesignation1)

else if (whateverAdditionalDesignation2)

...


Причём все варианты, кроме двух первых, обычно сводятся к двум первым. Т.е. все последующие проверки, кроме двух первых, избыточны.


По-моему, функция возврата айди должна возвращать айди. Если он может быть налловым по типу данных - пусть будет налловым. Функция возврата айди не знает контекста своего вызова (мы же все такие ООП, солиды, банды четырёх и прочие дяди Бобы?), значит контекст должен привноситься где-то снаружи неё - там, где эта функция вызывается. Вот по месту вызова и обрабатывайте этот налл - бросайте исключение (может даже кастомного типа), пишите содержательное сообщение, логируйте и прочее.

#27 
Программист коренной житель11.04.24 08:57
NEW 11.04.24 08:57 
in Antwort AlexNek 10.04.24 18:06
Варианты есть? При каких случаях что лучше использовать?

Так с ходу сложно придумать нормальный пример.

Попробую сформулировать так: если null не является ошибкой, то можно подумать над возвратом null объекта.


Например, если у тебя есть фабрика, которая создает объект для доступа к БД, то, в случае если фабрика по какой-то причине не может создать этот объект, нужно возвращать null, т.к. без БД жизни у программы нет :) И чем раньше мы пробросим ошибку наверх, тем лучше.

Если же null - валидный ответ системы, то null объект может оказаться очень полезным. Например, ты ищешь клиента по фамилии. Вбиваешь фамилию, клацаешь "Дальше". Если клиентов с такой фамилией несколько, то появляется список с выбором. Если такой клиент один, то сразу открываются данные клиента. Если клиента нет, то сразу открывается страница для ввода нового клиента. При таком юз-кейсе имеет смысл сделать null объект.


Собственно говоря, объект с дефолтным состоянием по сути и является null объектом. И такой подход используется довольно часто - создаем объект, после чего "подправляем" пару (из 100500) полей и в бой :)

#28 
alex445 патриот11.04.24 13:39
NEW 11.04.24 13:39 
in Antwort Программист 11.04.24 08:57
Вбиваешь фамилию, клацаешь "Дальше". Если клиентов с такой фамилией несколько, то появляется список с выбором. Если такой клиент один, то сразу открываются данные клиента.

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


Программист думает одно, но он часто ошибается, т.к. не работает со своей программой постоянно. Думает, что сразу показывать единственного пользователя удобно. Нихрена не удобно, если я готовлюсь получить список (руки уже в нужных местах на мыше и клаве, в голове паттерн - куда подвести мышь на следующем экране и нажать).

#29 
Программист коренной житель11.04.24 14:10
NEW 11.04.24 14:10 
in Antwort alex445 11.04.24 13:39
Зачем так делать?

Это просто пример, когда подход с null объектом становится более оправданным.


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

Все зависит от конкретного юз-кейса.

Может быть реализовано несколько вывовод поиска.

Например, если было введено 3 или меньше знаков, то пользователь может нажать "Enter" и перейдет к списку.

Если больше 3 знаков то начинает работать всплывающее меню/автозаполнение. При этом если во всплывающем списке больше одного айтема, то по "Enter" будет переход к списку. Если в списке ровно 1 айтем, то редактирование этого айтема. Если же список пуст, то по "Enter" переходим к созданию нового клиента.


Такой подход вполне может сократить количество кликов. Ну и далеко не все и не всегда работают с мышью ;)

#30 
7495 старожил11.04.24 15:38
7495
NEW 11.04.24 15:38 
in Antwort AlexNek 10.04.24 22:04
этот холивар
ну так с самого начала об этом и говорилось, а то уж сколько времени никаких сообщений вообще не было.
Хоть можно узнать различные точки зрения, тоже иногда полезно


Вот ведь негодяй, сам запретил тут писать о программировании квантовых программ, сам всех разогнал! зло

А теперь приходит и говорит - а давайте устроим холивары "виндавс против линукса, интел против амд" итдт итп....


*****


По теме нулей, когда блокчейн возвращет нули - это грустно! печально! гораздо веселей когда возвращает числа!


сравните картинки:




это уже бабосиками, так гораздо веселей:




А теперь рассказывайте, как можно зациклить списки : https://foren.germany.ru/showmessage.pl?Number=40889039&Bo...

Fragen und Antworten - Программируем калькулятор пособий для беженцев вместе.
#31 
AlexNek патриот11.04.24 17:32
AlexNek
NEW 11.04.24 17:32 
in Antwort 7495 11.04.24 15:38
сам запретил тут писать
Вы явно перепутали форумы, к сожалению, здесь нет модераторов и некому даже пожаловаться на неконтролируемое распространение блокчейна и всякой подобное херни. В противном случае я бы с удовольствием давно забанил вас.
#32 
AlexNek патриот11.04.24 17:43
AlexNek
NEW 11.04.24 17:43 
in Antwort alex445 11.04.24 06:44
Сколько видел кода

интересно узнать абсолютные цифры смущ


Функция возврата айди не знает контекста своего вызова

Судя по тому, что обо всём что в скобках вам глубоко плевать, мне сложно понять что имелось в виду


Зачем обычному мапу что то еще знать?


Вот по месту вызова и обрабатывайте этот налл - бросайте исключение

ну так об этом и идет речь, только похоже вы хотите бросать исключение после вызова функции, а смысл?

Зачем повторять одну и туже работу при каждом вызове функции?

#33 
AlexNek патриот11.04.24 17:48
AlexNek
NEW 11.04.24 17:48 
in Antwort Программист 11.04.24 08:57
в случае если фабрика по какой-то причине не может создать этот объект, нужно возвращать null

А почему null, а не сразу исключение, тогда сразу всё заткнется без каких то дальнейших шагов.


И чем раньше мы пробросим ошибку наверх, тем лучше.

именно так

#34 
alex445 патриот11.04.24 18:10
NEW 11.04.24 18:10 
in Antwort Программист 11.04.24 14:10

далеко не все и не всегда работают с мышью ;)

Я работаю и мышью, и клавой. Мышью двигаешь в нужные места интерфейса, клавой жмёшь хоткеи. Когда привык к софту и знаешь хоткеи, работа идёт быстро.


#35 
Murr патриот11.04.24 18:23
Murr
NEW 11.04.24 18:23 
in Antwort AlexNek 11.04.24 17:48

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

#36 
AlexNek патриот11.04.24 20:57
AlexNek
NEW 11.04.24 20:57 
in Antwort Murr 11.04.24 18:23
А почему сразу должно быть исключение

Предположим обратное...

Получили, что значение объекта базы нулевое, что делаем дальше?

if(db == null) ...

#37 
MrSanders коренной житель11.04.24 21:05
NEW 11.04.24 21:05 
in Antwort AlexNek 09.04.24 18:52
Можно ли возвращать null из функции?

Вот ты ж, изобретатели велосипедов...

В шарпе можно. Но не нужно. В хаскеле / sml / tasm нельзя. Да даже в паскале нельзя. Я ответил на твой вопрос? :)


Лично я лично в яве, чтобы сигнализировать отсутствие значения, задекларирую что метод возвращает Optional. Это не хаскеловский Maybe, но тоже можно жить.

#38 
Murr патриот11.04.24 21:47
Murr
NEW 11.04.24 21:47 
in Antwort AlexNek 11.04.24 20:57

То, что предписано для не назначенного значения.

#39 
AlexNek патриот11.04.24 21:55
AlexNek
NEW 11.04.24 21:55 
in Antwort MrSanders 11.04.24 21:05
В шарпе можно. Но не нужно....Я ответил на твой вопрос?

Не совсем. просто как мнение.

Нужны правила отчего не нужно. Запрещаем вообще или есть какие то исключительные случаи?


Да даже в паскале нельзя.

В каком именно?

https://www.oreilly.com/library/view/delphi-in-a/156592659...

#40 
1 2 3 4 5 6 7 8 alle