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

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

    +2

    1. 1
    https://codeforwin.org/2018/05/10-cool-bitwise-operator-hacks-and-tricks.html

    10 cool bitwise operator hacks and tricks every programmer must know

    Right shift (>>) operator is equivalent to division by 2
    Want to divide a number by 2 quicky. Here you go, use bitwise right shift operator to divide an integer by 2. Each right shift operation reduces the number (operand) to its half.


    Просто напомню, что Jawa-петушки вручную заменяют деление/умножение на 2 на сдвиг, потому что анскильный компилятор так не умеет.

    OCETuHCKuu_nemyx, 12 Сентября 2021

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

    +1

    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
    interface PostRepository
    {
        public function save(Post $model);
    }
    
    class Post
    {
        protected $id;
        protected $title;
        protected $content;
    
        public function setId(int $id)
        {
            $this->id = $id;
        }
    
        public function getId(): ?int
        {
            return $this->id;
        }
    
        public function setTitle(string $title)
        {
            $this->title = $title;
        }
    
        public function getTitle(): string
        {
            return $this->title ?: '';
        }
    
        public function setContent(string $content)
        {
            $this->content = $content;
        }
    
        public function getContent(): string
        {
            return $this->content ?: '';
        }
    }

    Блядь, до чего ж отвратительный код. Говёность «PHP», тщательно и с извращённой любовью смешанная с ЙАЖАвским бойлерплейтом. Омерзительно.

    https://habr.com/ru/post/505400/
    >>> Как должны выглядеть модели?

    gost, 08 Июня 2020

    Комментарии (298)
  4. Assembler / Говнокод #17584

    +135

    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
    descriptions[result].Append(tblib::Format("%").i(0x12345678, 0xBB));
    
    
    0040E729  push        0BBh 
    0040E72E  push        12345678h                                                                ; ага, запихали параметры для Format::i, заебись; теперь esp=0x0012f1f4
    0040E733  lea         eax,[esp+38h] 
    0040E737  push        eax                                                                      ; esp=0x0012f1f0
    0040E738  lea         ecx,[esp+1Ch] 
    0040E73C  mov         dword ptr [esp+3Ch],offset USER32_NULL_THUNK_DATA+40h (43C1A8h) 
    0040E744  mov         dword ptr [esp+40h],ebp 
    0040E748  mov         dword ptr [esp+44h],1 
    0040E750  call        tblib::HeapCArray<char>::HeapCArray<char><tblib::StringRef> (4161B0h)    ; esp=0x0012f1f4
    0040E755  push        400h                                                                     ; esp=0x0012f1f0
    0040E75A  mov         ecx,offset tbAlloc (18B0C88h) 
    0040E75F  mov         dword ptr [esp+2Ch],ebp 
    0040E763  mov         dword ptr [esp+28h],ebp 
    0040E767  mov         dword ptr [esp+24h],ebp 
    0040E76B  call        tblib::Allocator::Malloc (42C500h)                                       ; esp=0x0012f1f4
    0040E770  mov         dword ptr [esp+20h],eax 
    0040E774  neg         eax  
    0040E776  sbb         eax,eax 
    0040E778  and         eax,400h 
    0040E77D  lea         ecx,[esp+18h] 
    0040E781  mov         dword ptr [esp+24h],eax 
    0040E785  mov         dword ptr [esp+2Ch],0FFFFFFFFh 
    0040E78D  call        tblib::Format::PassToNext (41BC00h)            ; хуй знает почему, но после этой функции esp не меняется, конвенция такая видимо
    0040E792  sub         esp,0Ch                                        ; БЛЯДЬ СУКА НАХУЙ ЁБАНЫЙ ПИЗДЕЦ ТЫ ЧЁ СУКА ТВОРИШЬ ААААААААА!!!!!!!!!!!!!!!!!!!!!!!!
    0040E795  lea         ecx,[esp+24h] 
    0040E799  mov         edi,esp 
    0040E79B  call        tblib::Format::i (42DBA0h)                     ; esp=0x0012f1e8, указывает на мусор, параметры для функции - где-то выше
    ...

    MSVC 2003 релиз

    TarasB, 05 Февраля 2015

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

    +31

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    for(i = 0; i < strlen(line); i++)
    {
        ...
        doSomethingWith(line);
        ...
    }

    Пишет на С++, так как в нем (цитирую) больше возможностей, но std::string он не использует по причине (цитирую) его несовместимости с си компиляторами.
    Автор намекнул мне, что я не умею в многопоточность и что этот код лучше любого другого подходит для исполнения в многопоточной среде на тот случай, если переменная line bump изменится ("англици́зм" цитирую дословно, видимо вставленный для понтов и переводимое как наречие внезапно).

    Имеет ли смысл доказывать, что он не прав, если я с ним не работаю?

    LispGovno, 15 Июня 2013

    Комментарии (296)
  6. Python / Говнокод #27985

    0

    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
    # Python 2.7
    import cgi
    print(cgi.parse_qs('a=bagor;+kakoi'))
    # {'a': ['bagor']}
    
    # Python 3.7.3
    import urllib.parse
    print(urllib.parse.parse_qs('a=bagor;+kakoi'))
    # {'a': ['bagor']}
    
    # Python 3.9.10
    import urllib.parse
    print(urllib.parse.parse_qs('a=bagor;+kakoi'))
    # {'a': ['bagor; kakoi']}

    Что, блядь, это за хуета???
    Переводил программу на Python3 и пол дня потратил в попытках понять почему блядь тесты сломались.
    Какой-то петух завязался, на ';' сепаратор, который обрезается.

    https://docs.python.org/3/library/urllib.parse.html
    Changed in version 3.10: Added separator parameter with the default value of &. Python versions earlier than Python 3.10 allowed using both ; and & as query parameter separator. This has been changed to allow only a single separator key, with & as the default separator.

    И у меня не 3.10, но да похуй.
    Как мне теперь закостылять это говно, не меняя данные?

    3_dar, 03 Февраля 2022

    Комментарии (295)
  7. Си / Говнокод #14266

    +136

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    int file_exist (char *filename)
    {
        char s[200];
        sprintf(s, "test -e %s", filename);
        if (system(s) == 0){
            return 1;
        }else{
            return 0;
        }
    }

    http://stackoverflow.com/questions/3828192/checking-if-a-directory-exists-in-unix-system-call

    rat4, 23 Декабря 2013

    Комментарии (295)
  8. C++ / Говнокод #11308

    −29

    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
    calculateSomething(int n){
    	float* x = new float[n];
    	/*do smth*/
    	
           if ( /*validation*/ ) {
    		delete[] x;
    		return;
    	}
    	
    	float* y = new float[n];
    	/*do smth*/
    	
    	if ( /*validation*/ ) {
    		delete[] x;
    		delete[] y;
    		return;
    	}
    	
    	float* z = new float[n];
    	/*next step*/
    	
    	if ( /*smth goes wrong*/ ) {
    		delete[] x;
    		delete[] y;
    		delete[] z;
    		return;
    	}
    
            /*more calculations with validation*/
    
           delete[] x;
           delete[] y;
           ...
           /*more delete[]*/
           
           return;
    }

    Принципиальная схема говногода, найденного на просторах сети.

    interested, 26 Июня 2012

    Комментарии (294)
  9. C++ / Говнокод #3586

    +160

    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
    CBufferHandlerOfPrmtv::CBufferHandlerOfPrmtv
    {
        _ffInt = 0;
        _ffInt = ~_ffInt;
        _ffChar = 0;
        _ffChar = ~_ffChar;
    }
    
    bool CBufferHandlerOfPrmtv::IsFF(unsigned int toCheck, unsigned int toCheckSz)
    {
         if(toCheckSz > sizeof(unsigned int)){
             assert(!testPrmtvs);
             return true;
         }
     
         if(!toCheckSz){
             assert(!testPrmtvs);
             return true;
         }
     
         return (memcmp(&toCheck, &_ffInt, toCheckSz) == 0);
    }

    разбирал щас говешки и вот такое увидел...
    НАХЕРА ?!?!!?
    PS: подскажу. метода проверяет число на 0xff.

    kubrinsky, 28 Июня 2010

    Комментарии (294)
  10. PHP / Говнокод #11566

    +66

    1. 1
    2. 2
    3. 3
    4. 4
    $pr = array();
    foreach ($params as $k => $v)
        $pr[] .= urlencode($k).'='.urldecode($v);
    $data = join('&', $pr);

    http_build_query() для слабаков! Только велосипеды, только выстрел себе в ногу.
    /netcat/admin/nc_adminnotice.class.php

    telnet, 10 Августа 2012

    Комментарии (293)
  11. PHP / Говнокод #4757

    +148

    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
    <?
    	$optSelect['10'] = ($_REQUEST['sort_count']=='10') ? 'selected' : '';
    	$optSelect['20'] = ($_REQUEST['sort_count']=='20') ? 'selected' : '';
    	$optSelect['50'] = ($_REQUEST['sort_count']=='50') ? 'selected' : '';
    	$optSelect['all'] = ($_REQUEST['sort_count']=='all') ? 'selected' : '';
    	
    	$remParams = array('sort_count');
            //функция GetCurPageParam в битрикс возвращает путь к текущей странице с добавлением/удалением параметров (автор поста) 
    	$optValueURI['10'] = $APPLICATION->GetCurPageParam('sort_count=10', $remParams);
    	$optValueURI['20'] = $APPLICATION->GetCurPageParam('sort_count=20', $remParams);
    	$optValueURI['50'] = $APPLICATION->GetCurPageParam('sort_count=50', $remParams);
    	$optValueURI['all'] = $APPLICATION->GetCurPageParam('sort_count=all', $remParams);
    			
    	$optValue['10'] = $siteURL . $optValueURI['10'];
    	$optValue['20'] = $siteURL . $optValueURI['20'];
    	$optValue['50'] = $siteURL . $optValueURI['50'];
    	$optValue['all'] = $siteURL . $optValueURI['all'];
    ?>
    <select onChange="location=this.value">
    	<option <?=$optSelect['10']?> value="<?=$optValue['10']?>">10</option>
    	<option <?=$optSelect['20']?> value="<?=$optValue['20']?>">20</option>
    	<option <?=$optSelect['50']?> value="<?=$optValue['50']?>">50</option>
    	<option <?=$optSelect['all']?> value="<?=$optValue['all']?>">Все</option>
    </select>

    Реализация Селекта количества выводимых элементов на странице. Сайт делал топовый партнёр 1c-Bitrix.
    Я думаю, что разумнее было бы сделать так:
    $arPages = array(10, 20, 50, 'all');
    foreach ($arPages as $page) {?>
    <option <?if($page == $_REQUEST['sort_count']){?>selected<?}?>>$page</option>
    <?}?>
    Ну и для сабмита можно какую нибудь нормальную функцию в JS написать.

    Cool-Di, 26 Ноября 2010

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