Можно ли возвращать null из функции?
то у клиента нет адреса, это для меня самый что ни на есть повод кинуть исключение.
ну так это вроде в большинстве случае правильно. Операция отсылки письма без адреса бессмысленна, особенно когда сообщение должно быть.
Однако может быть проблема когда мы хотим посылать много сообщений, а уже у первого нет адреса.
Тогда это уже не отправка письма, а отправка очереди писем.
У нас как была функция отправки одного письма так и осталась. Только хотелки новые появились.
Прерывать работу всей очереди из-за одной ошибки
А кто об этом подозревает? Тесты прошли, всё работало нормально.
а криминалисты потом
------
Т.е. как и было написано - не пользователь...
руль должен быть повернут, но не повернулся.
------
Тебе полегчает если вместо поворота руля он останется в непонятном положении?
При этом криминалисты разведут руками - нихрена не оталось...
Ну можно конечно удариться в формализм, но, как мне кажется, важнее иметь нормальный функционал.
Я бы сказал, что наличие дополнительного типа NullObject далеко не всегда оправдано (более того, может просто загромождать код).
В данном случае я не вижу необходимости строго придерживаться паттерна :)
Извне разницы не будет видно и это только вопрос удобства
Не совсем так.
Во-первых, исключения дороже, чем просто возврат.
Во-вторых, на исключения ты обязан реагировать. Т.е. фактически тебе каждый вызов функции надо оборачивать в try ... catch. Это сделает код нечитаемым. А если где-нибудь забудешь обернуть, то предсказать место с которого продолжится программа будет нелегко :)
В-третьих, для нормального функционирования программы надо будет делать 100500 разных типов исключений, что опять таки загромоздит код.
Так что исключения - это все таки для обработки нештатных ситуаций и их не следует применять для контроля работы программы.
Я бы сказал, что наличие дополнительного типа NullObject далеко не всегда оправдано (более того, может просто загромождать код).
В принципе тут решение очень легко формализуется: надо переопределить метод - делаем подкласс. Не надо - оставляем то что есть. Если у нас immutable запись (без логики) зачем подкласс?
В комментах не уважают старичков. Намекают на их популизм.
А разгадка проста. Все эти принципы существуют не в отдельности
а вместе
И выделяя и продвигая один принцип, неизбежно ущемляешь другой. Т.е. нельзя следовать сразу всем этим принципам - в пределе они противоречат друг другу. Если же придерживаться разумного, и использовать все принципы в меру, то это уже не принципы, а просто нормальная работа. Подобно тому, как я не делю ходьбу на "принципы" бипедалирования, балансирования, фазу полёта, переноса центра тяжести и прочую заумную муть - я просто хожу. До всех этих Мартинов и "банд четырёх" были опытные люди, которые просто нормально работали и применяли эти принципы в разной степени в разных местах, по мере нужности, без выделения какого-то ограниченного набора и строгого описания его частей. Но выскочили на сцену почему-то всякие Мартины, банды четёрых и дяди Бобы, и начали создавать свою терминологию и систематизацию. Одни люди работают, другие инфоциганят и не препятствуют созданию вокруг себя религии, секты, которая постепенно возводит их догматы в абсолют и неизбежно искажает, превращая их в антипринципы. Т.е. то, чему нужно не следовать, а что нужно избегать. Оно и понятно - зачем препятствовать увеличению потока денег в свой карман и известности.
На арене цирка всё те же. Ололёшенька и его клоны с хабра. Не понимающие чуть меньше чем ничего. Но мнение имеющие. Оне ж погромизды!
А вы ещё спрашиваете можно ли null возвращать. Тут пора спрашивать как Ололёшеньке ручки отрубить, чтобы он классов не накодировал, а то у этого разработчика "выпячивание" LSP на то же Dependency Inversion плохо влияет. Но как, Холмс? Нет ответа. Он прокукарекал, а там хоть не расцветай.
Ну, глядя на шибко умных кодеров проекта, который я щас переписываю, я бы руки поотрубал кому-то другому. Там было всё по солиду, на интерфейсах на каждый чих, тесты-хуесты... Настало время менять куски приложения, развивать, удалять, добавлять - короче, делать всё то, что солид обещал, что оно будет проходить легко и непринуждённо. НИ-КУ-Я! Всё это нагромождение заумной хренятины лишь мешает переписывать код. А проще и быстрее было бы иметь словесное описание, или спецификацию на продукт и его функции, и реализовать всё с нуля на новых фреймворках. Тем более, что старый функционалитет настолько устарел, что там буквально кусками и модулями выбрасывали. Вместе со всем солидом отдирали, как старые ненужные обои и штукатурку. Все эти ипучие контракты (штук 12 проектов, состоящих из одних интерфейсов-контрактов, многоуровневых), которые местами просто не лезут на современный стек, а другими местами - не лезут в современные требования к приложению.
А что с наллом, таки можно его возвращать или как? Последнее от вас было
Ну мое понимает null-объектка - это некий объект (совсем необязательно другого типа), который выполняет действия "по умолчанию" (или имеет состояние "по умолчанию")Совершенно верно.
Если совпадения нет, то все равно возвращается валидный объект, а не null, т.е. фактически null-объект.
Т.е. у вас налл-объект выполняет какие-то действия или имеет состояние по умолчанию. А руки-то зачем прячете?.. )))
Там было всё по солидуСомнения некоторые есть Хотя, да иллюзия может быть.
Ну вот, опять дедушкины сказки. "Если вам кажется, что вы понимаете принципы SOLID, значит вы не понимаете принципы SOLID."
Когда каждый трактует как хочет, обсирая трактовки других, объясняя любые неудачи просто и со вкусом: "сам дурак!"... В помойку такие принципы. Только поляну для всяких инфоцыган и разводил содержать.
объясняя любые неудачи просто и со вкусом: "сам дурак!"..
Не обязательно должны быть какие то крайности
Хотя мне понравилось объяснения одного писателя.
Вопрос: Вот вы пишете в книге 1, что Россия это богатая страна, а в книге 2, что бедная - где правда то?
Ответ: вот смотрите можем делать это, это и это - эта бедная или богатя страна, конечно богатая.
А вот смотрите - этого нет, этого нет и этого нет - это бедная страна или богатая, конечно бедная.
Ну, глядя на шибко умных кодеров проекта, который я щас переписываю, я бы руки поотрубал кому-то другому.
А с чего ты взял что ты что-то понял? Ты ж Ололёшенька. Гора апломба и ноль знаний. Увидел старый грузовик и ругаясь что это придумали какие-то дураки начал проволокой приматывать к нему оглобли. А то лошадь запрячь некуда, а приказали шкаф перевезти.
Т.е. у вас налл-объект выполняет какие-то действия или имеет состояние по умолчанию.
А "по умолчанию" после "какие-то действия" ты не скопировал просто так, или потому что опять ничего не понял? Иди, полазь по интернету, поучись.
что солид обещал
Принципы не могут что-то обещать, они же не люди 🙄
Всё это нагромождение заумной хренятины лишь мешает переписывать код.
Я предполагаю, эта "заумная хрень" должна была обеспечивать безболезненную смену технологий, чтобы убрать потребность к переписыванию 🙂
реализовать всё с нуля на новых фреймворках
С какой частотой нужно проект переписывать с нуля? 🫣 Вы точно успеете переписать все с нуля до выхода следующего "современного" фреймворка? И бюджет на это получите?
что солид обещалПринципы не могут что-то обещать, они же не люди 🙄
Принципы существуют лишь в головах людей - они эти понятия и придумали. А обещали те, кто эти принципы озвучивали. Они же по сценам ходят и умные книжки с семинарами выпускают. И каждый из них трактует эти принципы по-своему, и у него всегда припасена пачка коротких и ёмких ответов, почему у вас солид не выходит и так вам и надо. Т.е. декларировать-то они могут всё по бумажке одинаково, как в священных книгах написано, но понимают под этим каждый своё.
Просто компьютерные науки существуют относительно недолго, а всякие солиды так и вообще недавно появились. Но по аналогии вполне может быть, что в будущем всё это дело расколется, появятся свои программерские протестанты, апостолы истинной веры, и прочие схизмы. В принципе, оно уже. Ну и по аналогии же придётся потом выбросить всю эту дрянь скопом на помойку, т.к. оно и в оригинале-то недотягивало, а в результате и подавно будет представлять из себя смесь маразматического догматизма с мракобесием. Истинно говорю вам, будет переписан "Чистый код" в новом варианте, но останутся почитатели ветхого "Чистого кода", и и тот, и другой будут люди сжигать в кострах, на которых будут мучаться еретики, не почитающие третьего, единственно правильного "Чистого кода", и не прошедшие собеседований в монастыри истинной веры.
реализовать всё с нуля на новых фреймворкахС какой частотой нужно проект переписывать с нуля? 🫣 Вы точно успеете переписать все с нуля до выхода следующего "современного" фреймворка? И бюджет на это получите?
Из истории этой программы, всё оставалось на старых технологиях лет 15. А если бы не требовали соблюдать многие старые подходы, то уже всё было бы переписано, и ещё лет 10 можно было бы сидеть на попе ровно, на лайтовой поддержке этого кода. А потом снова всё переписать - так же легко и безболезненно по сравнению с рамками, которых понаставили эти ваши "правильные подходы".
Ну и требование, чтобы стиль кода оставался, как в старых модулях написано, чтобы преемственность и всё такое. Т.е. никакого тебе нового синтаксиса, особенно сокращающего простыни местами раза в два-три. Это потому, что безболезненная смена технологий, да.
А обещали те, кто эти принципы озвучивали.
было еще хорошо, что бы кто то хоть раз их дослушал до конца и чего то понял
Но похоже не будет ни первого, ни второго даже сухого поцелуя не останется.
Не знал, не видел, но осуждаю.