powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Метод нашел 0 искомых записей. Это успешное завершение ?
25 сообщений из 50, страница 2 из 2
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944758
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarer
Код: java
1.
2.
public MyCustomer getCustomer(String ident) throws CustomerNotFound;
public Option<MyCustomer> getCustomer(String ident);


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

Плохо ведете )))

Подойдет processPrimaryPayments() ? Или mainRemitment() ?
Или я могу вынести этот метод в отдельный интерфейс IMoneyTransferEngine и назвать apply().

А теперь объясните мне, чем первое название лучше? :)

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

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

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



Тут ключевая фраза "Не должно...". Но будет. И чем крупнее проект - тем больше.
А более формальное описание поведения в коде уменьшает влияние человеческого фактора.


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

Тема топика достаточно расплывчата, но мой пример не выходит за её рамки.
Если же я неправильно понял вопрос - пусть топикстартер меня поправит :)

Оба метода:

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



В чем проблема?
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944775
Фотография Infernal V. Raven
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerInfernal V. RavenВ VCL (Delphi) было (да и есть) всегда два набора методов, к примеру FindClass, GetClass. Геммороя не наблюдал, даже наоборот, удобно.
В VCL (Delphi) не было (и надеюсь не будет) явовского идиотизма в виде директивы throws.Это не особо мешает сделать по аналогии с VCL два метода и в жабе
Код: java
1.
2.
public MyCustomer findCustomer(String ident);
public MyCustomer getCustomer(String ident) throws CustomerNotFound;
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944795
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезПодойдет processPrimaryPayments() ?
Не очень. Абстрактно, я бы предположил, что transferMoneyFromPayerToRecipient - это метод, который вызывается из processPrimaryPayments (а также, вероятно, из processOtherPayments) после того, как осуществлены всякие проверки, оповещения и прочие действия, не связанные собственно с transfer.

ДиезИли mainRemitment() ?
Используете синонимы. Это противоречит правилам хорошего тона (выбирать терминологию и придерживаться её).

ДиезИли я могу вынести этот метод в отдельный интерфейс IMoneyTransferEngine и назвать apply()
Ничего не имею против. Сделаете интерфейс, сделаете у него методы setPayer, setRecipient, apply... вполне соответствует.

ДиезА теперь объясните мне, чем первое название лучше? :)
Чем что? На своём месте оно вполне хорошо. Сделаете интерфейс - там всё передербанится и станет хорошо apply.

ДиезТут ключевая фраза "Не должно...". Но будет. И чем крупнее проект - тем больше.
Отнюдь. Зависит не от размеров проекта, а от бардачности его руководства.

ДиезА более формальное описание поведения в коде уменьшает влияние человеческого фактора.
Cкажу так: формальное описание должно быть хорошо спроектировано и дёшево в использовании, в противном случае его минусы начинают перевешивать плюсы.

ДиезОба метода:
Код: java
1.
2.
	public Optional<MyCustomer> getCustomer(String ident);
	public MyCustomer getCustomerExact(String ident) throws CustomerNotFound;


В чем проблема?
После того, как Вы поправили - ни в чём :) Но Вы, собственно, и пришли к той самой системе именования, против которой протестовали.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944798
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Infernal V. RavenЭто не особо мешает сделать по аналогии с VCL два метода и в жабе
Код: java
1.
2.
public MyCustomer findCustomer(String ident);
public MyCustomer getCustomer(String ident) throws CustomerNotFound;


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

ДиезИли mainRemitment() ?
Используете синонимы. Это противоречит правилам хорошего тона (выбирать терминологию и придерживаться её).

ДиезИли я могу вынести этот метод в отдельный интерфейс IMoneyTransferEngine и назвать apply()
Ничего не имею против. Сделаете интерфейс, сделаете у него методы setPayer, setRecipient, apply... вполне соответствует.

ДиезА теперь объясните мне, чем первое название лучше? :)
Чем что? На своём месте оно вполне хорошо. Сделаете интерфейс - там всё передербанится и станет хорошо apply.


Опять же, ваш персональный опыт диктует специфическое понимание каждого термина. Но разработать терминологию до начала проекта, и придерживаться ее в добровольно-принудительном порядке - это правильный подход. Тут согласен :)

softwarer
ДиезТут ключевая фраза "Не должно...". Но будет. И чем крупнее проект - тем больше.
Отнюдь. Зависит не от размеров проекта, а от бардачности его руководства.


ДиезА более формальное описание поведения в коде уменьшает влияние человеческого фактора.
Cкажу так: формальное описание должно быть хорошо спроектировано и дёшево в использовании, в противном случае его минусы начинают перевешивать плюсы.


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

Строгая типизация aka формализация типов - одно из таких ограничений. Вот и всё.

Монада Maybe давно придумана, обкатана и реализована для всех актуальных ЯП.
Минусы есть, конечно, каждый сам решает, что важнее.

softwarerДиезОба метода:
Код: java
1.
2.
	public Optional<MyCustomer> getCustomer(String ident);
	public MyCustomer getCustomerExact(String ident) throws CustomerNotFound;


В чем проблема?
После того, как Вы поправили - ни в чём :) Но Вы, собственно, и пришли к той самой системе именования, против которой протестовали.

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

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

ДиезНо даже при адекватном руководстве, при росте количества персон, задействованных в проекте контроль становится всё сложнее, поэтому на помощь приходят технологические ограничения и ALM-инструменты.
Я сторонник того, чтобы "то, что можно сделать автоматически, делалось автоматически". Но по факту, нормально организованная команда не испытывает "проблем именования" в заметных количествах.

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

Код: sql
1.
Метод findXXXX может вернуть null и его результат должен проверяться



Ваш подход

Код: sql
1.
Метод findXXXX должен возвращать не XXXXX, а Optional<XXXXX>



В общем-то, оба опираются на то, что один человек выполнит это требование, а другой - проверит, что оно выполнено, и напихает, если нет.

ДиезЯ бы постеснялся назвать это системой наименования

Как только Вы примените единообразный подход в нескольких случаях - сформируется правило.

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

Код: sql
1.
Метод findXXXX может вернуть null и его результат должен проверяться



Ваш подход

Код: sql
1.
Метод findXXXX должен возвращать не XXXXX, а Optional<XXXXX>



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

Суть в том, что переменной типа MyCustomer нельзя присвоить результат типа Option<MyCustomer> - это несовместимые типы, получим ошибку компиляции.
То есть придется делать явное преобразование, "разворачивать" Option в нужный тип.

А в вашем случае проверка на null лежит полностью на программисте, компилятор тут ничем не поможет.
Где забыл проверить, там получил exception.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944925
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезСуть в том, что переменной типа MyCustomer нельзя присвоить результат типа Option<MyCustomer> ... А в вашем случае проверка на null лежит полностью на программисте, компилятор тут ничем не поможет.
Для того, чтобы этот механизм сработал, программист должен выполнить правило "возвращай Option<MyCustomer>". И это лежит полностью на программисте, компилятор тут ничем не поможет.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944946
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезСуть в том, что переменной типа MyCustomer нельзя присвоить результат типа Option<MyCustomer> ... А в вашем случае проверка на null лежит полностью на программисте, компилятор тут ничем не поможет.
Для того, чтобы этот механизм сработал, программист должен выполнить правило "возвращай Option<MyCustomer>". И это лежит полностью на программисте, компилятор тут ничем не поможет.

Разумеется, программист должен решить, какой тип возвращать. Так же, как он должен решать, возвращать ли в методе int или string...

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

Остается, конечно, вариант, что программист по ошибке вернет null из метода, который должен возвращать не-Option значение.
Ну, тут только ждать NotNull аннотаций, про которые Petro123 говорил ))
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944950
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезРазумеется, программист должен решить, какой тип возвращать. Так же, как он должен решать, возвращать ли в методе int или string...
Не так же. Смысловой тип в данном случае - MyCustomer. А Optional - это обёртка, и "не забыть" её - ровно такое же требование, как "не забыть" проверить результат метода find.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944951
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезНу, тут только ждать NotNull аннотаций, про которые Petro123 говорил ))
В яве они давно есть. Но если честно, пользы не ощутил. Может, я слишком "старомодно воспитан".
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38944999
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезРазумеется, программист должен решить, какой тип возвращать. Так же, как он должен решать, возвращать ли в методе int или string...
Не так же. Смысловой тип в данном случае - MyCustomer. А Optional - это обёртка, и "не забыть" её - ровно такое же требование, как "не забыть" проверить результат метода find.

Обертка - неточное слово в данном случае. Это новый тип данных, несущий определенную смысловую нагрузку.

Имхо, логично воспринимать Option<T> как Collection<T> с числом элементов не более одного. Вы же не забываете возвращать TList<Customer> вместо Customer в случаях, когда это нужно? :)
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38945000
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезНу, тут только ждать NotNull аннотаций, про которые Petro123 говорил ))
В яве они давно есть. Но если честно, пользы не ощутил. Может, я слишком "старомодно воспитан".

Это Java как язык устарел, иначе не появлялись бы как грибы языки под JVM - Scala, Kotlin, Xtend, Ceylon... тыщи их ))
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38945004
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезИмхо, логично воспринимать Option<T> как Collection<T> с числом элементов не более одного.
Имхо, это игра словами.

Диез Вы же не забываете возвращать TList<Customer> вместо Customer в случаях, когда это нужно? :)
У них принципиально разная семантика. Ваш пример гораздо ближе требованию возвращать Integer вместо int - согласитесь, нетрудно и перепутать.

ДиезЭто Java как язык устарел,
Странно. По мне, он только к седьмой версии дошёл до состояния "можно пользоваться без отвращения".

Диезиначе не появлялись бы как грибы языки под JVM - Scala, Kotlin, Xtend, Ceylon... тыщи их ))
Никакой связи. JVM удобна тем, что любой, кто хочет создать свой язык, может компилить под неё и не заморачиваться с машинным кодом. Соответственно, наличие таких энтузиастов никак не связано с состоянием собственно явы.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38945137
Фотография Диез
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
softwarerДиезИмхо, логично воспринимать Option<T> как Collection<T> с числом элементов не более одного.
Имхо, это игра словами.

Отнюдь :) И это не я придумал.

Функциональная имплементация Option реализует поведение итератора, который возвращает 0 или 1 элемент.
Помимо прочего, это позволяет вот такие полезные конструкции:

Код: java
1.
2.
3.
4.
5.
Option<String> opt = Option.some("23");
		
for (String string : opt) {
	System.out.println(string);
}


Как видите, прямая аналогия с коллекциями.

softwarer
Диез Вы же не забываете возвращать TList<Customer> вместо Customer в случаях, когда это нужно? :)
У них принципиально разная семантика. Ваш пример гораздо ближе требованию возвращать Integer вместо int - согласитесь, нетрудно и перепутать.


Я понимаю, вы про Java?
Да, в некотором роде, Integer можно рассматривать как Nullable(int), и, кстати, до появления автобоксинга компилятор требовал явного приведения типов...
Но семантика их одинаковая, в отличие от Option, который явно определяет возможность отсутствия значения (и это его единственная функция).

К Option<T> по изначальному смыслу намного ближе концепция "NULL" и "NOT NULL" в СУБД. Поведение в обоих случаях задается явно; "забыть" написать NOT NULL означает ошибку проектирования.

softwarerДиезЭто Java как язык устарел,
Странно. По мне, он только к седьмой версии дошёл до состояния "можно пользоваться без отвращения".

Диезиначе не появлялись бы как грибы языки под JVM - Scala, Kotlin, Xtend, Ceylon... тыщи их ))
Никакой связи. JVM удобна тем, что любой, кто хочет создать свой язык, может компилить под неё и не заморачиваться с машинным кодом. Соответственно, наличие таких энтузиастов никак не связано с состоянием собственно явы.

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

ДиезНо семантика их одинаковая, в отличие от Option, который явно определяет возможность отсутствия
Integer ровно так же "явно определяет возможность отсутствия".

ДиезПоведение в обоих случаях задается явно; "забыть" написать NOT NULL означает ошибку проектирования.
Верно, только это не делает истинным то Ваше утверждение, которое мы обсуждаем. Напомню, Вы пытаетесь доказать, что INTEGER и INTEGER NOT NULL - это "семантически разные типы", которые так же сложно спутать, как например int и String или там int и Vector<int>.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38946336
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
softwarerВерно, только это не делает истинным то Ваше утверждение, которое мы обсуждаем. Напомню, Вы пытаетесь доказать, что INTEGER и INTEGER NOT NULL - это "семантически разные типы", которые так же сложно спутать, как например int и String или там int и Vector<int>.

Вообще говоря, это завивит от языка. Посмотрите в Haskell - монаду Maybe - у вас без преобразования из maybe код просто не скомпилируется.

То же самое и в F#.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38946357
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
F#Вообще говоря, это завивит от языка. Посмотрите в Haskell - монаду Maybe - у вас без преобразования из maybe код просто не скомпилируется. То же самое и в F#.
F#, я искренне не понимаю, как разговаривать с людьми, из реплик которых ясно видно, что они не смотрели предыдущих сообщений топика и не понимают, о чём вообще разговор.
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38946511
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
softwarerF#, я искренне не понимаю, как разговаривать с людьми, из реплик которых ясно видно, что они не смотрели предыдущих сообщений топика и не понимают, о чём вообще разговор.

softwarerВаш пример гораздо ближе требованию возвращать Integer вместо int - согласитесь, нетрудно и перепутать

Если метод возвращает null, то он не скомпилируется если его тип будет int не так ли? Джаву честно, говоря подзабыл.

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


Тут вы используете слишком вольную трактовку понятия "коллекция" :) Объект "Фильтр" никак не может быть коллекцией (хотя понятно, что его методы вполне могут принимать и возвращать коллекции).

Чтобы показать это, достаточно задать простой вопрос: коллекцией ЧЕГО является объект "Фильтр" ? Или коллекцией ЧЕГО является вахтер?

Про объект Option<String> можно легко сказать, что он является коллекцией строк , но с конкретным ограничением: коллекция либо пустая, либо содержит ровно один элемент.

softwarerДиезНо семантика их одинаковая, в отличие от Option, который явно определяет возможность отсутствия
Integer ровно так же "явно определяет возможность отсутствия".

ДиезПоведение в обоих случаях задается явно; "забыть" написать NOT NULL означает ошибку проектирования.
Верно, только это не делает истинным то Ваше утверждение, которое мы обсуждаем. Напомню, Вы пытаетесь доказать, что INTEGER и INTEGER NOT NULL - это "семантически разные типы", которые так же сложно спутать, как например int и String или там int и Vector<int>.

Как правильно заметил выше мембер F#, это зависит от языка :)
В языках с "сильной" типизацией вообще не используется понятие null, а "INTEGER" и "INTEGER NOT NULL" - совершенно разные типы.

Если в таком языке метод возвращает тип MyCustomer, то его результатом может быть только объект типа MyCustomer (или любого наследника, но это не принципиально).

Если вдруг функциональные требования к методу поменялись, и возвращаемое значение теперь необязательно, то сигнатуру метода придется поменять на Option<MyCustomer>. И весь внешний код, использующий этот метод, придется адаптировать к новым требованиям, иначе не скомпилируется...
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38947685
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДиезТут вы используете слишком вольную трактовку понятия "коллекция" :)
Вы проводите границу "слишком" слишком уж пристрастно :)

ДиезПро объект Option<String> можно легко сказать, что он является коллекцией строк , но с конкретным ограничением: коллекция либо пустая, либо содержит ровно один элемент.
А про int можно сказать, что он является коллекцией с конкретным ограничением: ровно один элемент.

[quote softwarer]пропущено...

Integer ровно так же "явно определяет возможность отсутствия".

ДиезsoftwarerВы пытаетесь доказать, что INTEGER и INTEGER NOT NULL - это "семантически разные типы",

Как правильно заметил выше мембер F#, это зависит от языка :)
(упали руки) Вы сами ввели этот NOT NULL применительно к базам данных: 17562243 . И тут же начинаете играть словами на тему "зависит от языка". Я не понимаю, чего Вы хотите. Уже очевидно, что не конструктивной беседы. Хотите спровоцировать, чтобы и я начал активно применять демагогию и игру словами? Вряд ли получится, мне это наскучило лет тридцать назад.

ДиезЕсли в таком языке метод возвращает тип MyCustomer, то его результатом может быть только объект типа MyCustomer (или любого наследника, но это не принципиально).
Что по-прежнему соответствует моему утверждению: Ваш Optional<> никак не избавляет от необходимости вспомнить про него и использовать именно там, где надо.

ДиезЕсли вдруг функциональные требования к методу поменялись, и возвращаемое значение теперь необязательно, то сигнатуру метода придется поменять на Option<MyCustomer>.
Кому это придётся ? Бог с неба громовым гласом скажет "Петя, поменяй возвращаемый тип"? Вы прячете под это замечательное слово "придётся" предмет беседы: то, что от программиста по-прежнему требуется "не забыть применить соответствующий технологический приём".
...
Рейтинг: 0 / 0
Метод нашел 0 искомых записей. Это успешное завершение ?
    #38947944
F#
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
F#
Гость
Если бы можно было запретить Null и использовать только Optional, то, наверное, компилятор бы говорил громовым голосом. А так получается:

http://java.dzone.com/articles/java-ptional-whats-point

авторSo to recap - in an attempt to get rid of NullPointerExceptions we have a new class that:
-Throws NullPointerExceptions
-Can itself be null, causing a NullPointerException
-Increases heap size
-Makes debugging more difficult
-Makes serializing objects, say as an XML or JSON for an external client, much more difficult
...
Рейтинг: 0 / 0
25 сообщений из 50, страница 2 из 2
Форумы / Разработка информационных систем [игнор отключен] [закрыт для гостей] / Метод нашел 0 искомых записей. Это успешное завершение ?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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