1. SQL / Говнокод #3464

    −873

    1. 1
    SELECT users.nick,group.name FROM users,group WHERE user.id='$id' AND group.id=user.group;

    Это мой код. Мне сказали что это говнокод, и порекомендовали спросить здесь.
    В чём именно говнокодость, и как надо писать правильно?

    Запостил: avamana, 13 Июня 2010

    Комментарии (158) RSS

    • снова студенты ? А кто порекомендовал спросить здесь ?
      Ответить
      • Да студент.. В принципе пишу давно.. уже года 3-4.. Но всегда писал именно так, и не задумывался что это говногод.
        Порекомендовал какой то чел с одного форума wapговнокодеров.

        Так в чём говнокодость, и как писать правильно? Он там что то про JOIN говорил.
        Ответить
        • ИМХО
          говнокодовость в том, что не по стандарту SQL-95/99. Однако все DB понимают такой диалект.
          Так же говнокодовость в том, что может скрывать незнание разницы между RIGHT/INNER/LEFT JOIN.
          Ответить
          • в каком месте не по стандарту?
            и все субд (а не базы данных, учим матчасть быстро, решительно) такой синтаксис понимают потому, что не по стандарту, ну-ну, гений, блджад.
            http://savage.net.au/SQL/sql-99.bnf.html#table%20reference%20list
            Ответить
      • Собственно вот что мне сказали:

        потому что соединить и объединить это разные вещи. Перечисление в секции FROM вообще плохой тон. в твоем запросе нельзя использовать ни левое ни правое объединение, только внутренние.
        Если хочешь больше критики запости запрос на сайте gavnokod.ru))))
        Ответить
        • Херню тебе сказали. Можно, конечно, разукрасить запрос в таком стиле:
          SELECT
            `users`.`nick`,
            `group`.`name`
          FROM
            `users`
            INNER JOIN `group` ON (`group`.`id` = `user`.`group`)
          WHERE
            `user`.`id` = '$id'

          ...но это не более чем украшательство, т.к. два данных запроса эквивалентны: из ON парсер переносит условия во WHERE, а запятая и INNER JOIN - это одно и то же.
          Короче, камрад. Вместо того чтобы слушать, что тебе сказали хрены с горы, которые сами ни бельмеса не соображают (судя по тому, что они тебе наговорили, между прочим), но лезут в вебдев, лучше набери литературы и сиди разбирайся. И да, это не сайт помощи новичкам. Его тематику ты можешь прочитать вверху страницы.

          Страйкер, приди, сделай уже что-нибудь.
          Ответить
          • здрасте приехали,логическая эквивалентность не означает одинаковую работу сервера
            за разъяснениями - к EXPLAIN
            Ответить
            • В данном случае, скорее всего, означает. Можно и проверить EXPLAIN'ом на чём-нибудь похожем. Навскидку - оптимизатор в обоих случаях расставит таблицы одинаково, потому что уточняющее условие выборки привязано только к одной из них, так что он по-любому сначала должен выбрать строку из `user`, а уже затем искать ей соответствие в `group`. Тем более `user`.`id` - наверняка первичный ключ.
              Ответить
            • что правда?

              EXPLAIN SELECT u.login, g.name FROM users u, groups g WHERE u.id = '5' AND g.id = u.groupid
              id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
              1 	SIMPLE 	u 	const 	PRIMARY,groupid 	PRIMARY 	4 	const 	1 	 
              1 	SIMPLE 	g 	const 	PRIMARY 	PRIMARY 	4 	const 	1


              EXPLAIN SELECT u.login, g.name FROM users u INNER JOIN groups g ON .groupid = g.id WHERE u.id = '1'

              id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
              1 	SIMPLE 	u 	const 	PRIMARY,groupid 	PRIMARY 	4 	const 	1 	 
              1 	SIMPLE 	g 	const 	PRIMARY 	PRIMARY 	4 	const 	1


              найдите 10 отличий.

              вот зачем давать громкие комментарии не разбираясь в вопросе, или предлагать тест, самому его не проверив.
              Ответить
              • Слишком простой запрос, не наглядный, ты лучше explain`ы на запросах с вырвиглазными джойнами сделай.
                Ответить
                • ты пример говнокода запости — сделаю.

                  hint он будет выглядеть точно так же, как и с условиями в where.
                  Ответить
                  • create table a
                    (
                    	pk1 int primary key,
                    	attr1 varchar(25)
                    );
                    
                    create table b
                    (
                    	pk2 int primary key,
                    	fk1 int,
                    	fk2 int
                    );
                    
                    create table c
                    (
                    	pk3 int primary key,
                    	attr2 varchar(25)
                    );
                    
                    insert into a values (1,'a'), (2,'b'), (3,'c');
                    insert into c values (1,'q'), (2,'w'), (3,'e');
                    insert into b values (1, 1, 2), (2, 2, 3);
                    
                    -- q1
                    select a.attr1,c.attr2 from a,c,b where a.pk1=b.fk1 and c.pk3=b.fk2;
                    
                    --q2
                    select (select attr1 from a where pk1=b.fk1), (select attr2 from c where pk3=b.fk2) from b;
                    Ответить
                    • слава богу ни в одном проекте с таким говнокодищем (q2) не встречался и это, индексы расставь.
                      Ответить
                      • Похуй на индексы, и так видно, что 2 эквивалентных запроса дают разные планы, и следовательно ты был изначально не прав. В следующий раз подумай перед газификацией мелких водоёмов.
                        Ответить
                        • ты наркоман. посмотри на ту хрень которую ты написал и на ту, про которую говорили. и пойми почему ты не прав, газодетектор хренов.
                          Ответить
                          • Вот про что говорили, затупан: "логическая эквивалентность не означает одинаковую работу сервера
                            за разъяснениями - к EXPLAIN"
                            А ты тут начал залупоном махать, орать, что это не правда. Кароче говоря сфейлил.
                            Ответить
                            • разговор был о конкретном говнокоде, а не об сферическом запросе в вакууме ;)
                              зри в корень дискуссии
                              Ответить
                              • Фейл-фейл-фейл... Не изворачивайся, как хуй на сковородке. Это как раз тебе в корень зырнуть не помещает.
                                Ответить
              • Кстати, ты такой тупой, что не понимаешь истинности выражения "логическая эквивалентность не означает одинаковую работу сервера"?
                Ответить
          • MySQL выполнит запрос как есть, ничего переносить не будет. Я согласен что запросы эквивалентны. Я к тому что для меня более читабельнее и интуитивно понятней будет запрос, когда используется операция с JOIN'ом а не операция "С запятой" как это правильно называть.
            p.s. приходилось видеть такие запросы с запятой, где таблиц более 2, ну чем не гамнокод.
            2 p.s. поэтому лучше человека щас направить на то, чтобы он начал писать запросы в соответсвии со стандартом.
            Ответить
            • > ничего переносить не будет
              Ммм... В русском переводе мануала к 4.0 говорится, что для LEFT JOIN и RIGHT JOIN такой перенос выполняется (про INNER JOIN, правда, ни слова). В англоязычном к той же версии этого нет. Косяк переводчиков, что ли...
              > для меня более читабельнее и интуитивно понятней будет запрос, когда используется операция с JOIN'ом а не операция "С запятой"
              Поддерживаю. В общем-то, это часть того, что человеку недообъяснили на форуме, с которого он пришёл.
              Ответить
              • Все еще пользуетесь Мускулом? Тогда мы идем к вам... заменить кактус на свеженький...
                Ответить
        • учи матчасть. теорию множеств в обязательном порядке, ну еще теорию категорий и алгоритмов (ее даже гопник осилит =) ) , функан (это чтоб отвлечься ;) ), ну и стандартный набор: haskell(clean), ml, erlang, lisp
          Ответить
          • и это все ради простейшего скул-запроса?

            ну для самообразования, конечно, полезно, хотя и только в качестве доп.мат.
            Ответить
            • какое еще самообразование? в нормальных вузах это в программу входит.
              Ответить
              • Это смотря на кого учиться.. Я вообще электро-механик..
                Сайты для развлечения пишу.. и в такую глубь (haskell(clean), ml, erlang, lisp) погружаться не хочеться.
                Ответить
                • хех) что-то стал часто видеть такое:
                  - надоело бухать|геймить|хней страдать, пойду-ка сайты писать
                  Ответить
                  • на геймдев.ру из покон веков такое... только выглядит оно немного по другому:
                    - надоело бухать|геймить|хней страдать, напишу-ка я убийцу крайзиса/вова/доты/т.п.
                    а с началом каникул все сильно усугубляется...
                    Ответить
                    • +1
                      Ответить
                    • У тебя каникулы начались? Теперь понятно почему срешь тут без перерывов...
                      Ответить
              • почему же у меня не вошло? а еще факультет математики и информатики был.. ептваю
                Ответить
                • Ололо, ты неудачник...
                  Ответить
                  • ага, не ту страну назвали гондурасом. дают не знания а бумажку, а уж к этой бумажке свои знания сам ковыряешь, бо унивские паскакали даром не нужны. Ладно, было достижение, сипупу был и жаба - но опять же, уже после самообразования
                    Ответить
                    • Паскали? С++? Да и то, толко после самобучения? Ты в ПТУ учился??
                      Ответить
                      • Факультет Математики и Информатики Вильнюсского Университета, причем специальность информатика
                        Ответить
                        • Угу, знаем-знаем, это в деревне Вильнюска... :)
                          Ответить
                          • не, гордо зовется, столица... но по сути вся страна деревня......
                            Ответить
                        • Ололо "специальность информатика" -- углубленное изучение word, excel, notepad.
                          Ответить
                          • таки нет. но все равно то что нужно не дают, а дают кучу ненужного
                            Ответить
                          • paint
                            Ответить
                            • и как правильно дважды кликать.
                              Кстати, это не только ирония, но и грустная правда: я видел, как некоторые (коим компутерная грамота, ну, не дано) производят двойной клик: нажимают кнопку, секунду держат, отпускают, через секунду еще раз нажимают, держат секунду, отпускают. И не понимают, что не так, если за это время успевают дрогнувшей рукой сделать драг-н-дроп
                              Ответить
                    • Жава, паскаль, срр... Надеюсь ты себя программистом после этого не считаешь...
                      Ответить
                    • И ходят мятежные студни по факультету, вопя "Где здесь С++?!", крики их периодически долетают и сюда :)
                      Ответить
          • уважаю академический подход к образованию:)))
            Ответить
          • Зачем ml?
            Он вроде бы уже устарел? На его основе OCaml и F# уже есть. Или ml лучше своих потомков? Чем-то принципиально отличается?
            Ответить
            • когда это он устарел? только-только свеженький релиз MLton был
              Ответить
              • Разница в основном в синтаксисе, стало быть её почти нет:
                http://www.mpi-sws.org/~rossberg/sml-vs-ocaml.html

                зы: OCaml - более популярен + объектный.
                зыы: Использую OCaml в виде F# для всяких тулз.
                Ответить
                • зачем ООп в подобных языках не пойму
                  Ответить
                  • Ну да, куда тебе это понять... Бананы хоть чистишь?
                    Ответить
                    • > Ну да, куда тебе это понять...

                      Типизация в таких языках мощнее банальной ООПной, она покрывает ООП с запасом... Но всё равно суют... Напр. назначение O'Haskell'а мне так и не понятно...
                      Ответить
                      • Ебать, что ты несешь? Типизация -- одно, ООП -- другое, не отличаешь уже?
                        Нахватаются поверхностных знаний и кончают от своего ЧСВ...
                        Ответить
                        • ок, не так выразился, "Типизация/полиморфизм в таких языках мощнее банального ООПа, она покрывает ООП с запасом..."

                          ООП в 90% юзается для полиморфизма (чтобы диспатчить по линии родитель-потомок для code-reuse) (syntax-driven-инкапсуляция данных не так важна, один хрен во всяких сиплюсах и явах к полям обращаются через методы-геттеры-сеттеры), а в ФЯ это всё намного обширнее, т.е. ООП можно сказать это частный, скромный случай того, что есть в ФЯ... (с несколько иными акцентами, правда, crucial только для обезьянок типа тебя)
                          Ответить
                          • >>ООП в 90% юзается для полиморфизма
                            А так же для инкапсуляции и наследования.
                            Быстро читать википедию, школьник.

                            >>чтобы диспатчить по линии родитель-потомок для code-reuse
                            кого диспатчить-то? Ты про передачу событий что ли и паттерн chain of responsibility?

                            Слышал звон, да не знаешь где он?
                            Какая же каша у тебя в голове(((

                            >> т.е. ООП можно сказать это частный, скромный случай того, что есть в ФЯ

                            дада, сынок, ООП это частный случай ФЯ. А Лондон столица Парижа.

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

                            Без обид, но с таким маразмом в мозгах ты ничего сложнее hello world не напишешь.
                            Пора взрослеть
                            Ответить
                            • +1
                              Ответить
                            • >>ООП в 90% юзается для полиморфизма
                              > А так же для инкапсуляции и > наследования.
                              > Быстро читать википедию, школьник.

                              Я же выше написал - что инкапсуляция данных мало юзается, один хрен для доступа к данным объекта в основном геттеры/сеттеры используются. Публичные поля объекта - моветон в современном ООП.Что касается наследование, то он тоже редко где на самом деле надо. Главное (что в теории, что на практике) - это полиморфные методы и инкапсуляция вспомогательных методов. Опровергай.

                              >Слышал звон, да не знаешь где он?
                              > Какая же каша у тебя в голове(((

                              Я тебя не понимаю.

                              > Пора взрослеть

                              А тебе сколько лет?..
                              Ответить
                              • > один хрен для доступа к данным объекта в основном геттеры/сеттеры

                                отличный признак говнокода - это наличие геттеров и сеттеров на все поля класса...
                                Ответить
                                • > отличный признак говнокода - это наличие геттеров и сеттеров на все поля класса...

                                  наоборт, признак говнокода - прямое обращение, потому что в любой момент логика может поменяться. на эти грабли напр. наступили разрабы моно (или глиба?), они напрямую обращались к полям по всему коду, а потом когда поменялась чуть-чуть логика, пришлось по всему коду выискивать и переделывать (повсюду заменили на сеттеры/геттеры, чтобы потом опять не заниматься тем же).
                                  Ответить
                                  • я про то, что в 90% случаев, геттеры и сеттеры для всех полей не нужны!
                                    а если нужны, то где-то произошел архитектурный фейл...
                                    Ответить
                                    • Хуище, блять, ты слышало о Объектно0Ориентированном Дизайне? Или предпочитаешь подрачивать на классики, без методики без использования даже мозжечка?
                                      Ответить
                                      • тоже пишешь геттеры/сеттеры для всех полей??
                                        Ответить
                                  • а если это простейшие бины, где только поля и аксессоры к ним, где тут логика то может поменяться?
                                    а публик-апи должно быть вынесено в интерфейсы, а там как хотите: прокси, фасады...
                                    Ответить
                                    • Так и запишем: PHPшник со стажем... копипастера.
                                      Ответить
                                  • Я кажется понял)

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

                                    Тоесть красоту архитектуры ты определяешь по тому есть ли аксессеоры/мутаторы, или нет.

                                    А в C#, где проперти скрывает филд -- ты бы убился сразу.

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

                                    Почитай что нить про ООП, задолбал уже свое невежество мохровое в сеть изливать.
                                    Ответить
                                    • > Тоесть красоту архитектуры ты определяешь по тому есть ли аксессеоры/мутаторы, или нет.

                                      У тебя глюки? Где я это говорил? Перестань в меня вкладывать левые мысли, сука.
                                      Ответить
                                • аксессоры на все поля - чаще не более, чем избыточность. если это интернал, то можно зачастую обойтись и без них, особенно если это иннер приватные классы.
                                  Ответить
                                  • >иннер приватные классы

                                    нет, это не говно, это высшая форма я даже не знаю какого говнокода...
                                    Ответить
                                    • иногда очень бывают полезными.
                                      Хороший код - это понятный и эффективный код, а не по "тру"-стандартам. В одном место какой-то подход оправдан, в другом он же - полное гумно
                                      Ответить
                                  • я про то что класс должен реализовывать какой либо функционал...
                                    вместо кучи геттеров/сеттеров, передавать данные в конструкторы, можно написать метод Init с кучей параметров одновременно и тп.
                                    Ответить
                                    • инит с кучей параметров? помилуйте, если их больше двух десятков, заебетесь же?

                                      а класс может и не реализовывать функционал, он может быть просто дата-холдером
                                      Ответить
                                      • если в ините больше 2 десятков переменных, то где-то тут зарылся "божественный класс", что является еще большим убийцей ООП...
                                        Ответить
                              • >>Я же выше написал - что инкапсуляция данных мало юзается, один хрен для доступа к данным объекта в основном геттеры/сеттеры используются.

                                В нормальном классе (если это не DTO) 90% свойств -- приватные.
                                Если у твоего класса все свойства доступны через аксессоры, и все ими пользуются, то одно из двух: или это DTO или это запах кода "envy class" и ты горе-архитектор.

                                Пойми: если ты не знаешь основ ООП и не умеешь им пользоваться -- это еще не значит что ООП -- говно.
                                Ну не у всех проекеты из 15ти строк на javascript, как у тебя.
                                Не всем так повезло.

                                >>Что касается наследование, то он тоже редко где на самом деле надо. Главное (что в теории, что на практике) - это полиморфные методы

                                а полиморфизм по-твоему как работает? Без наследования?

                                И вообще -- открой gang of four, почитай хотя бы пару паттернов (template method например) и узнаешь, зачем наследование нужно.
                                Ответить
                                • > В нормальном классе (если это не DTO) 90% свойств -- приватные.

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

                                  > а полиморфизм по-твоему как работает? Без наследования?

                                  Тьфу ты, я там недописал, я имел в виду наследование объектной части, я не имел в виду переопределение методов.

                                  Моя мысль была к тому, что в ООП крутится реально всё не вокруг объектов, а вокруг методов и о том, как их обобщить на классы. А учитывая что типизация в оопе хуёвая зачастую, не то что всеми нами любимые алгебраические типы, то встаёт вопрос. Классы/типы - хуйня, всё крутится вокруг методов. А почему не начать юзать ФЯ?

                                  > И вообще -- открой gang of four, почитай хотя бы пару паттернов (template method например) и узнаешь, зачем наследование нужно.

                                  выпердыш ебанутых фанатиков этот ваш генг оф фор.
                                  Ответить
                          • попробуй действительно большой проект сделай без ооп.
                            Ответить
                            • Ядро Linux достаточно большой проект?
                              А там нет ООП дерьма. Это вы, обезьяны, без ООП, как без бананов...
                              Ответить
                              • линух - калл, он догнивает последние годы.
                                Ответить
                                • Это ты хуило гниешь заживо, мозг уже отгнил и заполнился говном
                                  Ответить
                                  • я пользуюсь единственной православно верной Windows 7 максимальная. линух поростает быльём.
                                    Ответить
                                    • быдлом
                                      Ответить
                                      • Вот ты все и подтвердил. Только гнилой на моск пидорас будет пользоваться анальной поделкой вендовс.
                                        Ответить
                                • кстати, линух то живее всех живых... и что-то мне подсказывает, что венды 9 будут на двиге линуха, и это будет заявлено как "принципиально новая" ось
                                  Ответить
                                  • Хомячки-анальные-рабы-Балмера как всегда имеют свежайшую информацию с GetTheFacts...
                                    Ответить
                              • смотря что понимать под словом ООП.
                                и равносильно ли это
                                object->method();
                                этому
                                SomeClass_Method( object );

                                поэтому можно похоливарить есть ли в линуксе ООП...
                                Ответить
                                • Можно и похоливарить, да только ты нихуя в ООП не смыслишь, и синтаксис-дрочер впридачу.
                                  Ответить
                                  • вот и первый пук в лужу... подождем других аргументов...
                                    Ответить
                                    • Какие аргументы нужны? О том как вчера у какого-то потного паренька в подвале писю лизал?
                                      Ответить
                                      • об этом расскажешь на каком нибудь другом сайте... ну или с вебкилом пооткровенничать...
                                        Ответить
                                  • сливаешь
                                    Ответить
                                    • ИЧСХ не отрицает ведь сей инцидент!
                                      Ответить
                                • > смотря что понимать под словом ООП.

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

                                  Поэтому object->method(); равняется SomeClass_Method( object );
                                  Ответить
                                  • отличный вброс...
                                    то есть можно смело утверждать что в линуксе есть ООП реализованное методом "синтаксического сахара"?
                                    Ответить
                                    • > то есть можно смело утверждать что в линуксе есть ООП реализованное методом "синтаксического сахара"?

                                      из каких моих слов это следовало? нет, нельзя утверждать. ты код линукса видел хоть?
                                      Ответить
                                      • названия функций в линуксе

                                        void __sched mutex_lock(struct mutex *lock)
                                        void __sched mutex_unlock(struct mutex *lock)
                                        void __sched mutex_lock_nested(struct mutex *lock, unsigned int subclass)
                                        Ответить
                                        • и о чем вы спорите? и ПП и ООП, это все уровни абстракции над ассемблером(точнее машинным кодом), а там сплошь goto-жампы

                                          а для ядра ожидать использование ста уровней абстракции просто кретинизм, если мы не хотим получить супермедленную ось. Приоритет удобство программинга\скорость работы тут более сведено к скорости.
                                          Как, кстати и код интерфейса писать на низкоуровневом языке типа ассемблер тоже идиотизм.
                                          Ответить
                              • 1) ядро линукс (и даже ядро и executive и api ненавидимого тобой виндовс) написано на сях. Не от хорошей жизни а для скорости работы.
                                2) ядра, на самом деле, не такой уж и большой проект.
                                Там нет гигантской бизнес-логики, нет сложной доменной модели итд...

                                Вебкилл, я тебе еще раз говорю: Если ты не умеешь пользоваться ООП -- это не значит что оно не нужно.
                                Ответить
                                • > ядра, на самом деле, не такой уж и большой проект. Там нет гигантской бизнес-логики, нет сложной доменной модели итд...

                                  13320934 строк кода конечно это вам не сложную бизнес-логику "ЧП Тараканова" написать...

                                  http://upload.wikimedia.org/wikipedia/commons/5/5b/Linux_kernel_map.png
                                  Ответить
                                  • )))))))ты реально имбицил.
                                    Ты сложность кода меряешь количеством строк?
                                    Тоесть какой-нить DOS 2.0 сложнее чем система для торговой площадки на бирже потому, что DOS 2.0 писали на асм и строк кода там больше?

                                    Иди, почитай что такое "доменная модель", вонючка
                                    Ответить
                                    • > Ты сложность кода меряешь количеством строк?
                                      Тоесть какой-нить DOS 2.0 сложнее чем система для торговой площадки на бирже потому, что DOS 2.0 писали на асм и строк кода там больше?

                                      Ну ты сравнил бля, код на яве и код на асме. Я-то тут вообще о си говорю. В правильном написании си-код примерно кореллирует с твой любимой яве в отношении строка/смысл (учитывая что в яве чтобы ввести одну небольшую сущность нужно по фаулерам и прочим пидарасом ввести три фабрики, семь адаптаров и ещё дохуя мусора -в стиле "программистов"-маркетологов бля).

                                      Давай не в строчках кода, а в стоимости на переписку с нуля. Линукс стоит разработать 1.4 миллиардов долларов. А твой софт для магазина подсвечников сколлько?

                                      Ынтерпрайз - уныло и для кодообезьянок
                                      Ответить
                                • > ядро линукс (и даже ядро и executive и api ненавидимого тобой виндовс) написано на сях. Не от хорошей жизни а для скорости работы.

                                  нет, просто потому что форсированный ООП там просто не нужен. ты прикинь.
                                  Ответить
                                  • чувак, в ядре линукса не потому c++ нет что он там не нужен.
                                    Поищи в инете на эту тему, много нового для себя откроешь.
                                    А некоторые куски кода оттуда можно прямо на этот сайт выкладывать, отборное говно.
                                    Ответить
                                    • > Поищи в инете на эту тему, много нового для себя откроешь.

                                      нет, ты не прав. ядре линукса нет c++ потому что он там не нужен.
                                      Поищи в инете на эту тему, много нового для себя откроешь.

                                      > А некоторые куски кода оттуда можно прямо на этот сайт выкладывать, отборное говно.

                                      дерзай, чё! жду с нетерпением.
                                      Ответить
                                      • Чувак, посмотри на багфиксы связанные например с дедлоками или утечкой ресурсов в разных ядрах и поймешь, что при наличии деструкторов всех этих багов можно было избежать. Это только один пример.
                                        Ответить
                                        • > Чувак, посмотри на багфиксы связанные например с дедлоками или утечкой ресурсов в разных ядрах и поймешь, что при наличии деструкторов всех этих багов можно было избежать

                                          а с++ поделия тоже текут. почему?
                                          Ответить
                                • > 2) ядра, на самом деле, не такой уж и большой проект. Там нет гигантской бизнес-логики, нет сложной доменной модели итд...

                                  на самом деле, в ядре НЕ ДОЛЖНО быть сложной логики и сервисных методов - ничего лишнего. Это должно выноситься в юзер слой в виде библиотек
                                  Ответить
                                  • Кому Вы это объсняете:-//

                                    У вебкила простая логика: чем больше строк -- тем сложнее логика. Вон он в меня кол-вом строк в ядре пихал.
                                    Ответить
                                    • > У вебкила простая логика: чем больше строк -- тем сложнее логика.

                                      Логика всегда должна быть простой. Если она сложная - то где-то в цепочке оказался пидарас.

                                      KISS :*
                                      Ответить
                                      • логика должна соответствовать задачи. Например, если у вас хелловорлд на 1000 строк, то явно между компом и стулом дефективный элемент

                                        и наоборот, ОСь не может быть простой по определению.
                                        Хотите доказать свое? напишите, тогда поверим. А брызгать здесь слюной и минусовать если не согласны излишне
                                        Ответить
                                        • > и наоборот, ОСь не может быть простой по определению.

                                          у осей логика тоже простая. сложного там - только борьба с хардварным быдлосхемингом (айбиэм-писи-хардваре спроектировано индусами)
                                          Ответить
                                          • по определению, значит, что ОСь должна заботиться о многом. Если так все просто - бери пиши свою оболденос
                                            Ответить
                      • ООПная типизация -- зачот!!!!

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


                        а то как рот откроешь -- так хоть стой, хоть падай
                        Ответить
        • тот, кто Вам посоветовал - сам нуждается в критике на этом сайте, и, похоже, сам не знает разницы между соединить и объединить.
          Ответить
    • Ну во первых внутреннее объединение надо делать через INNER JOIN, а не пользоваться невнятным, mysql-specific конструкциями, иначе в голове будет каша. Я много раз слышал от PHPшников "бывает два вида объединений: через запятую и левое". Это грустно.

      Во вторых что такое $id?
      Это в каком-то database-access-layerе указывается параметр, и потом Вы делаете "setParam"?
      Или это конструкция наподобии
      mysql_query("...... where id=$id");

      ?
      Второй вариант ужасен, и делать так не нужно.

      И наконец почему у Вас пользователи в множественном числе, а группы -- в единственном?
      Ответить
    • Хз, норм код. Единственное что я бы сделал, это:

      SELECT u.nick, g.name FROM users u, group g WHERE u.id = %d AND g.id = u.group;


      Или переписал с использованием ActiveRecord:

      $Db->select( 'u.nick, g.name' );
      $Db->from( array('users u', 'group g' ) );
      $Db->where( array( 'u.id' => $id, 'g.id = u.group' => NULL ) );
      print_r( 
      	$oDb->get()->result_array()
      );



      Вообще завязывай с mysql_query() - эта функция была создана во времена PHP3 для MySQL 3.x.

      Безопаснее и эффективнее пользоваться таким приёмом:

      ...
      $mysqli->prepare("SELECT .. FROM .. WHERE u.id = ? AND ...")
      ...
      Ответить
      • всё хорошо но в меру:
        http://ithappens.ru/story/2568
        Ответить
      • Да я уже месяц как mysqi осваиваю.. То просто пример был.
        Сейчас бы так написал
        $stmt=$db->prepare("SELECT users.nick,groups.name 
        FROM users,groups 
        WHERE users.id=? AND groups.id=users.group;");

        Но как понял из всего вышесказанного, надо писать так

        $stmt=$db->prepare("SELECT users.nick,groups.name 
        FROM users,
        INNER JOIN groups ON (groups.id = users.group) 
         WHERE users.id=?;");
        Ответить
        • После users в секции FROM запятая лишняя. Имена полей и таблиц желательно обрамлять `обратными апострофами` во избежание коллизий с зарезервированными словами SQL. Также советую найти и почитать на досуге любой кодинг стандарт (например, http://framework.zend.com/manual/ru/coding-standard.html). Следовать ему никто не заставляет, но оттуда можно наворовать полезных идей по оформлению кода и не только.
          Ответить
          • а как быть, что `` это mysql-specific?
            Ответить
            • К сожалению что бы сделать полностью переносимый код -- надо использовать хранимки.
              Все сказки про "переносимость SQL" -- именно что сказки
              Ответить
              • Можно использовать query builders с учетом диалекта той или иной базы данных
                А хранимки УГ :)
                Ответить
                • >>Можно использовать query builders с учетом диалекта той или иной базы данных
                  Да ну? Это как? ORM юзать что ли?

                  Глупости-то не надо говорить
                  Ответить
                  • Тупой PHP-задрот сосни хуйца и в гугл просвещаться, что такое драйверы бд и query builders.
                    Ответить
                  • ORM в том числе
                    но я говорил про генераторы запросов, которые могут выступать частью ORM, а не выступать в роли замены.
                    в чем глупость то?
                    Ответить
              • большой плюс хранимок - это что тяжеловато найти кто её написал, историю изменений и прочее щасье. а значит - отследить и уловить шит в ней будет тяжело)
                но в этом то и плюс
                Ответить
                • А что, с хранимками (ф формате .sql) VCS как-то по особому работает?
                  Ответить
              • > К сожалению что бы сделать полностью непереносимый код -- надо использовать хранимки.

                посмотрел бы я как вы код с хранимками будете между MySQL, MS SQL, Postgres, Oracle DB, etc переносить
                Ответить
                • Ты -- хуй.
                  Ответить
                • Какая разница?
                  Вызываешь процедуру "getUserById(12)" , и получаешь инфу о юзвере
                  Ответить
              • ненене, хранимки тоже не выход. Просто хотел заметить, что не нужно обратные кавычки культивировать.
                а для переносимости - есть куча абстрактных слоев
                Ответить
      • я тебя обрадую, это не ActiveRecord, это какой-то Query Builder
        Ответить
        • Только хотел об этом написать. Чувак явно решил модным словом кинуть :)
          Ответить
          • суровый российский ActiveRecord. как наши нанотехнологии кстати говоря)
            Ответить
          • Да, я ведь модный чувак, вместе с чуваками из EllisLab.
            Ответить
        • Знаю как минимум 3 php-фреймворка, где приведенный выше код называется ActiveRecord'ом (Active Record pattern)
          Ответить
          • ActiveRecord это разновидность ORM, то есть в конечном итоге данные из БД должны мапиться на объекты, а тут, как я понял, результатом работы будет массив.
            Ответить
          • Ты забываешь, что 95% php говноедов создают свой фреимворк с блэджеком и шл...
            И что-то мне подсказывает ты тоже из этих 95%.
            Ответить
    • Развели же срач...
      Ответить
      • ну как же без этого...
        люди, обыкновенные люди (ц)
        Ответить
        • да-да, люди тоже срут и воняют)
          Ответить
          • еще Преображенский говорил, что мочиться надо в уборной, а обедать в столовой, и калоши снимать на выходе.
            А обыкновенные люди ходят по коврам в сапогах, не попадают в писуар, и игнорируют такие изобретения как туалетный ёршик и освежитель воздуха.

            Видите аналогию?
            Ответить
            • Нет...
              Ответить
            • > еще Преображенский говорил, что мочиться надо в уборной, а обедать в столовой, и калоши снимать на выходе

              реинакрнация капитана?
              Ответить

    Добавить комментарий