1. Python / Говнокод #19100

    −24

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    def add_row_table(mal):
    	win.ui.tableMAL.setRowCount(win.ui.tableMAL.rowCount()+1)
    	q_db = QtGui.QPushButton('add', win.ui.tableMAL)
    	q_db.setProperty("row", str(mal))
    	win.ui.connect(q_db, QtCore.SIGNAL("clicked()"), add_Click)
    	win.ui.tableMAL.setCellWidget(win.ui.tableMAL.rowCount()-1, 0, q_db)
    	
    def add_Click():
    	print win.ui.tableMAL.sender()

    В последнее время в среде лам появилась мода писать код на PyQt/PySide в процедурном стиле. Вот один из этих шедевров.
    http://python.su/forum/topic/28373/

    Запостил: Rodegast, 27 Ноября 2015

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

    • Ох, прямо как в Win32 API окунулся.
      Ответить
      • Наслаждайся!
        http://sourceforge.net/projects/pywin32/
        Ответить
    • А что здесь не так?
      Ответить
      • Ну что тут можно сказать... Напиши небольшой диалог в вышеприведённом стиле, потом импортируй его и попробуй открыть несколько не модальных окон. Может быть после этого ты и поймёшь что здесь не так.
        Ответить
    • > лам
      Прокачанных тибетских монахов?
      Ответить
      • Ну ты почти прав.
        http://lurkmore.to/%D0%9B%D0%B0%D0%BC%D0%B5%D1%80
        Ответить
    • Без ООП ты всё равно ничего толкового не напишешь, а с этим у тебя проблема.

      Почитай про ООП, научись пользоваться классами и только после этого пробуй заниматься гуем. Рано тебе ещё про таблицы спрашивать.

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


      У ОПа ООП головного мозга. Хм, думал эта порода повымерла в конце 00х.
      Ответить
      • ООПянка в острой форме.
        Ответить
      • > У ОПа ООП головного мозга.

        Научись сначала диагноз правильно ставить. Речь идёт о GUI который без ООП не пишется.
        Ответить
        • А что без ООП пишется?
          Ответить
        • > GUI который без ООП не пишется
          Да ну. Писал GUI без ООП, когда это ещё было мейнстримом.

          Другое дело, что там ООП в какой-то форме само собой зарождаться начинает, когда задумываешься о реюзабельности виджетов. Даже если язык не умеет в классы и вся прога полностью процедурная. Завёл структуру, чтобы хранить контекст - получилась инкапсуляция. Передал указатель на функцию для обработки событий - получился полиморфизм. Вызвал из этой функции функцию от более простого виджета - получилось наследование.
          Ответить
          • Но простейшую табличку со списком анимца, типа той, что нужна ОП'у, можно замутить и не создавая свои классы.
            Ответить
            • Конечно можно, но только в итоге говнокод получается. Собственно про это сабж.
              Ответить
              • Всё-таки есть ситуации, когда говнокод вполне приемлем - прототипы на выброс, одноразовые проги и т.п. Для них качественный код - просто потеря времени.
                Ответить
                • А какой профит от говнокода? Теоретически на нём можно несколько строчек сэкономить, но никакого смысла в этом я не вижу.
                  Ответить
                  • Смысл во времени разработки. Если на 146% уверен, что код пойдёт на выброс - можно всё херачить в паблик или вообще в глобалки, не думать о правильном разбиении на модули, не писать тесты, ложить хуй на все ошибки и исключения и т.п. Главное - как можно быстрее получить мало-мальски работающий прототип, подтверждающий какую-то идею или демонстрирующий какую-то фичу.

                    А потом, когда уже примерно понял как всё будет выглядеть и работать - начать проектировать нормальную архитектуру.
                    Ответить
                    • От процедурного стиля код быстрее не напишеться, а вот шанс наткнуться на "засаду" из-за которой дофига переделывать придётся возрастает многократно.
                      Ответить
                  • Говно - оно не в коде, говно - оно в головах

                    Фанатизм - не есть вещь хорошая. ООП - лишь инструмент.

                    http://habrahabr.ru/post/153225/
                    Ответить
                    • Я не фанат ООП и не фанат ФП ровно как и других парадигм. Для каждой задачи нужен свой инструмент. GUI как раз заточен под ООП, без него ничего хорошего не получится.
                      Ответить
                      • >GUI как раз заточен под ООП, без него ничего хорошего не получится.
                        А можно аргументы?
                        Я просто писал ГУЙ на свингах, а до этого имел печальный опыт MFC и скажу что ничего хорошего с концентрированным ООП не получается.

                        А вот допустим есть ангуляр, и в нём вполне замечательно гуй пишется, без всяких там ООП.
                        Ответить
                        • Аргументы привёл bormand. Если пытаться писать GUI в процедурном стиле, то получится суррогат ООП, причём суррогат весьма косячный (если не веришь то сделай так как тут написано http://govnokod.ru/19100#comment307606).

                          > А вот допустим есть ангуляр, и в нём вполне замечательно гуй пишется, без всяких там ООП.

                          Вот ссылка на питоновскую библиотеку в которой тоже GUI как-бы "без всяких там ООП" пишется. Но это не значит что его там нет, просто ты с ним не сталкиваешься.
                          https://pythonhosted.org/guiqwt/examples.html
                          Ответить
                      • Чо, правда?
                        Про PyQT ничего не скажу, а вот на Tkinter писал немало. И в ООП-стиле, и в процедурном. В результате сформировалось твердое убеждение - если нужен многоразовый виджет, создавай класс и штампуй экземпляры. Если совокупность виджетов гарантированно используется один-единственный раз - в задницу ООП, код от него становится лишь нечитабельней и тяжелей.
                        Ответить
                • На сишке люди уже не пишут?
                  Ответить
                  • А на сишке тоже часто ООП юзается. Даже в ядрах операционок нечто похожее на объекты есть. И они даже наследуются.
                    Ответить
                    • Через макросы?
                      Ответить
                      • Не всегда даже через макросы.

                        Вот тебе, к примеру, интерфейс:
                        http://lxr.free-electrons.com/source/include/linux/fs.h#L1613

                        И одна из тысяч его реализаций:
                        http://lxr.free-electrons.com/source/drivers/hid/hid-sensor-custom.c#L722
                        Ответить
          • >Завёл структуру, чтобы хранить контекст - получилась инкапсуляция.
            Дык заводить структуры было принято еще в структурно-процедурном программировании.

            >Передал указатель на функцию для обработки событий - получился полиморфизм.
            Это не полиморфизм. Это ФП. Когда в js колобки передают это тоже называется ООП?

            Полиморфизмом труЪ оопёбы обычно заменяют оператор свищ.

            Единственное что в ООП оригинального — наследование, и то considered harmful.
            Ответить
            • > Это не полиморфизм. Это ФП
              Полиморфизм, это если указатели на обработчик сохранять в структуре.
              Ответить
            • Две TeaFactory этому господину
              Ответить
              • TeaSender.getInstance().send(
                    TeaFactory.create(2),
                    Gentleman.byName("3.14159265"));
                Ответить
                • GentlemanFlywight.Finder.FindByName("roman-kashitsyn").PersonMediator.sendDrink(
                      ((DrinkFactory) new TeaFactory).create(2),
                      GentlemanFlywight.Finder.FindByName("3.14159265"));
                  Ответить
    • > tableMAL
      > def add_row_table(mal, name, russian, ep, rating, DB)
      > японская буква А в подписи
      Да он же анимешник!
      Ответить
    • >QtCore.SIGNAL("clicked()")
      Что за блядство - писать код в строке?
      Ответить
      • Бездумный порт с оригинала. В крестоблядской версии Qt точно так же. Эти сигналы там работают через велосипедную рефлексию, поэтому строками. Только в последних версиях можно вешать лямбды и функции напрямую.

        P.S. Это не код, кстати. Это имя сигнала/слота и типы его параметров.
        Ответить
        • Жалко... А я уже понадеялся, что можно выполнять сиплюсплюс-инъекцию.
          Ответить

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