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

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

    +88

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    #include <cstdlib>
    #include <ctime>
    main(){
        srand((unsigned)time(NULL));
        int x = 1^~0-(((1+&x?2||0:(~1))-(1 & 2)*.1-(1+-1?5:3)%1)==0?10:-rand()%5+1);
        return 0;
    }

    perl'овцы развлекаются.

    Hammer, 02 Марта 2014

    Комментарии (2)
  3. Pascal / Говнокод #14532

    +88

    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
    Попытка внедрить контрол TCheckBox в заголовок 1 колонки TListView:
    
    type
      TForm1 = class(TForm)
        ListView1: TListView;
        procedure FormCreate(Sender: TObject);
        procedure FormDestroy(Sender: TObject);
      private
        FListHeaderWnd: HWND;
        FListHeaderChk: TCheckBox;
        FSaveListHeaderWndProc, FListHeaderWndProc: Pointer;
        procedure ListHeaderWndProc(var Msg: TMessage);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    uses
      commctrl;
    
    {$R *.dfm}
    
    function GetCheckSize: TPoint;    
    begin                                                  
      with TBitmap.Create do
        try
          Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
          Result.X := Width div 4;
          Result.Y := Height div 3;
        finally
          Free;
        end;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    var
      CheckSize: TPoint;
      HeaderSize: TRect;
    begin
      ListView1.HandleNeeded;
      FListHeaderWnd := ListView_GetHeader(ListView1.Handle);
    
      FListHeaderChk := TCheckBox.Create(nil);
      CheckSize := GetCheckSize;
      FListHeaderChk.Height := CheckSize.X;
      FListHeaderChk.Width := CheckSize.Y;
    
      // the below won't show anything since the form is not visible yet
      ShowWindow(ListView1.Handle, SW_SHOWNORMAL); // otherwise header is not sized
      windows.GetClientRect(FListHeaderWnd, HeaderSize);
      FListHeaderChk.Top := (HeaderSize.Bottom - FListHeaderChk.Height) div 2;
      FListHeaderChk.Left := FListHeaderChk.Top;
    
      FListHeaderChk.Parent := Self;
      windows.SetParent(FListHeaderChk.Handle, FListHeaderWnd);
    
      FListHeaderWndProc := classes.MakeObjectInstance(ListHeaderWndProc);
      FSaveListHeaderWndProc := Pointer(GetWindowLong(FListHeaderWnd, GWL_WNDPROC));
      SetWindowLong(FListHeaderWnd, GWL_WNDPROC, NativeInt(FListHeaderWndProc));
    end;
    
    procedure TForm1.FormDestroy(Sender: TObject);
    begin
      SetWindowLong(FListHeaderWnd, GWL_WNDPROC, NativeInt(FSaveListHeaderWndProc));
      classes.FreeObjectInstance(FListHeaderWndProc);
      FListHeaderChk.Free;
    end;
    
    procedure TForm1.ListHeaderWndProc(var Msg: TMessage);
    begin
      if (Msg.Msg = WM_COMMAND) and (HWND(Msg.LParam) = FListHeaderChk.Handle)
            and (Msg.WParamHi = BN_CLICKED) then begin
        FListHeaderChk.Checked := not FListHeaderChk.Checked;
    
        // code that checks/clears all items
    
      end;
    
      Msg.Result := CallWindowProc(FSaveListHeaderWndProc, FListHeaderWnd,
                                   Msg.Msg, Msg.WParam, Msg.LParam);
    end;

    function GetCheckSize: TPoint;    
    begin
    with TBitmap.Create do
    try
    Handle := LoadBitmap(0, PChar(OBM_CHECKBOXES));
    Result.X := Width div 4;
    Result.Y := Height div 3;
    finally
    Free;
    end;
    end;

    без комментариев.

    Stertor, 10 Февраля 2014

    Комментарии (4)
  4. Pascal / Говнокод #13444

    +88

    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
    program Project6;
    
    {$APPTYPE CONSOLE}
    
    uses SysUtils;
    
    type TIntArr = array of integer;
    
    function GetSingleArr (i: integer): TIntArr;
    begin
      SetLength(Result, 1);
      Result[0] := i;
    end;
    
    var
      W: TIntArr;
      i : integer;
    begin
      readln(i);
      if i=0 then begin
        W := GetSingleArr(5);
        WriteLn(W[0]);
      end;
      ReadLn;
    end.
    
    Delphi-7
    [Warning] Project6.dpr(25): Variable 'W' might not have been initialized

    Да какого хуя? Динмассив вообще по определению - чисто автоматический тип, как он может не инициализироваться?
    И почему для других типов такая хрень не вылазит?

    TarasB, 18 Июля 2013

    Комментарии (60)
  5. PHP / Говнокод #12568

    +88

    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
    //До рефакторинга
    static function initConnectOnce(){
        $who = get_called_class();
        if(!$GLOBALS[$who][class_cllct]){
            $db = new DataBase();
            $GLOBALS[$who][class_cllct] = $db->selectCollection(get_called_class());
        }
        return $GLOBALS[$who][class_cllct];
    }
    //После
    public static function initCollectOnce(){
        $who = get_called_class();  
        $cllct = &self::$cacheCollect[$who];
        if(!$cllct){
            $db = new DataBase();
            $cllct = $db->selectCollection($who);
        }
        return $cllct;
    }

    Недавно начал рефакторить свой же код. Нашел такой вот незаметный гавнокод...
    Для тех кто в танке =)
    1. selectCollection(get_called_class()) - зачем вызывать по второму разу, если результат уже есть в переменной $who.
    2. $GLOBALS[$who][class_cllct] - немного глюкнуло наверное, когда писал... Логичнее так $GLOBALS[class_cllct][$who].
    3. initConnectOnce - тут даже наверное не Connect должно быть, а Collect.
    4. Вместо $GLOBALS[$who][class_cllct] лучше(имхо) заюзать статичное свойство для класса.
    5. static function initConnectOnce - забыл public описать....

    haker, 11 Февраля 2013

    Комментарии (16)
  6. Куча / Говнокод #10380

    +88

    1. 1
    2. 2
    Посоны, Я думал, что то, что вы здесь выкладываете - это выдумки и неправда. 
    Теперь Я работаю в команде...

    nolka4, 28 Мая 2012

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

    +88

    1. 1
    2. 2
    3. 3
    4. 4
    if( $tpl_name == '' || ! file_exists( $this->dir . DIRECTORY_SEPARATOR . $tpl_name ) ) {
    			return "Отсутствует файл шаблона: " . $tpl_name ;
    			return false;
    		}

    dle

    trororom, 08 Мая 2012

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

    +88

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    if ( ($cache = isset($this->cache[0]) ? $this->cache[0] : null) != null ) {
            $isNeedCache = $cache->isNeedCache($plug);
        }
        
        if ( !$isNeedCache || !$cache->getPlugCache($plug, $plugInfo) ) {
          
          /** processing: running plug */
          $this->dispatcher->processPlug($request, $response);
          
          if ($isNeedCache)
            $cache->setPlugCache($plug, $plugInfo);
        }

    hwtech, 02 Мая 2012

    Комментарии (14)
  9. Pascal / Говнокод #9527

    +88

    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
    function gethours: integer;
    var
      s: string;
      h: integer;
    begin
      s := timetostr(time);
      h := strtoint(s[1] + s[2]);
      Result := h;
    
    end;
    
    function getmins: integer;
    var
      s: string;
      h: integer;
    begin
      s := timetostr(time);
      h := strtoint(s[4] + s[5]);
      Result := h;
    end;
    
    function getsecs: integer;
    var
      s: string;
      h: integer;
    begin
      s := timetostr(time);
      h := strtoint(s[7] + s[8]);
      Result := h;
    end;

    BanTIk, 24 Февраля 2012

    Комментарии (6)
  10. Pascal / Говнокод #9430

    +88

    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
    var A:array of record
      Foo: integer;
    end;
    
    function NewNode: integer;
    begin
      SetLength(A, Length(A)+1);
      Result := High(A);
      // возвращаем не указатель на последний элемент,
      // а номер последнего элемента, потому что массив динамический и указатели нестабильны
    end;
    
    procedure DoSmth(var i: integer);
    var
      n1,n2: integer;
    begin
      n1 := NewNode;
      n2 := NewNode;
      // дальше что-то проделывааем над A[n1] и A[n2]
      i := A[n1].Foo + A[n2].Foo;
    end;
    
    var
      NewIndex: integer;
    begin
      NewIndex := NewNode;
      DoSmth(A[NewIndex].Foo);
    end.

    Угадайте, почему это не будет работать и приведёт к порче памяти.

    TarasB, 15 Февраля 2012

    Комментарии (20)
  11. Java / Говнокод #9306

    +88

    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
    public static String objectToString( Object val ) {
        if ( val == null ) {
          return null;
        } // if
    
        if ( val.getClass() != String.class  ){
          Utils.outln( "Utils.objectToString: Illegal argument: val=" + val +
            "; val.getClass()=" + val.getClass()
          );
          //--Чтобы было видно, где неправильно------------------------------------
          try {
            String str = null;
            int len = str.length();
          } catch ( Exception ex ) {
            ex.printStackTrace();
          } // try
          //--Чтобы было видно, где неправильно------------------------------------
    
          return "";
        } // if
        return (String)( val );
      } // objectToString

    Нашел в коде проекта. Много думал

    lexev, 03 Февраля 2012

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