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

    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
    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
    const int DD_GOOD = 1;
    const int DD_BAD = 2;
    const int DD_BAD_VERT = 3;
    auto segStatus = [&DD_GOOD, &DD_BAD, &DD_BAD_VERT](SomeClass* seg, EXTR ext, coord pickPt, double pickElev) -> int
    {
    	Pt&			pt = seg->ExtremePt(ext);
    	Line&	line = seg->ExtremeLn(ext);
    	coord			btPt = seg->GetExtremeWallPos(ext);
    
    	if (pt.GetCoord() != pickPt && btPt != pickPt)
    	{
    		return DD_BAD;
    	}
    
    	if (pt.pairGuid == GUID_NULL && EQ(pt.GetHeight(), pickElev))
    	{
    		return DD_GOOD;
    	}
    
    	if (!line.IsNonVert())
    	{
    		return DD_BAD;
    	}
    
    	double e1 = line.m_startPt.GetHeight();
    	double e2 = line.m_endPt.GetHeight();
    	
    	if (e1 < e2 && e1 < pickElev && pickElev < e2)
    	{
    		return DD_GOOD;
    	}
    	
    	if (e2 < e1 && e2 < pickElev && pickElev < e1)
    	{
    		return DD_GOOD;
    	}
    	
    	return DD_BAD_VERT;
    };

    Когда не умеешь пользоваться энумами.

    Запостил: yog_muskrat, 26 Августа 2016

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

    • Зачем нужны энумы?
      Ответить
    • Не использованный енам ? Ну это конечно преступно по самое никуда. Аж никак.
      Ответить
      • Там 11 плюсы - можно было бы сделать енам класс с отдельным неймспейсом для значений и типизацией. Делать вместо этого интовые константы с говнопрефиксами и магическими значениями - самый настоящий говнокод.
        Ответить
        • Ну и лямбда эта - тоже говно.
          Ответить
          • Автор что, потом собирается писать что-то типа
            segStatus = SegStatus2;
            ?
            Ответить
            • Этой переменной другую лямбду не присвоишь - типы не совпадут.
              Ответить
            • Тут моя вина - недостаточно полно процитировал.
              Эта лямбда объявляется внутри функции, а не в глобальной области, и в дальнейшем используется примерно так:

              int startStatus = segStatus(seg, START, pickPt, pickElev);
              int endStatus = segStatus(seg, END, pickPt, pickElev);
              if (startStatus == DD_GOOD)
              {
              	/// ...
              }
              else if (startStatus == DD_BAD_VERT || endStatus == DD_BAD_VERT)
              {
              	/// ...
              }


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

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