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

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

    +132

    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
    Было:
    
    typedef struct {
        int range;      /*enabled flag*/
    
        union {
            struct {
                unsigned str_length;
            };
            struct {
                long i_min;
                long i_max;
            };
            struct {
                double d_min;
                double d_max;
            };
            /* ... */
        };
    } wlp_range_t;
    
    #define WLP_NO_RANGE()              { .range = FALSE }
    #define WLP_STRING_LENGTH(length)   { .range = TRUE, .str_length = length}
    #define WLP_INT_RANGE(min, max)     { .range = TRUE, .i_min = min, .i_max = max }
    #define WLP_FLOAT_RANGE(min, max)   { .range = TRUE, .d_min = min, .d_max = max }
    
    Стало:
    
    typedef struct {
        int range;      /*enabled flag*/
    
        struct {
            struct {
                unsigned str_length;
            };
            struct {
                long i_min;
                long i_max;
            };
            struct {
                double d_min;
                double d_max;
            };
            /* ... */
    
        };
    } wlp_range_t;
    
    #define WLP_NO_RANGE()              { B_FALSE, { {0} } }
    #define WLP_STRING_LENGTH(length)   { B_TRUE, { {length} } }
    #define WLP_INT_RANGE(min, max)     { B_TRUE, { {0}, {min, max} } }
    #define WLP_FLOAT_RANGE(min, max)   { B_TRUE, { {0}, {0, 0}, {min, max} } }
    #define WLP_SIZE_RANGE(min, max)    { B_TRUE, { {0}, {0, 0}, {0.0, 0.0}, {min, max} } }
    
    /* ... */

    Такая вот бяка получилась при портировании проекта с GCC на Visual C. А все потому, что:
    1. ISO C++03 8.5.1[dcl.init.aggr]/15:
    | When a union is initialized with a brace-enclosed initializer,
    | the braces shall only contain an initializer for the first member of the union.
    2. Visual C не поддерживает designated initializers

    myaut, 24 Декабря 2012

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

    +54

    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
    function bezpezdu_num($num)
    {
    	if(isset($num) && !empty($num) && is_numeric($num))
    		return true;
    	else
    		return false;
    }
    
    function pizdec($text)
    {
    	$showtext = htmlspecialchars($text);
    	exit($showtext);
    }

    $app->run_epta();

    kindofbear, 21 Декабря 2012

    Комментарии (12)
  4. PHP / Говнокод #12285

    +61

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    if(!$del){
         throw new Exception("При добавлении .......... возникла ошибка, обратитесь к администрации");
         return false;
        }
        return true;

    AndryG, 13 Декабря 2012

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

    +102

    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
    /// <summary>
    /// Проверка пароля *
    /// </summary>
    private string CheckPassword(String _password)
    {
        int kol = 0;
        const int LEN = 32;
        if (_password.Length == LEN)
            return _password;
        else
        {
            StringBuilder _pass = new StringBuilder(_password, LEN);
            if (_password.Length > LEN)
            {
                kol = _password.Length - LEN;
                return (_password.Substring(0, _password.Length - kol));
            }
            else
            {
                kol = LEN - _password.Length;
                int i = 0;
                while (i != kol)
                {
                    _pass.Append(" ");
                    i++;
                }
            }
            return _pass.ToString();
        }
    }

    Crazzy, 12 Декабря 2012

    Комментарии (12)
  6. SQL / Говнокод #12267

    −161

    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
    CREATE TABLE calendar
    (
      caldate date NOT NULL,
      "month" integer NOT NULL,
      month_txt character varying(10) NOT NULL,
      "year" integer NOT NULL,
      CONSTRAINT calendar_pkey PRIMARY KEY (caldate)
    )
    CREATE TABLE holiday
    (
      id numeric(10,0) NOT NULL DEFAULT nextval('holiday_seq'::regclass),
      caldate date NOT NULL,
      region integer,
      CONSTRAINT holidaypk PRIMARY KEY (id),
      CONSTRAINT fk_hday_caldate FOREIGN KEY (caldate)
          REFERENCES calendar (caldate) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION,
      CONSTRAINT holidayfk FOREIGN KEY (region)
          REFERENCES region (id) MATCH SIMPLE
          ON UPDATE NO ACTION ON DELETE NO ACTION
    )

    Вот такая вот структура база в проекте в котором я работаю.
    Причём помимо таблицы calendar и дублирование там информации, обратите внимание на таблицу holiday в эту таблицу записи ручками вносятся о выходных днях или о праздниках, как впрочем и в таблицу calendar

    smpl, 10 Декабря 2012

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

    +169

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    9. 9
    if(navigator.appName == "Microsoft Internet Explorer") {
    	for(var i=0;i<$('.product_documents').length;i++)  if( ( (firstLaunch_onChangeDocs) && ($('.product_documents')[i].selectedIndex==0)) || (!firstLaunch_onChangeDocs) )
    	{
    	  document.getElementById($('.product_documents')[i].id).innerHTML = '';
    	  document.getElementById($('.product_documents')[i].id).outerHTML = document.getElementById($('.product_documents')[i].id).outerHTML.replace("</SELECT>", jsInternalDocuments + '</select>')
    	}
      } else
    	for(var i=0;i<$('.product_documents').length;i++)  if( ( (firstLaunch_onChangeDocs) && ($('.product_documents')[i].selectedIndex==0)) || (!firstLaunch_onChangeDocs) )
    	  $('.product_documents')[i].innerHTML = jsInternalDocuments;

    Очень альтернативная техника использования jquery.

    clauclauclau, 06 Декабря 2012

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

    +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
    39. 39
    <?php
    
    function createOperator($a = [])
    {
    	$IOperator = [
    		'index' => 1,
    		'iteration' => "",
    		'f' => 'print_r($a);if(++$a["index"] < $a["count"])
    				return eval($a["iteration"]);
    			else
    				return $a["result"];',
    		'run' => 'return eval',
    	];
    	if(!empty($a))
    	{
    		$IOperator['run'] = '$a = $'.$a['title'] . '; ' . $IOperator['run'] . '($a["iteration"]);';
    		$IOperator['iteration'] = '$a = array_merge($a, ' . $a['operation'] . ');' . "\n" . $IOperator['f'];
    		$IOperator = array_merge($a, $IOperator);
    	}
    	return $IOperator;
    }
    
    $fib = createOperator([
    	'first' => 1,
    	'result' => 1,
    	'count' => 5,
    	'title' => 'fib',
    	'operation' => '["first" => $a["result"], "result" => $a["first"]+$a["result"]]'
    ]);
    echo eval($fib['run']);
    
    
    $fac = createOperator([
    	'result' => 1,
    	'count' => 5,
    	'title' => 'fac',
    	'operation' => '["result" => $a["result"]*$a["index"]]',
    ]);
    echo eval($fac['run']);

    Меня потянуло сделать какую-то фигню. Встречайте, рефлексивное программирование.

    mkusher, 02 Декабря 2012

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

    +127

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    7. 7
    8. 8
    val arr = new Array[Int](3)
    val arr2 = arr
    
    arr(0) = 100
    arr(1) = 200
    arr(2) = 300
    
    //arr2 == Array(100, 200, 300)

    Не говнокод конечно, хотя как посмотреть.

    Это нормально, учитывая, что val предполагает неизменяемость значения, или в данном случае считается, что только присвоить новое значение нельзя, а изменять внутреннюю структуру массива можно как захочешь?

    Ведь наже в C++ нельзя изменить значения const std::vector.

    Fai, 01 Декабря 2012

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

    −122

    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
    Пока Выборка1...
    ...Выборка2...
    ...
    Выборка7 = ПрименяемостьНаПрибор_ПоискВхождений(Выборка6.НомерЗаписиРСДСЕГл, НаДату).Выбрать();
    Пока Выборка7.Следующий() Цикл
    	ПрименяемостьПоВхождению = ПрименяемостьПоВхождению * Выборка7.Применяемость;
    	
    	
    	Если Выборка7.НомерЗаписиРСДСЕГл = 0 Тогда
    		// Достигнут прибор
    		Применяемость = Применяемость + ПрименяемостьПоВхождению;
    	Иначе
    		Выборка8 = ПрименяемостьНаПрибор_ПоискВхождений(Выборка7.НомерЗаписиРСДСЕГл, НаДату).Выбрать();
    		Пока Выборка8.Следующий() Цикл
    			ПрименяемостьПоВхождению = ПрименяемостьПоВхождению * Выборка8.Применяемость;
    			
    			Если Выборка8.НомерЗаписиРСДСЕГл = 0 Тогда
    				// Достигнут прибор
    				Применяемость = Применяемость + ПрименяемостьПоВхождению;
    				
    			Иначе
    				Сообщить("Превышение значения выборки... Странная ситуация, вообще не должна возникать!!!");																			
    				Сообщить("Срочно обратитесь в Отдел ВТ. Постарайтесь записать ситуацию в которой возникла эта ошибка... !!!");																			
    			КонецЕсли;
    		КонецЦикла;
    	КонецЕсли;
    КонецЦикла;
    ...
    ...

    По мотивам предыдущих постов. Все из одной конфигурации.

    Ykov89, 29 Ноября 2012

    Комментарии (12)
  11. SQL / Говнокод #12200

    −117

    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
    declare
      v_bonus_account NUMBER;
      v_MSISDN VARCHAR2(32);
      l_app NUMBER;
      v_Result NUMBER;
      v_Message VARCHAR2(2000);
      var_MSISDN VARCHAR2(32);
      v_Event VARCHAR2(32);
      v_Amount NUMBER;
      o_err VARCHAR2(2000);
    BEGIN
      /* Activate service */ 
      v_Result := wpt.bp_services.add_service
      ( i_app => v_MSISDN,
      i_srv => 400714,
      o_err => v_Message,
      to_date('30/12/2012','DD/MM/YYYY')
      );
    END;

    Локализовал код, вызывающий функцию биллинга у арабов, предложенный ими же. И который не компилится.
    В ответ получаю кучу дописок с вызовами других функций, которые ко всему этому не имеют никакого отношения.
    Как убедить пидарасов в том, что ошибки компиляции и ошибки времени исполнения - это как бы совсем разные вещи?
    А то третья неделя уже идёт...

    SadKo, 26 Ноября 2012

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