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

    +165

    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
    Ckey::Ckey(const String& name, const String& suffix1, const String& suffix2, const String& suffix3)
    {
    	ASSERT(name.Size(), "Key with emty name are invalid!");
    
    	if (!name.Size())
    	{
    		return;
    	}
    	PushBack(name);
    
    	if (!suffix1.Size())
    	{
    		return;
    	}
    	PushBack(suffix1);
    
    	if (!suffix2.Size())
    	{
    		return;
    	}
    	PushBack(suffix2);
    
    	if (!suffix3.Size())
    	{
    		return;
    	}
    	PushBack(suffix3);
    }

    Ну просто замечательный конструктор класса.
    Собственно сам класс унаследован (public-ом, причем) от местной реализации класса vector, отсюда загадочные методы PushBack.
    А String - это не менее замечательная, местная, реализация строк.

    Запостил: elenbert, 14 Апреля 2011

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

    • и ведь объект всё равно будет создан с некорректным состоянием :)
      Ответить
      • А какое состояние у объекта корректное?
        Ответить
        • мсье, вы третью строчку наблюдали? в релизной сборке что случится?
          Ответить
          • Конечно логично предположить, что данный ASSERT является таким же "расширением" стандартного assert() из assert.h как и остальные классы, описанные в комментарии топикстартера. Но, тем не менее, это всего лишь предположение. К тому же, кто Вам сказал, что данный код будет собираться в релизе? Ассерты для того и созданы чтобы ловить ошибки только на этапе разработки, а дальше, т.е. в релизе, условие должно проверяться до вызова конструктора из ГК, или использоваться исключения. В данном случае использование ASSERT может быть оправдано, если Ckey::Ckey() вызывается с параметрами, известными на этапе компиляции.
            Ответить
            • прошу прощения, вы только что здесь чем занимались -- поисками оправданий для говнокода?

              ЗЫ
              а можете предположить, что мне известно чуть больше вашего об условиях использования и применимости данного кода?
              Ответить
              • Ну, если это Ваш код, так и скажите - я посочувствую. В целом код говно. Но некоторые его аспекты вполне можно оправдать и объяснить. От лица стороннего наблюдателя по крайней мере.
                Ответить
    • какой трогательный и наивный return в конструкторе =)
      Ответить
      • Совершенно обычный return. В void-функциях тоже смущает?
        Ответить
      • А в чем именно вы видите его трогательность и наивность?
        Ответить
    • видимо, религия говорит, что труёво только одна точка выхода.
      Ответить

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