Лыцарь пичальнава образа - Про ООП (номер хз какой) [entries|archive|friends|userinfo]
silly_sad

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

Про ООП (номер хз какой) [Feb. 27th, 2009|04:12 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
[Tags|, , ]

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

function is_logged_in() {
return (FALSE !== logged_in_user()) ? TRUE : FALSE;
}

вызвал несколько остро жгучих комментариев (рекомендую почитать), после которых уже нельзя не разжевать смысл поста публично.

Итак разжёвываю:

Тернарный оператор с константами в правом боку это уже прелесть выдающаяся, но даже её заметили не все.

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

Прелесть третья осталась незамеченной большинством граждан: Эта функция заменяет собой переменную! Вот ООПэшный выебон - функция вместо переменной.

И совсем никто не заметил Главного Зла, Зла из-за которого "тормозят компутеры". Эта функция вызывает другую logged_in_user(), которая по всей видимости возвращает какуюту инфу о юзере, а потом вся эта инфа выбрасывается в небытие, кроме одного бита. Вот оно что! Мы сначала извлекаем из памяти инфу, а потом её выбрасываем Вот чем заняты 90% времени современные компутеры в руках умелых ООПэшников. И даже не важно что эта конкретная функция вызывала целый SELECT к БД, важна сама идея: извлечь и выбросить - вот соль всего ООП!
LinkLeave a comment

Comments:
From:[info]mehos.livejournal.com
Date:February 27th, 2009 - 03:43 pm
(Link)
а по другому у нас не учат. И что самое обидное, никому по другому и не нужно.
Эато это пишется быстро. Меньше мозгозатрат, меньше человекочасов.
Лишний раз подумал - потерял время - упущеная выгода.
Думать не выгодно. И нанимать умных не выгодно. Они много думают, тратят время, начитают переиначивать техзадания с поправками на оптимизацию скорости и безопасность. Эти глупости никому не нужны потому что не оправдывают затрачиваемых средств.
Высокоинтеллектуальное программирование - это низкомарженальный продукт!
From:[info]silly_sad
Date:February 27th, 2009 - 09:50 pm
(Link)
мне сомнительно что это быстрее. помоему это добросоветсное выполнение заклинаний из журнала PHP magazin от великих гуру
From:[info]q
Date:February 27th, 2009 - 03:58 pm
(Link)
Что-то я не усматриваю, в каком месте тут ООП. Чистый пук в лужу.
From:[info]silly_sad
Date:February 27th, 2009 - 04:46 pm
(Link)
а отличный всё-таки сорс !
как эффективно выявляет братьев по "разуму".
From:[info]q
Date:February 28th, 2009 - 10:32 am
(Link)
Я как-то не понял вашего ответа - вы настаиваете на том, что приведённый код является примером ООП? Прочие качества данного кода я сейчас не рассматриваю.

Вы вообще понимаете, что это значит - ООП? (Если ООП - это, по вашему, "по определению любой кривой и безобразный код, который я хочу обосрать", то так сразу и скажите.)
From:[info]silly_sad
Date:February 28th, 2009 - 08:04 pm
(Link)
:-) оценил.

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

From:[info]os80.livejournal.com
Date:February 27th, 2009 - 05:27 pm
(Link)
Пополнить, что ли, Вашу коллекцию "братьев по разуму" своей тушкой :-)

1. Да.
2. Это бы ухудшило юзабельность кода. Не знаю, как в PHP, а (скажем) в Delphi есть IDE, которая после того, как набрал переменную и поставил точку, выдаёт список доступных методов. А никакого простого способа узнать о существовании функции logged_in_user лично я не знаю. Это ж поиск по всем файлам с высокоинтеллектуальной задачей "как бы они могли назвать такое".
3. Ага! Чтобы эту переменную потом где-то забыть изменить... Нафиг, нафиг! Кстати, IMHO, это фишка не ООП, а ФП.
4. То есть не использовать функцию logged_in_user, а добавлять что-то своё? Из-за лишнего SELECT'а, который (при наличии нормальной БД) и на производительность-то толком влиять не должен? (не исключаю, конечно, возможность, что по тем или иным причинам действительно надо написать своё, но мне не кажется, из Вашего поста эти причины очевидны)

(особенно веселит обсуждение непроизводительных расходов в применении к интерпретируемым языкам)
From:[info]silly_sad
Date:February 27th, 2009 - 09:47 pm
(Link)
> Не знаю, как в PHP, а (скажем) в Delphi есть IDE, которая ...

Это обстоятельство не имеет никакого отношения к
1) читабельности кода.
2) языкам програмирования (как там в PHP? да всё буквы - ни оджной картинки!)
3) к программированию как методу

> Чтобы эту переменную потом где-то забыть изменить

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

> Чтобы эту переменную потом где-то забыть изменить

Кстати это был вэбсайт. Вы представляете контекст выполнения пхп скрипта на сайте? и срок его жизни?

> Из-за лишнего SELECT'а, который (при наличии нормальной БД) и на производительность-то толком влиять не должен?

Вы умножте на количество запросов этой страницы в секнду. Или вы никогда не писали реально нагруженые сайты?

> особенно веселит обсуждение непроизводительных расходов в применении к интерпретируемым языкам

Мы здесь обсуждаем болезни головного мозга, которые вот к таким тормознутым интерпретаторам аккурат и приводят. А какашку в адрес интерпретации вы кинули зря, это вам учителя в институте сказали? - даже если это в 90% случаев верно, никогда не повторяйте заклинаний не подумавши.
From:[info]os80.livejournal.com
Date:February 27th, 2009 - 10:40 pm
(Link)
Я не писал про читабельность, только про юзабельность. А без IDE моё возражение не так актуально.

Вызов функции эквивалентен чтению переменной, а не её изменению. Чтение переменной тоже не боюсь пропустить. Если это действительно "узкое место", переменная себя оправдает, но почему это плохо "по умолчанию"?

>Вы представляете контекст выполнения пхп скрипта на сайте?
Не очень. А что, можно понять, залогинен ли юзер, вообще без запросов к базе?

>Вы умножте на количество запросов этой страницы в секнду.
С удовольствием. Сколько у Вас запросов в секунду?

Киданием какашек я вообще не занимаюсь. Но интерпретаторы медленнее бинарников, это, вроде как, правда, даже если это говорят учителя в институте. А любим мы их (интерпретаторы) не только за это :-)
From:[info]silly_sad
Date:February 28th, 2009 - 08:08 pm
(Link)
> но почему это плохо "по умолчанию"?

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

> А что, можно понять, залогинен ли юзер, вообще без запросов к базе?

Не в базе дело, а в том что узнавать это надо РОВНО ОДИН РАЗ. А в течение выполнения скрипта это состояние не изменится.

> Сколько у вас запросов в секунду?

На этом сайте сейчас нисколько, но когда пойдёт рекламная акция он не имеет права заклинить. иначе смерть. понимаете?
From:[info]os80.livejournal.com
Date:February 28th, 2009 - 08:32 pm
(Link)
>Не в базе дело, а в том что узнавать это надо РОВНО ОДИН РАЗ. А в течение выполнения скрипта это состояние не изменится.
А вот теперь контекст ясен, можно похохотать по полной!
From:[info]sdfgh153.ru
Date:February 27th, 2009 - 07:02 pm
(Link)
Дада, вот вам еще одна тушка в коллекцию.
Если функция is_logged_in() вызывается в 142 местах программы, а ее заботливые руки пекущегося о оптимизации заменят на ее тело, то по закону подлости через месяц логика работы этой функции обязана будет поменяться.
Вот тогда любитель оптимизации будет шарахаться по коду grep'ом, sed'ом и другими милыми сердцу тулзами, в надежде, что не забыл где-нибудь исправить логику.
Не важно ООП это или ФП или любое другое П, это называется «абстракция», а так же соблюдение принципа DRY.
From:[info]silly_sad
Date:February 27th, 2009 - 09:38 pm
(Link)
прежде чем писать коммент надо
а) читать пост
б) думать

Во-первых "логика работы" переменной измениться не может.
Во-вторых абстракция ради абстракции должна быть редуцирована нах.
From:[info]sdfgh153.ru
Date:February 27th, 2009 - 10:02 pm
(Link)
То есть вызов logged_in_user() вы какбе не заметили, да?
Переменной не может, а вот функции может. Ситуация, когда переменной становится мало — более чем реальная.
From:[info]silly_sad
Date:February 28th, 2009 - 08:02 pm
(Link)
я не могу обсуждать эту тему с человеком, который толи не читал мой пост, толи читал его с перфокарт, порядок которых перепутал.
From:[info]max630.livejournal.com
Date:February 28th, 2009 - 11:29 am
(Link)
> Эта функция заменяет собой переменную

и я могу даже сказать почему. Потому что никому нахрен не сдалось поддерживать эту переменную в актуальном состоянии.
From:[info]silly_sad
Date:February 28th, 2009 - 08:01 pm
(Link)
вы умудряетесь двумя словами вызвать такую кучу возражений, что у меня терпения не хватит перечислить.

вы хоть чуточку думаете о предмете который мы обсуждаем, или только о текстах которыми мы обмениваемся?
From:[info]max630.livejournal.com
Date:February 28th, 2009 - 08:33 pm
(Link)
> вы хоть чуточку думаете о предмете

нет, и не собираюсь. Мне и без того "думальщиков о предмете" хватает, которые срут в код своими очень особыми случаями, в которых "надо работать быстро-быстро". Потом их "предмет" даже не уходит в релиз, а говно в коде остаётся. Нет уж, пусть по PHP magazine пишут. Целее будем.

PS: справедливости ради, в том же коде есть и лишние абстракции от другого мёртвого проекта. Но, сравнивая говноабстракции с говноконкретикой - абстракция лучше.
From:[info]silly_sad
Date:February 28th, 2009 - 08:39 pm
(Link)
- не надо ходить по городу в бронежилете, это тяжело и неудобно
- вы сума сошли! я что голый должен красоваться! нет уж я уж как-нибудь в бронежилете перебьюсь.
From:[info]os80.livejournal.com
Date:February 28th, 2009 - 08:35 pm
(Link)
Думаю, Ваш собеседник просто представить себе не может того изврата, который Вы мне расписали подробно.