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

    +156

    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
    void checkDuplicateType(TWindowCasterToWindowAdditionalInformation GetWindowAdditionalInformation)
    	{
    		const TCasterRepository::const_iterator NotFound=_casterRepository.end();
    		const TCasterRepository::const_iterator Begin=_casterRepository.begin();
    		struct _
    		{
    			static bool TestDuplicateTypeAtThisItem(const TCasterRepository::value_type& Item, TWindowCasterToWindowAdditionalInformation GetWindowAdditionalInformationFunction)
    			{
    				return Item.second==GetWindowAdditionalInformationFunction;
    			}
    		};
    		ASSERT(std::find_if(Begin, NotFound, BOOST_BIND(_::TestDuplicateTypeAtThisItem, _1, GetWindowAdditionalInformationFunction))==NotFound);
    	}

    Большой проект.

    Запостил: Говногость, 28 Марта 2012

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

    • Один чувак из моего отдела сказал, мол это говнокод. Я не считаю это говнокодом. Он предложил запостить на говнокод и проверить. Судя по голосованию 2 человека согласны с этим чуваком. Объясните мне, где здесь говно?
      Ответить
      • Это вброс?
        TWindowCasterToWindowAdditionalInformation GetWindowAdditionalInformationFunction

        Мне лично это по глазам бензопилой ездит.
        Ответить
      • 1) стиль:
        1.1) TWindowCasterToWindowAdditionalInformati on - что за аббревиатура? слишком коротко
        1.2) TestDuplicateTypeAtThisItem внутри структуры с именем _ - круто сэкономили ресурс клавиатуры, да
        1.3) const C::const_iterator - нах?

        2) смысл:
        2.1) функция точно должна аварийно завершить приложение, а не вернуть, например bool?
        2.2) судя по ::value_type и .second - это какой то std::map. Раз уж так хочется уникальности value в оном, а использование буста никто не ограничивает - можно взять хотя бы boost::bimap или иное применение Boost.MultiIndex. Да даже такую явно нередкую операцию поиска по сравнению mapiter.second == value можно было бы вынести наружу и дать ей осмысленное название, кроме того, без boost::bind в этом случае можно и обойтись - ну это уже на вкус и цвет
        Ответить
        • >const C::const_iterator - нах?
          Ну а вообще const в С++ зачем? А затем, чтобы ошибку не допустить и случайно не изменить переменную.

          >это какой то std::map.
          Ну вы правы, только это boost::unordored_map.

          >2.1) функция точно должна аварийно завершить приложение, а не вернуть, например bool?
          Нет, она вызывается только в дебаге, в релизе не вызывается. Типичный assert. Это просто на тот случай, если какойто мудак накосячил и использовал систему не правильно.

          >раз уж так хочется уникальности value в оном, а использование буста никто не ограничивает - можно взять хотя бы boost::bimap или иное применение Boost.MultiIndex
          В данном случае в релизе эта функция не вызывается. И тащить в релиз оверхед бимапа мне кажется не стоит. Кстати, есть там какой unordored_bimap или hash_bimap?

          >Это вброс? TWindowCasterToWindowAdditionalInformati on GetWindowAdditionalInformationFunction
          Ну я не знаю, у нас так принято, чтобы было читаемо. Не wctwai называть же.
          Ответить
          • > unordored_bimap
            http://www.boost.org/doc/libs/1_49_0/libs/bimap/doc/html/boost_bimap/reference/unordered_set_of_reference.html


            > читаемо
            а получилось наоборот
            да даже TCasterRepository::mapped_type и то читаемее

            и да, const & в параметрах забыли
            Ответить
            • >и да, const & в параметрах забыли
              Это указатель на функцию.

              Кстати, чем _ не угодил? Лично я бы здесь вставил лямбду взамен этой локальной структуры со статической функцией без возможности удобного захвата переменных. Но пока С++11 до нас не дошёл. Тк сама структура тут лишний довесок от старого стандарта, то видимо её заменили на _, чтобы в глаза не значащая часть не бросалась.
              Ответить
    • Кстати каково ваше мнение? Лучше завести подобную локальную структуру для алгоритмов STL или выбрасывать функцию из этой структуры в приватные члены объекта, мембером которой является checkDuplicateType?

      Мне, например импонирует локальная структура, но с конструктором для захвата локальных переменных.
      Ответить
    • показать все, что скрытоvanished
      Ответить

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