1. C++ / Говнокод #26953

    0

    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
    uint64_t stored_msg_id = _container_msg_id.get(ctrl_msg.sequence); // Получаем msg_id из мапы для связки сообщений
    if (stored_msg_id)
        proto_fill(ctrl_msg, stored_msg_id); // если он там был то новому сообщению даем этот msg_id
    else
        proto_fill(ctrl_msg);  // Иначе формируем новый msg_id
    
    // Отсылаем сообщение 
    ...
    
    // Если msg_id не был в _container_msg_id то произойдет попытка вставки msg_id полученного через proto_fill.
    if (!stored_msg_id && !_container_msg_id.insert(ctrl_msg.sequence, ctrl_msg.msg_id))
    {
        DEBUG(L, 0, "[%p] Can't store request's control message id (%llu) in bunch map" \
                    ", response's msg_id will differ", this, msg.msg_id);
    }

    С точки зрения читабельности кода, в последнем ветвлении говнокод?

    Запостил: OlegUP, 15 Сентября 2020

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

    • Х.з., я бы просто вложенные ифы ебанул вместо 11 строки. Не люблю сложную логику.
      Ответить
      • "A AND NOT B" это сложно?
        Ответить
        • Да, сложно. Это же не просто геттер, который нихуя не делает. Это функция с сайд эффектом. И отдельным ифом мы это подчеркиваем.
          Ответить
          • то есть если бы там был не insert а get, то было бы ок?
            Ответить
            • Я думаю да.
              Ответить
              • а если в языке есть сахар, чтобы проперть не отличалась от метода (в руби они вообще не отличаются, в коко, питоне и C# для этого есть средства), то как бы ты поступил?

                Ну типа

                user.isAllowedToKurarekoo, а там может метод в базу ходит и делает апдейт
                Ответить
                • надо пизды за такой код давать
                  Ответить
                  • надо, не спорю

                    можем ли мы всегда считать, что проперть всегда без сайдэффектов?
                    Ответить
                    • я из js
                      в моем фреймворке геттеры должны быть чисыми по код стайлу и для мемоизации
                      статически это не заэнфорсишь так что придется по-старинке пиздить
                      Ответить
                      • Интересно, как это решают рубитсты: у них нету разницы между методом и проперти при вызове, но у булевых проперти принято добавлять в конце знак вопроса
                        Ответить
                        • думаю что как и везде: геттеры - прилагательные, методы - глаголы
                          Ответить
                          • if what_to_do.improve
                               petuh.improve
                            end

                            английский хуевый
                            Ответить
                            • ну бля, напиши what_to_do.improvable
                              Ответить
                              • improvable звучит как интерфейс
                                Ответить
                                • интерфейс это IImprovable
                                  и не думаю что в руби есть интерфейсы
                                  Ответить
                                  • запахло майкрософтом
                                    где еще так?

                                    >и не думаю что в руби есть интерфейсы
                                    ну да, там утка по идее

                                    можно эсмулировать модулем кидающим not implemented, но зачем
                                    Ответить
                                    • >где еще так?
                                      Дык это hungarian notation
                                      Где захочешь там и будет
                                      Ответить
                                      • имхо нет

                                        хунгариан это про префиксы переменных, отражающие тип или семантику

                                        а IInterface и CClass я видел тока в C#, и MFC/COM вроде
                                        Ответить
                                        • А я ничо другого и не видел
                                          Ответить
                                          • ну вот у жабы и обжс такой нотации нету например
                                            и у скриптушни вроде тоже нет (хотя в тайпскприпте я не зна-- она же от микрософт)
                                            Ответить
                                            • в тайпскрипте тоже такая
                                              Ответить
                                              • ну мокрософт же

                                                в QT такого нет: там просто классы
                                                в ObjC (и вероятно в свифте?) есть двухбуквенный префикс вместо namespace: NS -- Cococa (от NextStep), UI от UIKit итд.
                                                В Java/Kotlin вообще префиксов нет. Тупо InputStream
                                                В питоне и руби тоже
                                                Ответить
                    • Я думаю да. Ну с погрешностью на какое-нибудь кеширование в кишках.

                      Т.е. логически геттер не должен иметь сайдэффектов. Физически они там могут быть, но я как юзер геттера не обязан об этом знать.
                      Ответить
                • Ну вроде как нормальная модель должна сохраняться в БД по вызову save().
                  Ответить
    • Ага, неконсистентно расставляешь фигурные скобки....
      Ответить
      • Я не про расстановку скобок, а про сам if, ведь его для читаемости лучше заменить на
        А скобки по корпоративному стилю расставляются.

        if (!stored_msg_id)
        {
            if (!_container_msg_id.insert(ctrl_msg.sequence, ctrl_msg.msg_id)
            {
                DEBUG(L, 0, ...);
            }
        }
        Ответить

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