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" это сложно?
        Ответить
        • Да, сложно. Это же не просто геттер, который нихуя не делает. Это функция с сайд эффектом. И отдельным ифом мы это подчеркиваем.
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • Я думаю да.
              Ответить
              • а если в языке есть сахар, чтобы проперть не отличалась от метода (в руби они вообще не отличаются, в коко, питоне и C# для этого есть средства), то как бы ты поступил?

                Ну типа

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

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

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

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

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