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

    В номинации:
    За время:
  2. Куча / Говнокод #13344

    +124

    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
    #pragma syntax(C++03) // было
    int i,j,*pi,&ri=...,ai[10],aai[10][20];
    const int ci = 100;
    T myFunction (TX x1,TX x2,TY y1,TY ywd=...);
    
    #pragma syntax(C++SD) // стало
    var(int) i,j;
    var(Ptr[int]) pi;
    var(Ref[int]) ri = ...;
    var(Array[int,10]) ai;
    var(Array[Array[i,20],10]) aai;
    var(Immutable[int]) ci = 100;
    // отличать от:
    const(int) cci = 100; // и cci с рантаймовой точки зрения будет чистой константой, а не "типа неизменяемой переменной"
    
    function(T) myFunction (var(TX) x1,x2; var(TY) y1,ywd=...);
    // ^смысл в том, чтобы список параметров имел ту же форму, что декларация переменных и членов структур
    
    // возможны и константные функции
    function const(int) constSum (const(int) x1,x2) { return x1+x2; }
    // теперь constSum (1,2) будет всё равно что 3
    
    // это теперь заменяет тайпдеф
    const(typename) Int32 = int;
    
    #pragma syntax(C++03) // было
    class C
    {
     int mi;
     static int si;
    
    private:
     float mf;
     void privateMethod1 () {...}
     void privateMethod2 ();
    
    protected:
     void staticMethod1 () {...}
     void staticMethod2 ();
    
    public:
     virtual void virtualMethod ();
    };
    
    int C::si;
    void C::privateMethod2 () {...}
    void C::staticMethod2 () {...}
    void C::virtualMethod () {...}
    
    #pragma syntax(C++SD) // стало
    class C
    {
     // эта секция называется "имплементацией класса"
     var(int) mi;
     // статические поля в имплементации класса не объявляются
    
    private:
     var(float) mf;
     function() privateMethod1 () {...}
     //void privateMethod2 (); // объявлять методы, который не имплементируются тут же, не обязательно
    
    protected:
     function() staticMethod1 (): Static
     {...}
     // Static - пометка для функции, декларируемой/имплементируемой в имплементации класса,
     // что это не метод, а просто функция
    
    public:
     virtual function() virtualMethod ();
     // в имплементации класса по-настоящему нужна декларация только переменных-полей,
     // виртуальных методов и деструктора, если он пишется юзером
    
     // также:
     var(int) inlinelyInitialized = 100;
     // да, инициализаторы тоже допускаются
    };
    
    using (C) var(int) si; // using(C) - пометка, что декларация касается неймспейса C
    using (C) private: function() privateMethod2 (): Method {...}
    // ^если метод объявляется/имплементируется вне имплементации класса, его
    // нужно пометить как Method, чтобы отличить от обычной функции
    
    // using можно юзать и целым блоком...
    using (C)
    {
    protected:
     // для функции-неметода вне имплементации класса уточнение Static не требуется
     function() staticMethod2 {...}
    public:
     function() virtualMethod (): Method {...}
    }
    
    // глобальный скоп - тоже типа класс, для его явного указания, если вдруг понадобится,
    // используется конструкция using (.)

    Тот момент, когда понимаешь: "Какая радость, что в создатели стандарта крестов не берут кого попало."
    http://www.gamedev.ru/flame/forum/?id=178107

    LispGovno, 09 Июля 2013

    Комментарии (9)
  3. Куча / Говнокод #13309

    +124

    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
    [% FOREACH i IN DYN_DATE_OPT %]
    <td class="number [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_COMMIFY( distr_row.lic.$i ) || 0 %]</td>
    [% UNLESS DYN_PARAMS.display_unprocent %]
    <td class="number right_b [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_PERCENT( distr_row.lic.$i, distr_row.commonper.$i ) %]</td>
    [% END %]
    <td class="number left_b [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_COMMIFY( distr_row.gsn_lic.$i ) || 0 %]</td>
    [% UNLESS DYN_PARAMS.display_unprocent %]
    <td class="number right_b [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_PERCENT( distr_row.gsn_lic.$i, distr_row.gsnper.$i ) %]</td>
    [% END %]
    <td class="number left_b [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_COMMIFY( distr_row.lic_ov.$i, 'red' ) || 0 %]</td>
    [% UNLESS DYN_PARAMS.display_unprocent %]
    <td class="number [% IF loop.count mod 2 != 0 %]odd[% END %] distri_td" [% distri_style %]>[% DYN_FILTER_PERCENT( distr_row.lic_ov.$i, distr_row.gsnper.$i ) %]</td>
    [% END %]
    [% END %]

    Template::Toolkit

    236 вот такого вот шаблона. Во всём сервисе их пачка, и все аналогичны.

    kainwinterheart, 05 Июля 2013

    Комментарии (10)
  4. C# / Говнокод #13304

    +124

    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
    // System.Web.Security.FormsAuthentication
    /// <summary>Returns the redirect URL for the original request that caused the redirect to the login page.</summary>
    /// <returns>A string that contains the redirect URL.</returns>
    /// <param name="userName">The name of the authenticated user. </param>
    /// <param name="createPersistentCookie">This parameter is ignored.</param>
    public static string GetRedirectUrl(string userName, bool createPersistentCookie)
    {
    	if (userName == null)
    	{
    		return null;
    	}
    	return FormsAuthentication.GetReturnUrl(true);
    }

    http://msdn.microsoft.com/en-us/library/system.web.security.formsauthentication. getredirecturl.aspx
    Разработчики ASP.NET'а опять доставляют... И не лень было столько параметров делать, а потом ещё и описывать...

    TauSigma, 04 Июля 2013

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

    +124

    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
    var
      Form1: TForm1;
      tlst:tthreadlist;
    
    implementation
    
    {$R *.dfm}
    
    function getCount : integer;
    begin
        Result := tlst.LockList.Count;
        tlst.UnlockList;
    end;
    
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    tlst:=tthreadlist.Create;
    end;
    
    { tmythread }
    
    constructor tmythread.create(filename: string);
    begin
    self.FreeOnTerminate:=true;
    self.filename:=filename;
    inherited create(true);
    self.Priority:=tphigher;
    self.Resume;
    tlst.LockList.Add(self);
    tlst.UnlockList;
    end;
    
    destructor tmythread.destroy;
    begin
    tlst.Remove(self);
    tlst.UnlockList;
    end;
    
    procedure tmythread.execute;
    begin
    while not terminated do
    sleep(100);    // в качестве примера, чем-то нагружаем цикл.
    end;
    
    procedure TForm1.Button2Click(Sender: TObject);
    var
      i:integer;
      n:string;
      temp:tmythread;
      s:string;
    begin
      for i:=0 to getcount-1 do
      begin
        temp:=tlst.LockList.Items[i];   // вот это место. Как Вам кажется, это правильно, или не?
        if assigned(temp) then
        n:=temp.filename;
        if n='ololo' then   // это просто пример, не смеемся) АХАХАХАХ )
        begin
          showmessage('Сканирование этого файла уже выполняется') ;
          exit;
        end;
      end;
      tmythread.create('ololo');
    end;
    
    end.

    Стоит задача сканировать файлы в разных потоках. Как Вам кажется, это адекватное решение?

    Stertor, 02 Июля 2013

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

    +124

    1. 1
    2. 2
    3. 3
    4. 4
    public void LogInDB(Exception ex)
    {
          // TODO: реализовать
    }

    А мы то голову ломаем, чего в старых методах на сервере ошибки не логируются!

    NeoN, 11 Июня 2013

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

    +124

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    private void HideActiveButtons()
    {
        try
        {
    
        }
        catch (Exception)
        {
            throw;
        }
    }

    Откопано в форме Windows Forms в страшном legacy-коде.

    someone, 09 Июня 2013

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

    +124

    1. 1
    https://docs.google.com/forms/d/1mhNCSYPqeLT7pXJEV_BpRkV1sdKJsPdJZcagSafOLVc/viewform

    Опрос на тему того, кто и как сможет принять участие в разработке аналога говнокода.

    scriptin, 10 Марта 2013

    Комментарии (101)
  9. Куча / Говнокод #12622

    +124

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    import Control.Applicative
    import Data.List
    isSimple n | n > 0 = not $ or $ map (\n1 -> n `rem` n1 == 0) [2..n-1]
    isNaturalAndSimple n = n > 0 && isSimple n
    generateSource b e = map (flip replicate $ [b..e]) [2..]
    splitAll = groupBy $ \_ _->False
    splitedNumberRangesToNumberSequence l = foldl (liftA2 (++)) (head l) (tail l)
    toNumberSequences = map $ splitedNumberRangesToNumberSequence . map splitAll
    onlySimple = map $ filter $ isNaturalAndSimple . sum
    main = print $ take 4 $ onlySimple $ toNumberSequences $ generateSource 2 3

    HaskellGovno, 20 Февраля 2013

    Комментарии (14)
  10. Куча / Говнокод #12620

    +124

    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
    import Control.Monad
    import Control.Arrow
    import Data.List
    
    solve' :: [String] -> [[String]]
    solve' = nub . filter (
                and . uncurry (
                    zipWith (
                        (.head) . (==) . last
                    )
                ) . (id &&& tail)
             ) . uncurry ($) . (
                last . (((
                    map (
                        last . fst &&& uncurry (++) . (init . fst &&& snd)
                    ) . tail . uncurry (zipWith (,)) . (inits &&& tails)
                ) >=> (uncurry map) . 
                    ((:) *** solve')
                ):
                ) . (uncurry takeWhile) . (
                        const . null &&& const [const [[]]]
                    ) &&& id
             )
    
    main = print $ solve' ["123","321","123"]

    HaskellGovno, 20 Февраля 2013

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

    +124

    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
    buildTree sentence graph =
        (M.lookup (0, length sentence - 1, DirLeft) finalGraph, finalGraph)
        where finalGraph = execState runEisner (M.fromList elementaryPathes)
              elementaryPathes =
                 map (\(i, word) -> ((i, i, DirLeft), elementaryPath DirLeft word)) indexed ++
                 map (\(i, word) -> ((i, i, DirRight), elementaryPath DirRight word)) indexed
              indexed = zip [0..] sentence
    
              runEisner = do
                  let len = length sentence
                  forM_ [1 .. len - 1] $ \l -> do
                      forM [0 .. len - 1 - l] $ \i -> do
                          matrix <- get
                          let j = i + l
                          let w1 = sentence !! i
                          let w2 = sentence !! j
    
                          let buildConcat dir = (catMaybes $ (zipWith (\p1 p2 -> join $ (liftM2 concatenatePath) p1 p2)
                                                [M.lookup (i, k, dir) matrix | k <- [i + 1 .. j - 1]]
                                                [M.lookup (k, j, dir) matrix | k <- [i + 1 .. j - 1]])) :: [Path]
    
                          let buildJoin dir key = fromMaybe [] $ M.lookup key graph >>= \link ->
                                                  return (catMaybes (zipWith (\p1 p2 -> join $ (liftM2 (\f c -> joinPath f c link)) p1 p2)
                                                  [M.lookup (i, k, dir) matrix | k <- [i .. j - 1]]
                                                  [M.lookup (k, j, rev dir) matrix | k <- [i + 1 .. j]]))
    
                          let posR = (buildConcat DirRight ++ buildJoin DirRight (w1, w2)) :: [Path]
    
                          let newMatrix = if (not . null) posR
                                              then M.insert (i, j, DirRight) (minimumBy compWeight posR) matrix
                                              else matrix
    
                          let posL = buildConcat DirLeft ++ buildJoin DirRight (w2, w1)
    
                          let newMatrix' = if (not . null) posL
                                               then M.insert (i, j, DirLeft) (minimumBy compWeight posL) matrix
                                               else newMatrix
    
                          put newMatrix'

    Кусок из диплома по NLP. Yuuri неделю как познал монаду State и сделал двумерный императивный цыкл.

    Yuuri, 25 Января 2013

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