1. Список говнокодов пользователя 3.14159265

    Всего: 132

  2. C# / Говнокод #12784

    +166

    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
    case OP_PSUM_ABS_DIFF:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PSADBW, ins->sreg1, ins->sreg2);
    break;
    
    case OP_UNPACK_LOWB:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKLBW, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_LOWW:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKLWD, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_LOWD:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKLDQ, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_LOWQ:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKLQDQ, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_LOWPS:
    x86_sse_alu_ps_reg_reg (code, X86_SSE_UNPCKL, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_LOWPD:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_UNPCKL, ins->sreg1, ins->sreg2);
    break;
    
    case OP_UNPACK_HIGHB:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKHBW, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_HIGHW:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKHWD, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_HIGHD:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKHDQ, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_HIGHQ:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PUNPCKHQDQ, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_HIGHPS:
    x86_sse_alu_ps_reg_reg (code, X86_SSE_UNPCKH, ins->sreg1, ins->sreg2);
    break;
    case OP_UNPACK_HIGHPD:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_UNPCKH, ins->sreg1, ins->sreg2);
    break;
    
    case OP_PACKW:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PACKSSWB, ins->sreg1, ins->sreg2);
    break;
    case OP_PACKD:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PACKSSDW, ins->sreg1, ins->sreg2);
    break;
    case OP_PACKW_UN:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PACKUSWB, ins->sreg1, ins->sreg2);
    break;
    case OP_PACKD_UN:
    x86_sse_alu_sse41_reg_reg (code, X86_SSE_PACKUSDW, ins->sreg1, ins->sreg2);
    break;
    
    case OP_PADDB_SAT_UN:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PADDUSB, ins->sreg1, ins->sreg2);
    break;
    case OP_PSUBB_SAT_UN:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PSUBUSB, ins->sreg1, ins->sreg2);
    break;
    case OP_PADDW_SAT_UN:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PADDUSW, ins->sreg1, ins->sreg2);
    break;
    case OP_PSUBW_SAT_UN:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PSUBUSW, ins->sreg1, ins->sreg2);
    break;
    
    case OP_PADDB_SAT:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PADDSB, ins->sreg1, ins->sreg2);
    break;
    case OP_PSUBB_SAT:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PSUBSB, ins->sreg1, ins->sreg2);
    break;
    case OP_PADDW_SAT:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PADDSW, ins->sreg1, ins->sreg2);
    break;
    case OP_PSUBW_SAT:
    x86_sse_alu_pd_reg_reg (code, X86_SSE_PSUBSW, ins->sreg1, ins->sreg2);
    break;

    https://github.com/mono/mono/blob/master/mono/mini/mini-x86.c#L2481

    3.14159265, 22 Марта 2013

    Комментарии (18)
  3. JavaScript / Говнокод #12672

    +179

    1. 1
    $.datepicker.formatDate('yy-mm-dd', new Date(2007, 1 - 1, 26));

    Форматирование даты в жс. Без jQuery ясное дело не обойтись.
    If you are already using jQuery UI in your project, you can use the built-in datepicker method for formatting your date object:
    http://stackoverflow.com/a/7022296
    Раз уж неделя стековерфловочки...

    3.14159265, 01 Марта 2013

    Комментарии (18)
  4. JavaScript / Говнокод #12535

    +183

    1. 1
    while (c.charAt(0)==' ') c = c.substring(1,c.length);

    Особый ltrim

    3.14159265, 04 Февраля 2013

    Комментарии (44)
  5. Java / Говнокод #12506

    +97

    1. 1
    2. 2
    3. 3
    Integer [] jh = new Integer [1];
    Integer j0 = new Integer(17);
    jh[0]= j0;

    Заполняем массив.

    3.14159265, 30 Января 2013

    Комментарии (44)
  6. PHP / Говнокод #12271

    +75

    1. 1
    2. 2
    echo( TRUE ? "1" : TRUE ? "2":"3");
    //2

    http://ideone.com/UBg3T2
    В ответ на это:
    http://govnokod.ru/12268#comment163978

    3.14159265, 11 Декабря 2012

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

    +119

    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
    public static Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>> Create<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" t8="">(T1 item1, T2 item2, T3 item3, T4 item4, T5 item5, T6 item6, T7 item7, T8 item8) {
                return new Tuple<t1, t2,="" t3,="" t4,="" t5,="" t6,="" t7,="" tuple=""><t8>>(item1, item2, item3, item4, item5, item6, item7, new Tuple<t8>(item8));
    
       Int32 IStructuralEquatable.GetHashCode(IEqualityComparer comparer) {
                // We want to have a limited hash in this case.  We'll use the last 8 elements of the tuple
                ITuple t = (ITuple) m_Rest;
                if(t.Size >= 8) { return t.GetHashCode(comparer); }
     
                // In this case, the rest memeber has less than 8 elements so we need to combine some our elements with the elements in rest
                int k = 8 - t.Size;
                switch(k) {
                    case 1:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 2:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 3:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 4:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 5:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 6:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                    case 7:
                    return Tuple.CombineHashCodes(comparer.GetHashCode(m_Item1), comparer.GetHashCode(m_Item2), comparer.GetHashCode(m_Item3), comparer.GetHashCode(m_Item4), comparer.GetHashCode(m_Item5), comparer.GetHashCode(m_Item6), comparer.GetHashCode(m_Item7), t.GetHashCode(comparer));
                }
                Contract.Assert(false, "Missed all cases for computing Tuple hash code");
                return -1;
            }
     
            Int32 ITuple.GetHashCode(IEqualityComparer comparer) {
                return ((IStructuralEquatable) this).GetHashCode(comparer);
            }
            public override string ToString() {
                StringBuilder sb = new StringBuilder();
                sb.Append("(");
                return ((ITuple)this).ToString(sb);
            }
     
            string ITuple.ToString(StringBuilder sb) {
                sb.Append(m_Item1);
                sb.Append(", ");
                sb.Append(m_Item2);
                sb.Append(", ");
                sb.Append(m_Item3);
                sb.Append(", ");
                sb.Append(m_Item4);
                sb.Append(", ");
                sb.Append(m_Item5);
                sb.Append(", ");
                sb.Append(m_Item6);
                sb.Append(", ");
                sb.Append(m_Item7);
                sb.Append(", ");
                return ((ITuple)m_Rest).ToString(sb);
            }

    Давно заприметил в C# кортежи. За них отвечаёт чудесный класс System.Tuple
    http://msdn.microsoft.com/en-us/library/system.tuple.aspx
    Вот стало интересно - как они там это дело реализовали, ведь постоянно вводит новые плюшки в язык.
    Посмотрел и ужаснулся - решили "в лоб" и кортежи обошлись в 1000 строк.
    http://reflector.webtropy.com/default.aspx/[email protected]/[email protected]/untmp/DEVDIV_TFS/Dev10/Releases/RTMRel/ndp/clr/src/BCL/System/[email protected]/1305376/[email protected]

    Хотел запостить в #12129. Но он утонул.

    3.14159265, 19 Ноября 2012

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

    +98

    1. 1
    2. 2
    3. 3
    public String toString() {
            return new String(body.toString());
        }

    Но зачем?

    3.14159265, 14 Ноября 2012

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

    +93

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    Float nan=Float.NaN;
    new Float(10).compareTo(nan);
    //-1
    nan.compareTo(nan);
    //0
    new Float(Float.POSITIVE_INFINITY).compareTo(nan);
    //-1. POSITIVE_INFINITY<NAN. LoL

    http://ideone.com/9WIo16
    Тут некоторые товарищи в соседнем треде предлагали сравнивать объекты через compareTo()==0, если возможно.
    Ну и беречься от equals как от огня, если есть Comparable.
    А вот к чему это приводит.

    3.14159265, 13 Ноября 2012

    Комментарии (54)
  10. Java / Говнокод #12059

    +94

    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
    String s="a, b, c, d,,,";
    		
    		String[] spl=s.split ( "," );
    		o.println(spl.length);
    		for (String s1: spl)
    			o.print(s1+";");
    //4
    //a; b; c; d;
    		StringTokenizer st=new StringTokenizer(s);
    		o.println("\n"+st.countTokens ());
    		while (st.hasMoreElements ()){
    			o.print(
    				st.nextToken ()+";"
    			);
    		}
    //4
    //a,;b,;c,;d,,,;
    		st=new StringTokenizer(s,",");
    		o.println("\n"+st.countTokens ());
    		while (st.hasMoreElements ()){
    			o.print(
    				st.nextToken ()+";"
    			);
    		}
    //4
    //a; b; c; d;

    http://ideone.com/zh0paB
    Очередной сюжет из серии JavaGovno.

    3.14159265, 05 Ноября 2012

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

    +95

    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
    import java.io.PrintStream;
    import java.util.concurrent.atomic.AtomicBoolean;
    
    public final class ShredingerCat
    extends AtomicBoolean
    {
    	static final PrintStream o=System.out;
    	static final long initMsec=System.currentTimeMillis ();
    	
    	public static final ShredingerCat	INSTANCE = new ShredingerCat();
    	private ShredingerCat ()
    	{
    		set ( false );
    		o.println ( "Construct SingleBool" );
    	}
    	public final
    	void criticalSection(){
    		synchronized (this) {
    			pr ( "Enter critical section" );
    			ShredingerCat.sl ( 5 );
    			
    			pr ( "Cat is " +(
    					get() 
    					? "dead"
    					: "alive"
    				)
    			);
    			sl(100);
    			pr ( "Exit critical section" );
    		}
    		
    	}
    	// ===================== HELPER STUFF ========================
    
    	static void pr(String s){
    		o.println ( s+(
    			System.currentTimeMillis ()- initMsec
    		));
    	}
    	static void sl(long l){
    		try {
    			Thread.sleep ( l );
    		}catch (InterruptedException e) {
    		}
    	}
    	
    
    
    }

    Обсуждение #11989 безопасных публикаций, конструкторов и синглтонов вдохновило меня на создание этого примера.
    Суть: есть кот-синглтон. Он как вы видите защищен со всех сторон finalами, приправленое к тому же Atomicом.
    Задание на серебряную медаль - сделать так чтобы 2 последовательных вызова toString() вывели Dead и Alive. Объект не должен меняться.
    Задание на золотую медаль: необходимо получить примерно такой вывод:
    Enter critical section0
    Enter critical section0
    Cat is alive16
    Cat is dead16
    Exit critical section110
    Exit critical section110

    За использование рефлексии и прочих unsafe - немедленная дисквалификация и бан модератором.
    Решение будет чуть позже. Отдельным постом.

    3.14159265, 26 Октября 2012

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