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

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

    +168

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    function FileExists($file) {
    	if(file_exists($file))
    		return true;
    	else
    		return false;
    }

    Гениальная функция, используемая в одном из расширений Джумлы.

    undeletable, 18 Октября 2013

    Комментарии (15)
  3. Java / Говнокод #13962

    +141

    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
    public class SimpleTest {
        class A {}
        class B extends A {};
        class C extends B {};
    
        public void doIt() {
            A a = new A();
            B b = new B();
            C c = new C();
    
            List<B> lst = new ArrayList<B>();
            lst.add(a);
            lst.add(b);
            lst.add(c);
    
            a = lst.get(0);
            b = lst.get(0);
            c = lst.get(0);
    
            List<? extends B> lstExtends = lst;
            lstExtends.add(a);
            lstExtends.add(b);
            lstExtends.add(c);
    
            a = lstExtends.get(0);
            b = lstExtends.get(0);
            c = lstExtends.get(0);
    
            List<? super B> lstSuper = lst;
            lstSuper.add(a);
            lstSuper.add(b);
            lstSuper.add(c);
    
            a = lstSuper.get(0);
            b = lstSuper.get(0);
            c = lstSuper.get(0);
        }
    }

    Какие строки вызовут ошибку компиляции?

    huitka, 16 Октября 2013

    Комментарии (15)
  4. Java / Говнокод #13917

    +70

    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
    // there is class PlayerExt, which extends class Player...
    // min >= 0
    // max <= players.size()
    
        List<PlayerExt> players = playerManager.getPlayers(contestId);
        Player[] response = new Player[players.size()];
    
        for (int i = min; i < max; i++) {
            response[i] = players.get(i);
            if (!players.get(i).isQualified()) {
                response[i].setChipStack(BigDecimal.valueOf(-1));
            }
            response[i].setPosition(i + 1);
            response[i].setCustomerId(players.get(i).getCustomerId());
        }

    Для таких начальных условий, как обозначено в комментарии в начале кода, формируем список игроков.
    Особенно вдохновляет самая последняя инструкция в теле цикла.

    wissenstein, 09 Октября 2013

    Комментарии (15)
  5. C++ / Говнокод #13905

    +8

    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
    const Registry & Registry::getInstance()
    {
    	Registry *instance = RegistrySingleton::instance();
    	if (!instance->mRootNode) {
    		instance->load();
    	}
    	return *instance;
    }
    
    void Registry::load()
    {
    	try {
    		// ...
    		if (!mReader) {
    			mReader = XMLReaderFactory::createXMLReader();
    		}
    		// ...
    		mReader->parse( ... );
    	} catch (...) {
    		// ...
    		throw; // удачи всем пользователям обрабатывать исключения xerces...
    	}
    }

    боян синглтонно-абстрактный для чтения xml конфигурации с помощью xerces.

    и не только ошибки не обрабатаешь (потому что getInstance() их бросает, угадай какой именно вызов из сотен загружает конфигурацию), но и в добавок народ не впечатал как многопоточность сделать правильно (RegistrySingleton это специализация шаблона который синхронизирует инициализацию mInstance переменной, и только).

    Dummy00001, 07 Октября 2013

    Комментарии (15)
  6. JavaScript / Говнокод #13710

    +159

    1. 1
    try{while(confirm("The result is "+(1/prompt("a*x=b\n\nEnter a").split().join()*prompt("a*x=b\n\nEnter b").split().join())+"\n\nOnce again?"));}catch(e){}

    Qwertiy, 31 Августа 2013

    Комментарии (15)
  7. Pascal / Говнокод #13683

    +120

    1. 1
    2. 2
    3. 3
    Раз уж у нас пошла мода на анальные уроки - выложу, пожалуй, еще одну ссылку:
    
    http://avtuh.ru/2010/04/09/delphi-dopolnitelnyj-potok-v-programme.html

    На видео анальный учитель с сайта avpetuh.r доходчиво объясняет, как нужно обращаться из потока к компонентам формы.
    Долой синхронизацию!!!

    Stertor, 27 Августа 2013

    Комментарии (15)
  8. Java / Говнокод #13623

    +68

    1. 1
    2. 2
    3. 3
    if (!(taxOrgsFilter.getTaxOrgs() == null)) {
    ....
    }

    ingenuus, 19 Августа 2013

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

    +158

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    <?php
    class Digits {
      //Convert digits to negative
      public static function toNegative($num) {
        return '-' . $num;
      }
    }

    CRM система, очень дорогая
    ПХП хоть само по себе стремное, но я бы даже до такого не додумался
    Основная функция системы: анализ и рассчеты
    Они еще жалуются что оно плохо считает
    Интересно а что же будет если ему передать -10 например ? --10 :)
    Чем не устраивает:
    function toNegative($num) {
    return ($num > 0) ? -1 * $num : $num;
    }

    v_anonym, 31 Июля 2013

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

    −89

    1. 1
    amount_in_cents = int(100 * amount)

    Поскольку все знают, что float нельзя использовать при работе с деньгами (ну там, ошибки округления), чуваки решили хранить все суммы в центах. Тогда они будут целыми числами.

    По такой формуле вычисляется сумма в центах, которую клиент должен заплатить за товар.

    Прикол в том, что если товар стоит 36.91 евро, то
    * amount = 36.91
    * 100 * amount = 3690.9999999999995
    * int(100 * amount) = 3690

    И клиент платит всего лишь 36.90!

    asolntsev, 28 Июля 2013

    Комментарии (15)
  11. Pascal / Говнокод #13329

    +97

    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
    {$APPTYPE CONSOLE} {$IFDEF FPC}{$MODE DELPHI}{$ENDIF}
    uses SysUtils, Classes, IniFiles, Variants;
    
    type TGetToken = function(var p: pointer): LongInt;
    procedure ParseData(var p: pointer; isKey: boolean); forward;
    procedure AdvanceIndex(var i: LongInt); forward;
    
    function GetIntegerToken(var p: pointer): LongInt;
    var value: LongInt = 0;
        negative: boolean;
    begin
      Inc(p);
      negative := PByte(p)^ = ord('-');
      if negative then Inc(p);
      repeat
        value := value * 10 + LongInt(PByte(p)^ - $30);
        Inc(p)
      until PChar(p)^ = 'e';
      Inc(p);
      if negative then value := - value;
      Result := value
    end;
    
    function GetListToken(var p: pointer): LongInt;
    var index: Integer = 0;
    begin
      Inc(p);
      while PChar(p)^ <> 'e' do begin
        AdvanceIndex(index);
        ParseData(p, false);
      end;
      Inc(p);
      Result := -1
    end;
    
    function GetDictToken(var p: pointer): LongInt;
    begin
      Inc(p);
      while PChar(p)^ <> 'e' do begin
        ParseData(p, true);
        ParseData(p, false);
      end;
      Inc(p);
      Result := -1
    end;
    
    function ParseError(var p: pointer): LongInt;
    begin
      Writeln('TYIIINTE CBET');
      Result := -1;
      Halt(Result)
    end;
    
    const FuncTable: array[0..3] of TGetToken = (ParseError, GetDictToken, GetIntegerToken, GetListToken);
    
    function GetStringToken(var p: pointer): string;
    var value: ShortString;
        length: LongInt = 0;
    begin
      repeat
        length := length * 10 + LongInt(PByte(p)^ - $30);
        Inc(p)
      until PChar(p)^ = ':';
      if length in [1..255] then begin
        PByte(p)^ := length;
        Move(p^, value, length+1);
        Result := value;
      end else Result := 'BINARY DATA';
      Inc(p, length + 1);
    end;
    
    var sl: TStringList;
        outf: TIniFile;
    
    procedure AdvanceIndex(var i: LongInt);
    begin
      sl.Add(IntToStr(i));
      Inc(i);
    end;

    type TSaveData = procedure(value: Variant);

    procedure SaveData(value: Variant);
    var
    key: string = '';
    i: LongInt;
    begin
    for i := 0 to sl.Count - 1 do key := key + '.' + sl[i];
    Delete(key, 1, 1);
    outf.WriteString('Torrent', key, VarToStr(value));
    if sl.Count > 0 then sl.Delete(sl.Count - 1);
    end;

    procedure PushKey(value: Variant);
    begin
    sl.Add(value)
    end;

    procedure PopKey(value: Variant);
    begin
    if sl.Count > 0 then sl.Delete(sl.Count - 1);
    end;

    procedure NOP(value: Variant);
    begin
    end;

    const SaveDataTable: array[0..3] of TSaveData = (SaveData, PushKey, PopKey, NOP);

    procedure ParseData(var p: pointer; isKey: boolean);
    var
    OpCode: ShortInt;
    value: Variant;
    begin
    OpCode := PByte(p)^;
    if OpCode >= $60 then value := FuncTable[OpCode shr 2 and 3](p)
    else if Opcode in [$30..$39] then value := GetStringToken(p)
    else ParseError(p);

    SaveDataTable[ord(isKey) + 2*ord(chr(OpCode) in ['d', 'l'])](value);
    end;

    var f: TFileStream;
    s: LongInt;
    p, cp: pointer;
    begin
    if ParamCount <> 1 then Writeln('Usage: ', ParamStr(0), ' filename.torrent')
    else
    try
    f := TFileStream.Create(ParamStr(1), fmOpenRead);
    s:= f.Size;
    GetMem(p, s + 1);
    f.ReadBuffer(p^, s);
    cp := p;
    outf := TIniFile.Create(ChangeFileExt(ParamStr(1), '.ini'));
    sl := TStringList.Create;
    ParseData(cp, false);
    finally
    if sl <> nil then sl.Destroy();
    if outf <> nil then outf.Destroy();
    if p <> nil then FreeMem(p);
    if f <> nil then f.Destroy()
    end
    end.

    Парсер torrent-файлов и сохранялка в INI-файл (пока без сумм фрагментов). Опа-лаба-стайл, писано левой ногой анскильного питуха.

    inkanus-gray, 09 Июля 2013

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