powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Метод нашел 0 искомых записей. Это успешное завершение ?
25 сообщений из 50, страница 1 из 2
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939260
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

Давно мучаюсь одним вопросом. Если метод, ищущий что-то, где-то - ничего не нашел по указанному запросу, то это успешный результат выполнения или нет ?

Код: c#
1.
result.Success == True ?


В различных, увиденных, исходных кодах, встречал и так и так.

Как это решить для каждого конкретного решения ? Есть идеи и заметки ?
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939357
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
смотря какой метод))
Код: sql
1.
list := ДатьСписокБессовестныхДолжниковБанка();


- нашёл 0 записей. Это успешно?
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939411
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProBiotek,

Запрос "Найти ПЕРВУЮ запись, удовлетворяющую критериям ..." ничего не нашел - это НЕ УСПЕХ! Одна запись обязательно должна быть на выходе.

Запрос "Найти записи, удовлетворяющие критериям ..." ничего не нашел - это УСПЕХ! Множество записей может быть ПУСТЫМ на выходе.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939459
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
Все зависит от заложенной бизнес логики в приложении и как Вы потом собираетесь result.Success обрабатывать .
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939465
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sereginsereginProBiotek,

Запрос "Найти ПЕРВУЮ запись, удовлетворяющую критериям ..." ничего не нашел - это НЕ УСПЕХ! Одна запись обязательно должна быть на выходе.

Запрос "Найти записи, удовлетворяющие критериям ..." ничего не нашел - это УСПЕХ! Множество записей может быть ПУСТЫМ на выходе.

По сути все упирается в одно мелкое слово. Мне кажется что это какое-то хрупкое решение.

Как вообще решаете этот вопрос ? Как решаете когда что нужно ? Хочу понять некую базовую логику, чтобы больше никогда вообще не задаваться этим вопросов вообще, а действовать на основании некое четкого алгоритма.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939515
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
ProBiotekПривет.

Давно мучаюсь одним вопросом. Если метод, ищущий что-то, где-то - ничего не нашел по указанному запросу, то это успешный результат выполнения или нет ?



Если метод называется ИскатьЗапись - то НичегоНеНашел - правильный ответ.

Если метод называется НайтиЗапись - то НичегоНеНашел - это исключение.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939563
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek,
ничего не поделать - требуется соглашения между всеми программистами административными мерами.
Например, в списках возвращать список.Count=0.
Но ни в коем случае не Null.
И т.д.
Возрат процедурой raise из той же области вопросов.
ЗЫ.
Планируется ввести в ЯП высокого уровня спец пометки(аннотации) для таких вещей (контракт). Но пока не везде и не однозначно.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939605
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F#ProBiotekПривет.

Давно мучаюсь одним вопросом. Если метод, ищущий что-то, где-то - ничего не нашел по указанному запросу, то это успешный результат выполнения или нет ?



Если метод называется ИскатьЗапись - то НичегоНеНашел - правильный ответ.

Если метод называется НайтиЗапись - то НичегоНеНашел - это исключение.

Имена методов же у нас по английски. У них какая схема в этом случае должна быть (вот эти самые Найти, Искать) ?
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939709
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я видел ораклячую процедуру, возвращающую null в случае, если запись не найдена, и 0, если найдена.
я офигел
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939764
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ProBioteksereginsereginProBiotek,

Запрос "Найти ПЕРВУЮ запись, удовлетворяющую критериям ..." ничего не нашел - это НЕ УСПЕХ! Одна запись обязательно должна быть на выходе.

Запрос "Найти записи, удовлетворяющие критериям ..." ничего не нашел - это УСПЕХ! Множество записей может быть ПУСТЫМ на выходе.

По сути все упирается в одно мелкое слово. Мне кажется что это какое-то хрупкое решение.

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

А не я решаю, пользователь решает что ему важнее:
- найти первую запись - получит сообщение об ошибке
- найти все записи - получит сообщение с пустым списком

Моя задача предоставить инструмент - оба, или какой-то один из них.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939766
sereginseregin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще дополню:
- процедура "Найти первую запись" - работает быстро, но для остальных записей пользователю необходимо повторять запуск процедуры
- процедура "Найти все записи" - работает медленно, но сразу сразу дает все возможные результаты

Только пользователь может решить, какой из процедур выгоднее воспользоваться
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939852
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekНайти,Find/Search
ProBiotekИскать Get
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38939876
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekДавно мучаюсь одним вопросом. Если метод, ищущий что-то, где-то - ничего не нашел по указанному запросу, то это успешный результат выполнения или нет ?
Как это решить для каждого конкретного решения ?

ДЛя конкретного легко очень решить, в общем решить -- невозможно.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38940308
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
ProBiotekИмена методов же у нас по английски. У них какая схема в этом случае должна быть (вот эти самые Найти, Искать) ?

Как договоритесь. Можено search и find, можно find и get
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38941781
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekКак вообще решаете этот вопрос ? Как решаете когда что нужно ? Хочу понять некую базовую логику, чтобы больше никогда вообще не задаваться этим вопросов вообще, а действовать на основании некое четкого алгоритма.
Лично я лет десять как пришёл к следующей системе:

По умолчанию пишется и используется метод getSomething(). Он возвращает something, которое существует и единственно. Если вдруг не существует - возбуждается исключение.


Когда в каком-то месте кода по бизнес-логике имеет смысл ситуация "something не существует", добавляется метод findSomething(). Его отличие в том, что он может вернуть null, и его результат обязательно проверяется в вызывающем коде.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38943934
ProBiotek
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer,

Спасибо.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944400
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotek...
По сути все упирается в одно мелкое слово. Мне кажется что это какое-то хрупкое решение.

...


Хрупкое.
Конечно, название метода должно быть информативным. Но если при переименовании метода должно меняться его поведение - это как-то странно. :)

Для функциональных языков такой проблемы вообще нет - там для разных случаев возвращаются разные типы:

MyStruct getStructByKey(...) - возвращается только конкретная структура; а если не найдено - будет исключение
Option[MyStruct] getStructByKey(...) - явно указано, что результат опционален - может вернуться структура (точнее, обертка Some(MyStruct) ), а может None - признак отсутствия значения.

В нынешних мейнстримовых языках проблема в существовании NULL - значения, совместимого по типу с любыми классами, т.е. нетипизированного по сути.
Сам его изобретатель признался в своей ошибке: "Billion dollars mistake"

Но паттерны Maybe/Option/Nullable реализовать можно в любом языке; где-то проще, где-то сложнее... Посмотрите в этом направлении, может пригодится.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944450
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезНо если при переименовании метода должно меняться его поведение - это как-то странно. :)
Давайте рассмотрим переименование метода giveMoney() в takeMoney()
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944536
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезНо если при переименовании метода должно меняться его поведение - это как-то странно. :)
Давайте рассмотрим переименование метода giveMoney() в takeMoney()

Давайте еще рассмотрим переименование giveMoneyToRecipient() в takeMoneyFromPayer() ?

Переименование идентификаторов - обычный процесс рефакторинга.
Можно вообще называть методы m1() m2() итд, в качестве естественного обсфуцирования кода ))

Так что мое мнение: привязывать поведение методов к правилу написания имени - решение возможное, но "хрупкое".
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944551
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Диезsoftwarerпропущено...
Давайте рассмотрим переименование метода giveMoney() в takeMoney()
Давайте еще рассмотрим переименование giveMoneyToRecipient() в takeMoneyFromPayer() ?
Согласен, пример ровно из той же серии.

ДиезПереименование идентификаторов - обычный процесс рефакторинга.
Безусловно.

ДиезМожно вообще называть методы m1() m2() итд, в качестве естественного обсфуцирования кода ))
Можно. Собственно, Ваше предложение и сводится к тому, чтобы переменную "количество" можно было называть sum, переменную "цена" - name, а переменную "код завершения" - i.

Лично я полагаю, что идентификатор таки должен соответствовать содержимому. И "переименование идентификаторов при рефакторинге" как раз и является следствием либо перестройки содержимого, либо исправления неудачных названий.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944554
Фотография iscrafm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ProBiotekПривет.

Давно мучаюсь одним вопросом. Если метод, ищущий что-то, где-то - ничего не нашел по указанному запросу, то это успешный результат выполнения или нет ?

Код: c#
1.
result.Success == True ?



В различных, увиденных, исходных кодах, встречал и так и так.

Как это решить для каждого конкретного решения ? Есть идеи и заметки ?
выполнение метода, в данном случае Поиска, без ошибок - это всегда УСПЕХ, независимо от того найдены ли записи или нет. А интерпретация этого УСПЕХА зависит от поставленной задачи. В любом случае "записи УСПЕШНО не найдены"
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944574
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезпропущено...

Давайте еще рассмотрим переименование giveMoneyToRecipient() в takeMoneyFromPayer() ?
Согласен, пример ровно из той же серии.

Ровно наоборот.
Оба эти идентификатора обозначают один и тот же процесс, поэтому имеем полное право переименовать метод, не меняя его поведения.

softwarerДиезПереименование идентификаторов - обычный процесс рефакторинга.
Безусловно.

ДиезМожно вообще называть методы m1() m2() итд, в качестве естественного обсфуцирования кода ))
Можно. Собственно, Ваше предложение и сводится к тому, чтобы переменную "количество" можно было называть sum, переменную "цена" - name, а переменную "код завершения" - i.

Лично я полагаю, что идентификатор таки должен соответствовать содержимому. И "переименование идентификаторов при рефакторинге" как раз и является следствием либо перестройки содержимого, либо исправления неудачных названий.

То, что идентификатор должен соответствовать содержимому - общепринятое правило самодокументированного кода.

Но это лишь для удобства программиста - привязать формальный контракт метода к структуре наименования идентификатора не позволяет ни один известный мне ЯП (ну, кроме GW-бейсика, наверное, с его N$, LIMIT%, MINIMUM!, Pl#... )

Привязка к сигнатуре метода жестче с формальной точки зрения.
Сравните:

Код: java
1.
2.
3.
public MyCustomer getCustomer(String ident) throws CustomerNotFound;

public Option<MyCustomer> getCustomer(String ident);
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944633
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезРовно наоборот.
Оба эти идентификатора обозначают один и тот же процесс,
Да ну правда что ли? Один обозначает "взять у плательщика и положить в кошелёк", другой обозначает "взять из кошелька и отдать получателю". У этих процессов нет почти ничего общего.

Диезпоэтому имеем полное право переименовать метод, не меняя его поведения.
Я бы сказал, мы никогда не имеем права переименовывать хорошо названный метод, не меняя его поведения. Просто потому, что "переименовать плохо названный в хорошо названный" - единственное разумное обоснование для этой операции.

ДиезТо, что идентификатор должен соответствовать содержимому - общепринятое правило самодокументированного кода. Но это лишь для удобства программиста
Именно так. И в рамках этого же "для удобства" изложенный мной подход вполне гармоничен. При подходе "называем методы M1, M2, M3" он, разумеется, неуместен.

Диез привязать формальный контракт метода к структуре наименования идентификатора не позволяет ни один известный мне ЯП
Ну и хорошо, ибо этого не нужно делать.

ДиезПривязка к сигнатуре метода жестче с формальной точки зрения.
Сравните:

Код: java
1.
2.
public MyCustomer getCustomer(String ident) throws CustomerNotFound;
public Option<MyCustomer> getCustomer(String ident);


Первое - дикий геморрой, которого избегают все кроме упёртых теоретиков-пищущих-книжки-и-не-опускающихся-до-практики. Второе - вполне возможный подход. На мой вкус, тяжеловатый, но со своими достоинствами.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944705
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезРовно наоборот.
Оба эти идентификатора обозначают один и тот же процесс,
Да ну правда что ли? Один обозначает "взять у плательщика и положить в кошелёк", другой обозначает "взять из кошелька и отдать получателю". У этих процессов нет почти ничего общего.

Диезпоэтому имеем полное право переименовать метод, не меняя его поведения.
Я бы сказал, мы никогда не имеем права переименовывать хорошо названный метод, не меняя его поведения. Просто потому, что "переименовать плохо названный в хорошо названный" - единственное разумное обоснование для этой операции.


А в моем понимании - это всё метод transferMoneyFromPayerToRecipient()

Разные разработчики могут понять смысл одного названия совершенно по-разному. Иначе не нужна была бы документация с примерами :)

"Хорошо" или"плохо" назван идентификатор - это глубоко субъективное мнение.
Объективным оно может быть в одном случае - если вы один работаете над всем проектом всё время.

softwarer...

ДиезПривязка к сигнатуре метода жестче с формальной точки зрения.
Сравните:

Код: java
1.
2.
public MyCustomer getCustomer(String ident) throws CustomerNotFound;
public Option<MyCustomer> getCustomer(String ident);


Первое - дикий геморрой, которого избегают все кроме упёртых теоретиков-пищущих-книжки-и-не-опускающихся-до-практики. Второе - вполне возможный подход. На мой вкус, тяжеловатый, но со своими достоинствами.

Мы, надеюсь, обсуждаем не ваши личные предпочтения, а тему топика:
Эти два примера методов формально описывают два разных поведения, если не найден объект по идентификатору:

Первый - неуспешный результат
Второй - успешный результат
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944731
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезА в моем понимании - это всё метод transferMoneyFromPayerToRecipient()
Вот теперь Вы его хорошо назвали :) Именно сюда я и вёл. А теперь попробуйте его существенно переименовать, не меняя его поведения :)

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

ДиезИначе не нужна была бы документация с примерами :)
Документация с примерами нужна для описания более глубоких особенностей, не охватываемых названием.

Диез"Хорошо" или"плохо" назван идентификатор - это глубоко субъективное мнение.
Не соглашусь. Хорошесть измеряется тем, насколько легко члены команды, столкнувшись, понимают смысл этого идентификатора и насколько легко потом его вспоминают (то есть могут применить без поиска). Конечно, бывают экстравагантные схемы (скажем, я на всю жизнь запомнил из одного проекта функции naref() и daref() - они расшифровывались как "на резиденцию файла" и ... да, правильно, "дай резиденцию файла") - но и это куда лучше, чем когда метод giveMoneyToRecipient() может оказаться названным takeMoneyFromPayer().

ДиезМы, надеюсь, обсуждаем не ваши личные предпочтения, а тему топика:
Эти два примера методов формально описывают два разных поведения, если не найден объект по идентификатору:
Формальное описание не является темой топика :) А к такому подходу мне сразу хочется спросить: а как поступать, если у объекта нужны оба этих метода?
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 1 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Метод нашел 0 искомых записей. Это успешное завершение ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]