1. Лучший говнокод

    В номинации:
    За время:
  2. PHP / Говнокод #17299

    +158

    1. 1
    $newFilename = strrev(implode('_',explode('_',strrev($basename),-5)));

    убирает префикс даты и типа файла
    пример:
    04_08_2014_5_N_Capture.png
    04_08_2014_5_N_My_Capture.png

    moledet2, 11 Декабря 2014

    Комментарии (7)
  3. PHP / Говнокод #17294

    +161

    1. 1
    if ($cat != '0' && $cat != '1' && $cat != '2') {$cat = '3';}

    Вот такой вот вывод =)

    JAZzmiX, 11 Декабря 2014

    Комментарии (7)
  4. ActionScript / Говнокод #17246

    −84

    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
    public function equals(newSprite:SpriteVO): Boolean
    {
    	return (newSprite.x == this.x &&
    	newSprite.y == this.y &&
    	newSprite.width == this.width &&
    	newSprite.height == this.height &&
    	newSprite.scaleX == this.scaleX &&
    	newSprite.scaleY == this.scaleY &&
    	newSprite.rotation == this.rotation &&
    	newSprite.assetId == this.assetId &&
    	newSprite.asset == this.asset &&
    	newSprite.track == this.track &&
    	newSprite.flipped == this.flipped)
    	
    }

    Почему-то у меня есть впечатление, что люди которые пытаются писать на языке используя приемы из другого языка, это в первую очередь люди, которые не поняли оригинальную задумку в другом языке.

    wvxvw, 03 Декабря 2014

    Комментарии (7)
  5. JavaScript / Говнокод #17213

    +164

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if (jq('#' + id).attr('checked')) {
        jq('#' + id).attr('checked', true);
    } else {
        jq('#' + id).attr('checked', false);
    }

    Чужой код, года 11, переписываю, натыкаюсь на такое вот повсеместно

    tagrim, 28 Ноября 2014

    Комментарии (7)
  6. C++ / Говнокод #17192

    +50

    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
    char parser_msg(char *data, char size)
    {
        //<...>
        QByteArray bt;
        //<...>    
        x=(char *) malloc(size);
        bt.clear();
    
        for (i=0; i<size; i++) {
            x[i]=*data;
            bt.append(*data);
            *data++;
        }
    
        printf("Data parser! >> '%s'\n", bt.toHex().constData());
    
        if (x[0]==0x06) {
           //<...>
        }
    
        if (x[0]==...) {
           //<...>   
        }
    
       //<...>
    }

    Разбор команд из COM-порта. Используется Qt. QByteArray, кстати, заведен здесь только ради дебаг-принта.
    При вызове функции в кач. data передается указатель, возвращаемый data() другого байтаррэя, живущего на стеке.

    ealx, 26 Ноября 2014

    Комментарии (7)
  7. bash / Говнокод #17185

    −103

    1. 1
    2. 2
    3. 3
    if [ "valid" == "$x" ]; then
       echo "x has the value 'valid'"
    fi

    One last point (of style): <...> is better because it avoids the possibility of accidentally assigning the string "valid" to x.

    Йода-стайл теперь и в вашем баше.

    bormand, 26 Ноября 2014

    Комментарии (7)
  8. Куча / Говнокод #17138

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    <div>
    	<label for="background-color">Choose a calor for background : </label>
    	<input id="background-color" type="color" value="#ff0000" onchange="javascript:document.getElementById('chosen-color').value = document.getElementById('background-color').value;"/>
    </div>
    <div>
    	<label for="chosen-color">You have chosen : </label>
    	<input id="chosen-color" type="text" readonly value="#ff0000"/>
    </div>

    Кроме того что тут inline JS event, да к автор еще умудряется использовать document.getElementById('choosen-value').value вместо this.value .

    volter9, 19 Ноября 2014

    Комментарии (7)
  9. C# / Говнокод #17089

    +134

    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
    56. 56
    57. 57
    58. 58
    59. 59
    60. 60
    61. 61
    62. 62
    63. 63
    64. 64
    65. 65
    66. 66
    67. 67
    68. 68
    69. 69
    70. 70
    71. 71
    72. 72
    73. 73
    74. 74
    75. 75
    76. 76
    77. 77
    78. 78
    79. 79
    80. 80
    81. 81
    82. 82
    83. 83
    84. 84
    85. 85
    86. 86
    87. 87
    88. 88
    89. 89
    90. 90
    91. 91
    92. 92
    93. 93
    94. 94
    95. 95
    96. 96
    class ParametersArray
    {
            ...
            /// <summary>
            /// Копирующей конструктор (создает копию коллекции)
            /// </summary>
            /// <param name="prs">Коллекция на основе, которой будет создаваться копия</param>
            public ParametersArray(ParametersArray prs)
            {
                paParameters = new ArrayList();
                for (int i = 0; i < prs.Count; i++)
                {
                    Parameter p = new Parameter(prs[i]);
                    paParameters.Add(p);
                }
            }
            ...
            #region Внутренние состояния
    
            /// <summary>
            /// Внутреннее поле - массив параметров
            /// </summary>
            private ArrayList paParameters;
    
            /// <summary>
            /// Внутреннее поле – идентификатор операции, к которой относятся параметры
            /// </summary>
            private string paOperationId = "";
    
            #endregion
            /// <summary>
            /// Удаляет параметр из коллекции
            /// </summary>
            /// <param name="parameterId">Идентификатор параметра</param>
            public void Delete(string parameterId)
            {
                ArrayList list = new ArrayList();
    
                foreach (Parameter prt in paParameters)
                {
                    if (prt.Id.Trim() != parameterId.Trim())
                    {
                        list.Add(prt);
                    }
                }
                paParameters = list;
            }
        }
    }
    
    ...
    
      /// <summary>
      /// Класс для поиска и обработки шаблонов в параметрах операций
      /// </summary>
      public class Parser
      {
        ...
        #region Конструкторы
    
        /// <summary>
        /// Конструктор инициализирующей класс
        /// </summary>
        /// <param name="requestUserId">ID пользователя, который используется для обработки шаблона ##USER()</param>
        public Parser(string requestUserId)
        {
          pParameters = null;
          pUserId = requestUserId;
        }
    
        #endregion
    
        #region Внешние методы
    
        /// <summary>
        /// Метод перебирает все параметры операции, ищет там шаблоны и заменяет их значениями
        /// </summary>
        /// <param name="opr">Операция</param>
        /// <returns>Операция с обработанными шаблонами</returns>
        public Operation Parse(Operation opr)
        {
          pParameters = new ParametersArray(opr.Parameters);
    
          for (int i = 0; i < pParameters.Count; i++)
            if (FindTemplate(pParameters[i]))
            {
              ReplaceTemplate(pParameters[i]);
    
              //Удаляет параметр с ошибкой
              if (pParameters[i].Value == "parse err")
                pParameters.Delete(pParameters[i].Id);
            }
    
          opr.Parameters = new ParametersArray(pParameters);
          return opr;
        }

    Внимание привлекает код в строках 81-95

    В строке 81-82 мы создаём временную копию параметров операции opr во внутреннем поле класса Parser. Прекрасно. Ещё раз - в публичном в методе инициализируем внутреннее поле (Классный side effect - поле используется в других методах).

    В строке 91 удаляет элемент из внутренней коллекции, пересоздавая коллекцию целиком, то есть требования к памяти временно удваиваются на выходе из метода Delete (до очистки памяти). В методе Delete. Да. Супер.
    потом инициализируем вновь созданной коллекцией публичное поле Parameters во входящем параметре opr метода Delete.

    P.S.: Диагноз - хроническая форма неизлечимой Java. Во первых, автор этих строк искренне думает, что в природе ничего, кроме коллекции ArrayList, не существует. Во вторых, для удаления элемента коллекции мы пересоздаём всю коллекцию целиком, то есть видимо искренне полагая, что коллекция ArrayList - immutable, как и все поля класса Parser (типа ParametersArray) равно как и поле класса ParametersArray (типа ArrayList). Занавес.

    Говнокодище.

    hack2root, 10 Ноября 2014

    Комментарии (7)
  10. Python / Говнокод #16954

    −99

    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
    @login_required
    def datadelivery_stats_report(request, campaign_id):
    
        try:
            start_date = extract_date_to_default_timezone(request, 'start_date')
        except ValidationError:
            return HttpResponseServerError("The %s parameter is invalid." % 'start_date')
        except AttributeError:
            return HttpResponseServerError("The %s parameter is invalid." % 'start_date')
        except KeyError:
            return HttpResponseServerError("The %s parameter is missing." % 'start_date')
    
        try:
            end_date = extract_date_to_default_timezone(request, 'end_date')
        except ValidationError:
            return HttpResponseServerError("The %s parameter is invalid." % 'end_date')
        except AttributeError:
            return HttpResponseServerError("The %s parameter is invalid." % 'end_date')
        except KeyError:
            return HttpResponseServerError("The %s parameter is missing." % 'end_date')

    Джанга такая джанга... Почему же нельзя выбросить ошибку валидации? 404 можно...

    kyzi007, 28 Октября 2014

    Комментарии (7)
  11. Куча / Говнокод #16946

    +129

    1. 1
    2. 2
    3. 3
    4. 4
    # Превратим входную строку в вектор, и отсортируем  
    used_letter <- sort(strsplit(s, "")[[1]])
    # Находим самый большой используемый индекс(у нас уже есть гарантии, что в строке остались только допустимые символы)
    big_letter <- used_letter[length(used_letter)]

    Оригинальный способ поиска максимального элемента в массиве

    alineman, 27 Октября 2014

    Комментарии (7)