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

    −115

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    97. 97
    98. 98
    def _message_handler_thread(self):
            self._nick_change_failed = []
            while self.running:
                msg = self._message_queue.get(True)
                text = msg.get_data()
                conn = msg.get_connection()
                args = text.replace("\r", "").replace("\n", "").split(" ")
                command = args[0].upper()
                command_args = args[1:]
                if command == "NICK":
                    if len(command_args) < 1:
                        self._send_not_enough_parameters(conn, command)
                    else:
                        ident = self._clients[conn].identifier if self._clients[conn].identifier else None
                        if not self._set_nick(conn, command_args[0], ident):
                            self._nick_change_failed.append(conn)
                elif command == "USER":
                    if conn in self._clients:
                        if len(command_args) < 2:
                            self._send_not_enough_parameters(conn, command)
                        else:
                            ''''
                            self._send_lusers(conn)
                            self._clients[conn].real_name = command_args[:]
                            self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
                                                                   command_args[0] + "@" + self.name
                            '''
                            self._set_nick(conn, command_args[0], command_args[1])
                            self._send_motd(conn)
                    else:  # Another way to identify is USER command.
                        if len(command_args) < 2:
                            self._send_not_enough_parameters(conn, command)
                        elif conn in self._nick_change_failed:
                            self._nick_change_failed.remove(conn)
                        else:
                            if self._set_nick(conn, command_args[0], command_args[1]):
                                self._clients[conn].identifier = self._clients[conn].get_nick() + "!" + \
                                    command_args[0] + "@" + self.name
                                self._send_motd(conn)
                elif command == "PRIVMSG" or command == "NOTICE":
                    if len(command_args) < 2:
                        self._send_not_enough_parameters(conn, command)
                    else:
                        message_text = command_args[1] if not command_args[1][0] == ":" else \
                            text.replace("\r\n", "")[text.index(":")+1:]
                        src = self._clients[conn].get_identifier()
                        dest = command_args[0]
                        if not dest.startswith("#"):
                            for clnt in self._clients.values():
                                if clnt.nick == dest:
                                    clnt.connection.send(
                                        ":%s %s %s :%s" % (src, command, dest, message_text)
                                    )
                                    break
                            else:
                                self._send_no_user(conn, dest)
                        else:
                            for chan in self._channels:
                                if chan.name == dest:
                                    self._channel_broadcast(conn, chan, ":%s %s %s :%s" %
                                                (src, command, dest, message_text))
                                    break
                            else:
                                self._send_no_user(conn, dest)
                elif command == "JOIN":
                    if len(command_args) < 1:
                        self._send_not_enough_parameters(conn, command)
                    elif not all(c in ALLOWED_CHANNEL for c in command_args[0]) and len(command_args[0]):
                        self._send_no_channel(conn, command_args[0])
                    else:
                        for chan in self._channels:
                            if chan.name == command_args[0]:
                                chan.users += 1
                                self._clients[conn].channels.append(chan)
                                self._send_to_related(conn, ":%s JOIN %s" % (self._clients[conn].get_identifier(),
                                                                             chan.name), True)
                                self._send_topic(conn, chan)
                                self._send_names(conn, chan)
                        else:
                            chan = Channel(command_args[0], 1)
                            chan.users = 1  # We have a user, because we have created it!
                            self._channels.append(chan)
                            self._clients[conn].channels.append(chan)
                            self._clients[conn].send(":%s JOIN %s" % (self._clients[conn].get_identifier(),
                                                       command_args[0]))
                elif command == "PART":
                    if len(command_args) < 1:
                        self._send_not_enough_parameters(conn, command)
                    else:
                        for chan in self._channels:
                            if chan.name == command_args[0]:
    
                                self._send_to_related(conn, ":%s PART %s" % (self._clients[conn].get_identifier(),
                                                                             command_args[0]))
                                self._clients[conn].channels.remove(chan)
                                chan.users -= 1
                                break
    ...

    Я писал сервер для IRC...
    Больше говнокода: https://github.com/SopaXorzTaker/irc-server/

    Запостил: GoUseGitHub, 15 Марта 2015

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

    • > __author__
      https://mail.python.org/pipermail/python-dev/2001-March/013328.html
      Ответить
      • юзал PyCharm, поленился изменить дефолтовые настройки.
        Ответить
    • Питон уродлив.
      Ответить
      • ..., то ли дело "PHP"
        А в сравнении с чем питон уродлив и по каким причинам?
        Ответить
        • c большинством языков и их конвенциями. ява, шарп, да и даже php, несмотря на уебищные :: и $ местами гораздо приятнее. ПЕП8 можно заменить одной строчкой "ЭКОНОМЬ СУКА СИМВОЛЫ, БАЙТЫ И НА ЖЕНЩИНАХ", глазом сложно отлавливать блоки кода.
          Ответить
          • Он нихера не экономит байты и символы. На квадропробелах вместо табов вся экономия теряется.
            Ответить
            • квадропробелы лучше табов даже в питоне
              Ответить
        • Питон уродлив в сравнении с сишарпом, джавой и всякими груви. Он нечитабелен из-за отсутствия кёрли брэкетс и присутствия надобности следить за пробелами. У него говнейшая конвенция, сравнимая по уродству только с ПХП.
          При взгляде на питоний код, глаза сначала собираются в кучу, а потом разбегаются (в ужасе, при виде андерскорсов, мелкобуквенности и визуального отсутствия блоков).
          Ответить
          • > У него говнейшая конвенция, сравнимая по уродству только с ПХП.

            Чо с PSR-то не так? Переводы строк после списка аргументов?
            Ответить
            • Вообще не дано единого стиля именования переменных.
              Ответить
              • psr-1/4.2
                насколько понимаю, это специально сделано так, чтобы старые библиотеки пока не ебались с переписыванием всего.
                Ответить
          • > говнейшая конвенция
            Зато она хотя бы есть, в отличие от некоторых языков.

            > надобности следить за пробелами
            Ты так говоришь, как-будто на других языках не надо...
            Ответить
            • >Ты так говоришь, как-будто на других языках не надо
              Надо. Но на перечисленных мной, ничего не отвалится из-за непоставленного пробела.
              И вообще, для меня, отделять блоки кода пробелами – нечитабельный вариант. То ли дело няшные скобки.
              Ответить
              • > ничего не отвалится из-за непоставленного пробела

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

                Питон - говно, но уж точно не из-за пробелов.
                Ответить
                • да не, из-за пробелов тоже говно
                  Ответить
                • >Питон - говно, но уж точно не из-за пробелов.
                  А какой язык(и) в вашем персональном топе на сей момент?
                  Ответить
                  • Всё говно (tm)

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

                    1. Типизация, натив, мгновенная компиляция.
                    2. Опупенный инструментарий из коробки (gofmt, godoc, go get, профилировщик и т.п.).
                    3. Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
                    4. СОПРОГРАММЫ, ПАРАЛЛЕЛИЗМ, ПИРФОМАНС.
                    5. Весьма приличная стандартная библиотека.
                    Ответить
                    • >женерики
                      Женерики там выглядят как уёбищная кодогенерация, ну по сути их отсутствие.

                      А так мне тоже нравится.
                      >на выходе один переносимый бинарь.
                      > Нет ада с версиями, нет ада с зависимостями, на выходе один переносимый бинарь.
                      Жутко пухлый по двум вышеописанным причинам. Такшта третий я бы внёс в спорные - никто статическую линковку не отменял.

                      В остальном го мне тоже доставляет, тем более надеюсь они его будут развивать. Ну и js, хоть какой он не уродский, хоть как его не любят, но другого у нас нету.
                      Ответить
                      • Из спорных моментов ещё - src/pkg/bin неймспейсы и GOPATH. Не очевидно, как это дело интегрировать в большие репы с обилием других языков программирования.
                        Ответить
              • >отделять блоки кода только пробелами
                Фикс.
                Хотя, для условий и циклов с одной инструкцией – и пробел сойдёт. Но уж никак не для методов и многострочных тел циклов. Это только на мой слепошарый взгляд, конечно же.
                Ответить
                • Откуда то в памяти всплыло "аа язык говно больше 200 параметров в метод передать нельзя". Нормальные люди в питоне не пишут циклов. Ну или они как правило коротки. У питона есть все инструменты чтобы не писать вложенные простыни.
                  Ответить
                  • > язык говно больше 200 параметров в метод передать нельзя
                    Помню, было обсуждение Array из JS (на ГК? там? не помню, где). Мужик хотел запилить автогенерацией массив и не смог пихнуть в конструктор не то 32К, не то 64К аргументов.
                    Ответить
                • То что программист продуцирует поток мысли - это его проблемы а не языка. Хорошо конечно когда скобочки помогают чтению 6х вложенной херотени, но от этого тот код внезапно нормальным не становится.
                  Ответить
              • >отделять блоки кода пробелами – нечитабельный вариант. То ли дело няшные скобки.
                А потом берутся всякие
                if(blah){ return 1;
                }
                else
                {
                return hui+1;}
                Ответить
                • Но тут можно автоматом выправить, в отличие от питона, который можно исправить только, если переписать код на C++ (заодно и пирфоманс будет). Или свернуть в однострочник для пущей непонятности и малого размера, как делают с JS.
                  Ответить
                  • Я имею в виду, что пробелы необходимы что в питоне, что в сишечке, если, конечно, пишется не заведомо говнокод.
                    Ответить
                    • В питоне только пробелы.
                      Ответить
                      • > только
                        А тебе табов хочется?
                        Ответить
                        • Лол. Скобок хочется. Кудрявых.
                          Лучше на груви покодить, короче. Или на котлине каком-нибудь.
                          Ответить
                        • Так-то в питоне и табами отбивать можно, только если где-нибудь в середине кода по ошибке отобьешь пробелами - часы увлекательной отладки гарантированы.
                          Ответить
                      • Но если для хорошего стиля пробелы нужны и в питоне, и в си, то зачем писать еще и скобочки?
                        Ответить
          • > в ужасе, при виде андерскорсов, мелкобуквенности

            Какие мы нежные.

            Мелкобуквенность много где ещё используется - GNU, stl, boost, linux вообще целиком используют этот стиль именований. Я подозреваю, что он родился из Lisp-стиля путём замены тире на подчёркивания (my-cool-thing -> my_cool_thing). Ибо гнушники знатные любители всяческих лиспов.
            В гномьих либах вроде Glib, GTK, GIO, etc. используется тот же стиль именований, что и в пистоне.

            Мне лично вообще индиффирентно, как называть: like_this, LikeThis, Like_this, likeThis, ... Главное - чтобы в проекте было как можно меньше вариаций.
            Ответить
            • Я думаю, что из ФОРТРАНА, там же как-бы не было строчных букв, так что ни верблюжий стиль, ни паскалевский не получился бы. А дефисы писать тоже не получилось бы изза того, что они бы интерпретировались как минус.
              Ответить
              • С фортраном вообще странная история. Писать там можно как угодно, просто компилятор по дефолту маппит все имена в нижний регистр, при этом люди чаще всего пишут всё в верхнем регистре.
                Ну и кэйс-инсенситив не означает, что нельзя писать в верблюже-паскальем стиле :) В паскале же тоже кейс-инсенситив.
                Ответить
            • Некоторые типа тру бородатые кодеры используют и венгерскую нотацию, но мне-то пофиг.
              То, что питон и его стиль именования уродлив – это только моё ничтожное мнение, которое должно волновать кого-то настолько же, насколько меня задевают андерскоры и лоуверкэйс: бугуртить можно сколько угодно, но менять свои предпочтения или лезть со своими в язык – как-то неправильно что ли.
              Ответить
            • Спасибо за разъяснение, roman_kashitsyn!
              Ответить
          • > нечитабелен из-за отсутствия кёрли брэкетс
            Фан фэкт: блоком считается именно отступ пробелами, а { ограничители блока } появились в сишке для того, чтобы из неё можно было вычистить все пробельные символы и переносы на новую строку. Таким образом исходник становится короче и на перфоленту можно уместить больше кода.
            Хотя мне тоже неудобно без фигурных скобочек.
            Ответить
      • > Питон уродлив.
        Сказал обжективсишник.
        Ответить
        • Обж-с прекрасен, как стихи великого поэта.
          Ответить
          • Я вынужден ответить кратко
            На Ваши глупые слова
            Вам невдомек — они осадком
            На сердце лягут навсегда
            Как вы могли сказать такое
            Сравнить Поэта и помои?
            Как могут быть мои стихи
            Похожи на обжектив си?
            Вот был хотя бы он французский
            Сей безалаберный язык —
            Еще б задумался на миг
            Вы видно пили без закуски
            И посему — с глаз сгиньте прочь -
            Не в силах Вам, мой друг, помочь
                                                                                 А.С.Пушкин из могилы
            Ответить
            • Снова
                  буржуйская
                      бестия
              Ругает
                  отступы
                      бестолку!
              Как будто
                  не обязательно
                      это больше нигде?
              Красного
                  кода работник
                      строго следует отступам,
              Только
                  лентяй неученный
                      строки кидает ворохом!
              Нечего
                  блокам путаться
                      как паукам в бороде!
              Ответить
              • ехал():
                    [отступ через отступ()]:
                        видит(отступ(отступ(отступ))
                    сунул = [отступ в отступ()][отступ]
                
                отступ():
                    отступ(отступ(отступ))
                Ответить
                • Не хватает закрывающей скобки.
                  Ответить
                  • > Не хватает закрывающей скобки.
                    Опыт лиспера не пропьешь!
                    Ответить
                    • Кстати, это да, вырабатывается. Меня просто в выворачивает, когда в книжках с математическими формулами замечаю, что забыли скобку. Как можно быть таким невнимательным.
                      Ответить
              • Как ты посмел,
                              буржуин 
                                      проклятый
                Породией 
                        мнить 
                             свою грязь?
                Рабочему классу 
                                бумажкой 
                                         мятой
                Тыкать в лицо 
                               решил, 
                                      мразь?
                
                Тешиться
                         хватит 
                                 слов 	
                                      проституцией
                Довольно 
                        попыток 
                                смешных!
                Такие 
                      певцы 
                            мировой 
                                   революции
                В Советской стране
                                   не 
                                     нужны!
                                                                                             Маяковскый
                Ответить
                • Подсветка от 1с сработала на не.
                  Ответить
                • Фу, как уродливо, без скобок вообще нихуя не понятно!
                  Как ты посмел, {
                    буржуин {
                      проклятый
                    }
                  }
                  Породией {
                    мнить {
                      свою грязь?
                    }
                  }
                  Рабочему классу {
                    бумажкой {
                      мятой
                    }
                  }
                  Тыкать в лицо {
                    решил, {
                      мразь?
                    }
                  }
                  Тешиться {
                    хватит {
                      слов {
                        проституцией
                      }
                    }
                  }
                  Довольно {
                    попыток {
                      смешных!
                    }
                  }
                  Такие {
                    певцы {
                      мировой {
                        революции
                      }
                    }
                  }
                  В Советской стране {
                    не {
                      нужны!
                    }
                  }
                  Ответить
                  • ни компилится ;(
                    Ответить
                    • Чем компилил? Нужен компилятор языка ЯС0Н, от создателей 1С, не пользуйся забугорным шлаком, нам нужно импортозамещение.
                      Ответить
                • Уел, уел. =D
                  Ответить

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