1. Java / Говнокод #9936

    +68

    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
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    if (seriesOrder == SeriesRenderingOrder.REVERSE) {
                    //render series in reverse order
                    for (int pass = 0; pass < passCount; pass++) {
                        int seriesCount = dataset.getSeriesCount();
                        for (int series = seriesCount - 1; series >= 0; series--) {
                            int firstItem = 0;
                            int lastItem = dataset.getItemCount(series) - 1;
                            if (lastItem == -1) {
                                continue;
                            }
                            if (state.getProcessVisibleItemsOnly()) {
                                int[] itemBounds = RendererUtilities.findLiveItems(
                                        dataset, series, xAxis.getLowerBound(),
                                        xAxis.getUpperBound());
                                firstItem = Math.max(itemBounds[0] - 1, 0);
                                lastItem = Math.min(itemBounds[1] + 1, lastItem);
                            }
                            state.startSeriesPass(dataset, series, firstItem,
                                    lastItem, pass, passCount);
                            for (int item = firstItem; item <= lastItem; item++) {
                                renderer.drawItem(g2, state, dataArea, info,
                                        this, xAxis, yAxis, dataset, series, item,
                                        crosshairState, pass);
                            }
                            state.endSeriesPass(dataset, series, firstItem,
                                    lastItem, pass, passCount);
                        }
                    }
                }
                else {
                    //render series in forward order
                    for (int pass = 0; pass < passCount; pass++) {
                        int seriesCount = dataset.getSeriesCount();
                        for (int series = 0; series < seriesCount; series++) {
                            int firstItem = 0;
                            int lastItem = dataset.getItemCount(series) - 1;
                            if (state.getProcessVisibleItemsOnly()) {
                                int[] itemBounds = RendererUtilities.findLiveItems(
                                        dataset, series, xAxis.getLowerBound(),
                                        xAxis.getUpperBound());
                                firstItem = Math.max(itemBounds[0] - 1, 0);
                                lastItem = Math.min(itemBounds[1] + 1, lastItem);
                            }
                            state.startSeriesPass(dataset, series, firstItem,
                                    lastItem, pass, passCount);
                            for (int item = firstItem; item <= lastItem; item++) {
                                renderer.drawItem(g2, state, dataArea, info,
                                        this, xAxis, yAxis, dataset, series, item,
                                        crosshairState, pass);
                            }
                            state.endSeriesPass(dataset, series, firstItem,
                                    lastItem, pass, passCount);
                        }
                    }
                }

    нашел в jfreechart
    Обе ветки if-else идентичны, только в одной цикл идет от нуля, в другой в обратную сторону.
    Говнокод или нет?

    Запостил: krige, 12 Апреля 2012

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

    • ахах, забавно
      Ответить
    • {
        if (...)
          for ( int i = 0; i < count; i++)
        else
          for ( int i = count - 1; i >= 0; i--)
      }
        {
          ...
        }
      Ответить
      • Хах, интересная конструкция, наверное, можно в каком-нибудь лиспе или немерле на макросах намутить.
        Ответить
        • конструкция не нужна, для этого есть итераторы. К примеру, python:
          count = 10
          order = xrange(count - 1, -1, -1) if REVERSE else xrange(0, count)
          for i in order:
              render_serie(i)
          Ответить
    • Два одинаковых цикла в разные стороны это не страшно и рефакторингом исправляется на автомате, без участия мозга.
      А вот содержимое этих циклов меня кошмарит.
      Ответить
      • Самое кошмарное то, что почти все 200 тысяч линий кода этой библиотеки такое жуткое месиво.
        Ответить

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