Пользователь
30,2
рейтинг
28 августа 2013 в 18:30

Разработка → Самые смешные комментарии в исходном коде перевод

На StackOverflow был отличный пост точно на эту тему, но какой-то сверхусердный модератор, который должен остаться неназванным, удалил его (судя по всему, сейчас восстановлено — прим. пер.).

К счастью, у меня сохранилась возможность просмотреть все удаленные комментарии. Вот некоторые из моих любимых.

// 
// Дорогой мейнтейнер:
// 
// Когда ты закончишь «оптимизировать» эту подпрограмму
// и поймешь, насколько большой ошибкой было делать это,
// пожалуйста, увеличь счетчик внизу как предупреждение
// для следующего парня:
// 
// total_hours_wasted_here = 42
//


// Когда я начинал это писать, только Бог и я понимали, что я делаю
// Сейчас остался только Бог

(Изначально цитату приписывают Карлу Вейерштрассу, относительно его математической статьи).

// иногда мне кажется, что компилятор игнорирует все мои комментарии

// Я посвящаю весь свой код, всю работу своей жене Дарлин, которой
// придётся содержать меня, наших троих детей и собаку, когда
// это пойдет в паблик.

// пьян, исправить позже

// Магия. Не трогать.

#define TRUE FALSE
// Удачного дебаггинга, молокососы

long john; // silver

(Так банально, что даже смешно).
Долговязый Джон Сильвер (Long John Silver) — персонаж романа Роберта Льюиса Стивенсона «Остров сокровищ» — прим. пер.

long long ago; /* в далёкой-далёкой Галактике */

(Это даже компилируется в C99/C++0x).

/**
 * Всегда возвращает true.
 */
public boolean isAvailable() {
    return false;
}

(Это доказывает, почему код *всегда* лучше, чем комментарии)

<!-- Here be dragons  -->
Перевод: Alex Regueiro
Анатолий Ализар @alizar
карма
749,5
рейтинг 30,2
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

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

  • +29
    // total_hours_wasted_here = 42
    

    Судя по комменту на Хабре за 3 года успели ещё 5 часов добавить в каунтер.
  • +33
    // Я посвящаю весь свой код, всю работу своей жене Дарлин, которой
    // придётся содержать меня, наших троих детей и собаку, когда
    // это пойдет в паблик.

    Просто Шедевр!!!
  • +17
    Видел подобный код в одном из проектов:

    int optimisticRange = 30; // радиус кривизны васиных рук

    Настроение было улучшено до конца рабочего дня :)
  • +5
    Автор, ни в оригинальной статье, ни в топике на SO ни слова не сказано об open source.
    • +4
      alizar же.
  • –7
    Большинство взято тут
    • +7
      Это ж надо незаметить что это и есть перевод оттуда…
    • –1
      Там просят зарегистрироваться.
  • +21
    Это так боянисто, что аж уши закладывает
  • +97
    double penetration; // ouch
  • +6
    у меня в одной программе есть коммент такого типа:

    // ????-????, ????? ???? ?????! :)

    • –5
      Скорее всего кодировка битая.
      • +8
        да что вы говорите? =)

        кодировка-то была битая когда-то давно, превратив послание от моей жены (добралась до компа, когда я отошел) в набор знаков вопроса. Сейчас с кодировкой все в норме, но текст остался загадкой для потомков )
        • 0
          А восстановить кодировку восстановить не судьба?
          • +2
            восстановить кодировку восстановить из знаков вопроса? не судьба.
    • +1
      я встречал по круче:

      tmp_BSEG[] = T_BSEG[].

      *… керек шоттарды толтыру…

      if Ob_Racct is initial.
      create object Ob_Racct.
      endif.
      * 2007 жылынын жана шоттары
      refresh tmpTab.
      refresh HKONT.
      call method Ob_Racct->GetUserSetValue
      exporting SetName = 'ZALL_RACCT_2007'
      changing source = tmpTab.
      • 0
        казах писал?
        • 0
          ага. верно. казах абапер
          • 0
            Повезло что не индус. У них такие «шоттары» в коде прям встречаются)
          • 0
            Казах абапер — уже само по себе звучит! «Казах абапер жылтырататын елдырма»!
        • 0
          Это татарский.
  • +2
    кусок кода какой-то из версий jooml'ы

    cs402823.vk.me/v402823161/3924/bnN3S2NoUUk.jpg
    • +27
      В андроиде порадовала встроенная функция логгирования Log.wtf(), причём именно её «расшифровка».
    • 0
      Нормальный коммент. Сам им пользуюсь)

      C:\work>ack WTF
      draw_calc\analize\test_matrix_wave.pl
      119:    print "WTF\n" unless $found;
      
      draw_calc\db_writer.pl
      235:    assert($path && $db_tree, 'Blank path: WTF?');
      
      ft\next_try.py
      186:            raise "WTF"
      
      ft\parse.py
      435:            raise "WTF"
      
      ft\parse_v3.py
      297:            raise "WTF"
      
      g_serv\AskStat.pm
      587:                            die "$self->{Arg}{key} => $self->{Arg}{val} not found (WTF?)" unless list;
      647:                            die "$self->{Arg}{key} => $self->{Arg}{val} not found (WTF?)" unless list;
      747:                            die "$self->{Arg}{key} => $self->{Arg}->{val} not found (WTF?)" unless list;
      
      g_serv\db\test.pl
      5:my $dbh = DBI->connect("*****","","") || die 'WTF';
      
      
      • +1
        Я обычно не закрываю двери в свой кабинет и отлично слышу что происходит в комнате с программистами. Наша переписка по скайпу с одним из них:

        [16:10:16] MULIN:
        IF(РОМИЧ.НЕНОРМАТИВНАЯ ЛЕКСИКА == TRUE)
        {
        РОМИЧ.ЖОПА = MULIN.ПЕНДЕЛЬ;
        }

        [16:14:12] РОМИЧ:
        DESTROY (MULIN);

        [16:30:38] MULIN:
        IMPORT MULIN;
        TRY
        {
        РОМИЧ.ZARPLATA = MULIN.MONEY;
        }
        CATCH(E)
        {
        CONSOLE.WRITE («ERROR MESSAGE: OBJECT MULIN NOT FOUND»);
        }

        [16:33:36] РОМИЧ:
        WHILE(TRUE)
        {
        РОМИЧ.ZARPLATA += MULIN.MONEY;
        IF(MULIN.MONEY==0)
        MULIN MULIN = NEW MULIN();
        }
        • 0
          Когда программист (ненормативная лексика) == программист(работает)
          • 0
            Они мне тоже самое говорят )
  • +7
    В комментариях к MVCC проверкам PostgreSQL долгое время был вот такой фрагмент:
    mao says 17 march 1993: the tests in this routine are correct; if you think they're not, you're wrong, and you should think about it again. i know, it happened to me.

    В актуальной версии исходников его уже выпилили. Последнюю версию соответствующего файла с ним можно посмотреть здесь:
    git.postgresql.org/gitweb/?p=postgresql.git;a=blob;f=src/backend/utils/time/tqual.c;hb=e126958c2efdfc2d60b978d1fc7a780ff647e8ad
  • +24
    • +5
      Из разряда «психанул» :)
      • +15
        из разряда «всё правильно сделал [x]»
    • +9
      Вы меня заставили протереть монитор, пока я понял, что он ничем не заляпан.
      • +2
        Меня тоже :D
  • +5
    Ну раз тут вспоминаете, я подкину

    habrahabr.ru/post/52082/#comment_1381014
  • 0
    У нас в коде живут герои Star Wars (ascii telnet) и всякая псевдографика,
    Transformer revengeOfTheFallen;
    и аннотация @Workaround
  • +28
    Встречал в проекте жуткий индусский говнокод, с комментарием
    // I am sorry
    

  • 0
    Только сегодня поставил в Template новых файлов:
    /**
    * Created by ${USER} ${DATE} ${TIME}
    * Этот код распространяется под лицензией JCD:
    * 1. Вы можете делать с кодом всё что угодно, но обязаны комментировать;
    * 2. Использовать Tab для отступов;
    * 3. Пользоваться автоформатированием (e.g Ctrl+Alt+L, Ctrl+Shift+F)
    */
    • +1
      Ctrl+Alt+L

      ща заминусят поди, но все же =)
      развернул я консоль, открыл вим, открыл проект, нажал сочетание. Кеды заблокировали экран. Видимо они так прозрачно намекают.

      PS автоформатирование это такая прикольная штука, что во всех нормальных редакторах (даже какой нить kwrite это умеет вроде), она легко настраивается практически как угодно
      • –5
        > открыл вим
        Имеется ввиду среда разработки, а не vim.
        • +12
          отсюда:
          Уровень 0: как выйти из vim
          Уровень 1: vim — не IDE
          Уровень 2: vim — IDE
          Уровень 3: кому нужны IDE, если есть vim


          PS уверен на 95% (проверять не в чем), что кеды из чего угодно перехватят это сочетание.
          PPS нашел у себя установленный qtcreator — там ctrl+i.
          О, в предупреждение возможных споров — я понял ваше сообщение, но оно какое то странное, ИМХО, в области автоформатирования ;)
          • 0
            Мне нужна IDE, даже если есть vim :-)
            Потому что IDEA наше все :-)
            P.S. Только без холиваров! :-)
      • 0
        Сталкивался с таким поведением в IDEA, пришлось включить эклипсную раскладку (за поддержку которой ребятам из JetBrains отдельное спасибо).
      • 0
        Кстати, Ctrl+Shift+F — тоже непростая комбинация. В старых линуксах Ctrl+Shift+[A-F|U] использовали для ввода юникодных символов. Сейчас от этого оставили только Ctrl+Shift+U (и затем шестнадцатиричный код).
  • +20
    /* Отношение длины окружности к ее диаметру. 
        Не забудьте поменять значение на 3.0 для штата Индиана */
    
    #define Pi                                      3.1415927
    
    • 0
      Интересно, для сверхточных вычислений некоторые хранят PI в файле? И насколько он велик?
      • 0
        Где-то я читал, что для точных расчетов необязательно вычислять ОЧЕНЬ много знаков после запятой.
        Но правда это или нет сейчас не знаю
        • 0
          Точность расчетов определяется точностью измерительных приборов. Обычно половинят цену деления прибора и округляют все вычисления до этого знака.
      • +2
        Одна только запись вычисленного числа заняла 1137 ГБ

        Новый рекорд вычисления числа Пи

        ©alizar
      • +2
        Для вычисления размера видимой вселенной достаточно 39 знаков: www.youtube.com/watch?v=FpyrF_Ci2TQ
  • +1
    С регионального сайта Нокиа в бородатом году.

    Может на Хабре живет хозяин сих перлов.
    оригинал имеется, храню для потомков

    savepic.su/3106823.jpg
    • 0
      У меня вот сейчас такие хохмокомментарии в стиле:

      // Пытаемся авторизоваться.
      // Куки.
      // Не получилось. Бывает. Тогда сессия.
      и т.п.

      Так и вижу Петросяньи лица с гнусным «хи-хи-хи» в тот момент, когда они решили написать это. Код, кстати, соответствующий.
  • +2
    Очень смеялся когда-то со следующего комментария, который встретил в исходниках Android:

         /**
         * @hide
         * Private impl for avoiding a log message...  DO NOT USE without doing
         * your own log, or the Android Illuminati will find you some night and
         * beat you up.
         */
    
  • 0
    bla-bla-bla… // no comments
  • +7
    Много раз видел эту штуку:



    А, оказывается, дело вот в чем:

    /// <summary>
    /// The possible outcomes of an update operation (save or delete)
    /// </summary>
    public enum UpdateResult
    {
    
        /// <summary>
        /// Updated successfully
        /// </summary>
        Success = 0,
    
        /// <summary>
        /// Updated successfully
        /// </summary>
        Failed = 1
    }
    
    • 0
      «Fatal IO error 0 (Success)»
  • –5
    (Это даже компилируется в C99/C++0x).

    public boolean isAvailable() {
        return false;
    }
    


    C синтаксисом понятно:

    #include <iostream>
    #define boolean : bool
    
    false
    
    class foo {
      public boolean static isAvailable() {
          return false;
      }    
    };
    
    int main() {
        std::cout << std::boolalpha << foo::isAvailable() << std::endl; // false
        
        return 0;
    }
    


    Но как получить true?
    • +6
      комментарий в скобках был к коду, под которым он был. (long long ago). Ваш К.О.
  • 0
    /* FIXME: please god, when will the hurting stop? Thus function is so
    fucking broken it's not even funny. */
  • +9
    // Магия. Не трогать.
    

    Как ни печально, но такое в коде встречается нередко. И хорошо, если автор сего удосуживается описать смысл магии.
    • +2
      А ровно один раз сам написал комментарий:
      // Let the magic begin
      После чего шли десяток строк с зубодробительными конвертациями структур данных на Linq и Rx.
      Через полтора года пришлось немного поменять код. Поменял мелочь, удалил Б-гмерзкий комментарий, попытался отрефакторить, откатился, восстановил комментарий. Пусть уж лучше магия.
      • 0
        Вот уже неделю или больше собираюсь написать статью, для нее писал perl'овый скрипт, одной из задач которого является сделать исходники на C/C++ (там не важно). Там, где кусок исходников генерируется особо непонятно, пока что красуется "#MAGIC!!!", и я даже не знаю как это можно кратко разъяснить.
  • +13
    > #define TRUE FALSE
    > // Удачного дебаггинга, молокососы

    Слишком банально.

    Гораздо лучше этот вариант:

    #include <cstdlib>
    #include <exceptio.h>
    
    #define return if (std::random(1000) < 2) throw std::exception(); else return
    
    
    • +3
      туда-же
      #define malloc(X) ((void*) std::random())
    • 0
      А чё там дебажить-то? Логи спасут человечество.
      • +1
        А модификацию ячейки памяти по адресу вы тоже будете в логе отслеживать? А поигратся со значением перемнной на лету? А передвинуть точку исполнения — какой вопиющий хелловординг, ну будем же проффесионалами ЙОКэЛэМэНэ!
    • +3
      Вот правильный вариант этого дела: gist.github.com/aras-p/6224951
      • +1
        image
        Да, этот гист сделал мой день! =)
      • +6
        Там и в комментариях отличные есть :)

        /* create memory leaks if compiled on April, 1st */
        #define free(x) if(strncmp(__DATE__, «Apr 1», 6) != 0) free(x)

      • 0
        #define strcpy(a,b) memmove(a,b,strlen(b)+2)
        #define strcpy(a,b) (((a & 0xFF) == (b & 0xFF)) ? strcpy(a+1,b) : strcpy(a, b))
        

        Во второй строчке препроцессорная рекурсия или используется первое определение?
    • 0
      сюда же

      #define if(condition) if(rand()%2)
  • 0
    Столкнулся на фрилансе как-то с одним заказом, который выполнял какой-то писатель.

    //вёрстка сделана так, что хуже пожалуй что даже почти некуда
    //но с ТАКИМ «дизайном», любые другие варианты не уложатся в такой «бюджет»
    //поэтому сидите и не чирикайте…
    //да-да, мы имеем фиксированную ширину в 1280рх. скажите спасибо «дизайнеру».

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

    //FORCE PNG!!! use the FORCE!!!
    [...]
    //конечно это ОЧЕНЬ ДИКОЕ извращение, но так предусмотрены всякие гадости с множественным путём…
    [...]
    //если мы загружали карту или другое дерьмецо, то НИЧЕГО не делать
    • –2
      хочу развидеть это(
  • +1
    встречалось:
    // лишь бы дети хорошо учились
  • +25
    Из чьей-то лабораторной работы по программированию:

    // 8-926-123-45-67 Маша
    
    
    • +3
      Я так на олимпиадах по программированию писал. Но судя по количеству звонков их никто не читает…
      • +14
        Вы тоже подписывались Маша?
    • –4
      Кто нибудь, позвоните по номеру :)
  • +5
    видел и такое
    if (isset($_GET['id'])) { .... } else {
    // В любой непонятной ситуации просто ложись спать. 
    exit;
    }
    
  • +1
    Совершенно недавно работал над изучением кода MediaWiki и провел много радостных часов:

    Article.php:450: // todo FIXME: Horrible, horrible! This content-loading interface just plain sucks.
    WikiPage.php:185: * todo: move this UI stuff somewhere else
    WikiPage.php:3144: * todo This is a shitty interface function. Kill it and replace the
    * other shitty functions like doEditUpdates and such so it's not needed
    * anymore.
    Title.php:170: * THIS IS NOT THE FUNCTION YOU WANT.
    EditPage.php:1270: // FIXME this sucks, we should just use the Status object throughout
    HtmlForm.php:1974: # If one of the options' 'name' is int(0), it is automatically selected.
    # because PHP sucks and thinks int(0) == 'some string'.
    # Working around this by forcing all of them to strings.
    ApiEditPage.php:229: // That interface kind of sucks, but it's workable
    ApiEditPage.php:337: // todo FIXME: This interface SUCKS
    ApiQueryQueryPage.php:47: // This SUCKS
    SqliteInstaller.php:169: # Setting globals kind of sucks
    JpegMetadataExtractor.php:136: // Just need to find out what the byte order is.
    // because php's exif plugin sucks…
    SearchEngine.php:395: $contextlines = 2; // Hardcode this. Old defaults sucked. :)
    $contextchars = 75; // same as above… :P
    UploadBase.php:1020: * Internet Explorer for Windows performs some really stupid…
    Setup.php:303: /// todo UGLY UGLY
    UtfNormal.php:316: # Since PHP is not the fastest language on earth, some of
    # this code is a little ugly with inner loop optimizations.
    User.php:4115: // Now here's a goddamn hack…

    Это то что быстро смог найти, а вообще там иногда целые короткие рассказы от разработчиков. Кстати ну не знаю как Вам,
    а меня реально напрягает файл в 4000 и более тысяч строк. Ну не пойму зачем так нужно было делать?

    Интересно много уже было случаев суицида среди разработчиков MediaWiki?
    • +18
      бедный todo…
  • +5
    В последнее время использую только три вида комментариев:

    //DEBUG
    
    //STUB
    
    //<hell>
    ...
    //</hell>
    
  • НЛО прилетело и опубликовало эту надпись здесь
    • +3
      image
      image
  • 0
    Мне всегда нравился комментарий про то, что это тяжело было написать, что- то типа:
    It was hard to write, it should be hard to understand and harder to modify. So — no comments.
  • +18
    def random():
        #  я думаю, 7 достаточно случайное число.
        return 7
    
    • +3
      это намного круче, хотя и боян (извиняюсь за отуствтие форматирования, у меня теги не работают):

      int GetRandomNumber()
      {
      return 4; // Chosen by a fair dice roll
      // Guaranteed to be a random
      }
  • 0
    KolibriOS kernel.asm
    .epic_fail:

    hlt; Houston, we've had a problem
  • +2
    protected static function getMostRelevant(array $documents)
    {
    	...
    	// если документ всего один, то он и возвращается
    	...
    	// если остался один, то он возвращается
    	...
    	// если остался один, то он возвращается
    	...
    	// если остался один, то он возвращается
    	...
    	// если все еще более одного совпадения
    	// I'm Feeling Lucky!
    	return $documents[0];
    }
    
  • 0
    for($j=0;$j
    • +2
      for($j=0; $j < 23000000; $j++); //пауза ~3 сек
      • +4
        Не комментарий, но все же:

        void get_tomorrow_date( struct timeval *date )
        {
           sleep( 86400 );  // 60 * 60 * 24
           gettimeofday( date, 0 );
        }
        
  • +5
    Из ответов на stackoverflow:

    // somedev1 -  6/7/02 Adding temporary tracking of Login screen
    // somedev2 -  5/22/07 Temporary my ass
    

    И вольный перевод:
    // разработчик1 -  07.06.2002 Добавил временное отслеживание экрана логина
    // разработчик2 -  22.05.2007 Ну ОЧЕНЬ временное...
    
    • +1
      Нет ничего более постоянного чем временное. (с) Народная мудрость.
  • +1
    Короткая история из собственного факапа.
    1. Работая над проектом отвлекся на звонок.
    2. Надо было записать номер телефона -записал комментом в код.
    3. код ушел на сертификацию.
    4. Молодые лейтенанты обладают чувством юмора и им просто было интересно — чей это номер.
    5. Звонок девушке: «Ало. С вами говорит N-ый центр ***, с кем я говорю» — бесценно :))

  • 0
    У меня было такое что в комментариях программисты оставляли сообщения для будущих программистов как кинул их заказчик.
  • 0
    Недавно в sql процедуре натнулся на следующий комментарий (близко к тексту)
    /*
    Я не знаю, кто и зачем ТАК написал эту процедуру.
    Исправлять не буду, Бог тебе судья!
    */
  • +4
    Встречал код типа

    month[1]=января;
    month[12]=декабря;
    month[13]=хренобря;
    • +6
      но как же month[0] = 'нулябрь'?
      • 0
        Программистам должно было и хренобря хватить )
        • +1
          многие отсчёт и с нуля начать могут ;)
    • 0
      $day[0]='нулельник';
      $day[1]='понедельник';
      $day[2]='вторник';
      … AdminCMS, малоизвестная печалька.
      • 0
        Помню сам на уроках информатики писал «нольдцать». Эх, было время.
  • +8
    Всегда считал вот этот комментарий, достойным перевода: stackoverflow.com/a/769443

    // Здесь, я хотел бы немного поговорить с тобой о Adobe PSD формате. PSD это не хороший
    // формат. PSD это даже не плохой формат. Называть его плохим, было бы оскорблением других 
    // плохих форматов, таких как PCX или JPEG. Нет, PSD это отвратительнейший формат. Поработав 
    // над этим кодом уже несколько недель, моя ненависть к PSD выросла в бушующее пламя, 
    // которое горит с всепоглощающим жаром миллиона солнц.
    
    // Если есть два различных пути сделать что-нибудь, PSD будет использовать оба в разных местах. 
    // Потом он придумает еще три пути, до которых бы не догадался ни один вменяемый человек, и 
    // также будет их использовать. Несовместимость - это форма искусства для PSD. Например, 
    // почему, он вдруг решил что именно *эти* блоки должны быть выровнены по 4х 
    // байтовой границе, а вот это выравнивание *не* должно быть включено в размер. Другие 
    // блоки в других местах либо не выравниваются или выравниваются по границам, включенным 
    // в размер. Хотя, здесь, они не включены. Подошел бы любой из этих трех возможных вариантов 
    // поведения. Вменяемый формат бы выбрал один. PSD, конечно же, использует все три и даже 
    // больше.
    
    // Попытка получить данные из PSD файла - это как попытка найти что-то на чердаке вашего 
    // эксцентричного старого дядюшки, убитого обдолбанной пресноводной акулой на его 58ой
    //  день рождения. Такие подробности, может быть, и не важны для целей этого сравнения, но 
    // теперь я провожу очень много времени, придумывая интересные судьбы для людей, 
    // написавших этот формат имени Рубена Голдберга (*).
    
    // Недавно, я пытался заполучить последние спецификации PSD формата. Чтобы их получить, мне 
    // бы пришлось подать заявление на разрешение на заявление им, чтобы они хотя бы подумали, 
    // стоит ли высылать мне этот священный том. Это бы включало в себя отправку им по факсу 
    // копии какого-нибудь документа или чего-нибудь другого, скорее всего, подписанного кровью. Я 
    // могу только предполагать, что они сознательно затрудняют этот процесс, потому что им крайне 
    // стыдно за создание этой мерзости. Я не слишком доверчив от природы, чтобы пройти через эту 
    // процедуру, но если бы я это сделал, я бы распечатал каждую страницу спецификации и сжег бы 
    // их все. Если бы это было в моей власти, я бы собрал все копии этих спецификаций и запустил 
    // их на космическом корабле прямиком к солнцу.
    
    // PSD - мой не самый любимый формат.


    (*) Рубен Люциус Голдберг — американский карикатурист, более всего известен серией карикатур, в которых фигурирует так называемая «машина Руба Голдберга» — чрезвычайно сложное, громоздкое и запутанное устройство, выполняющее очень простые функции.
  • 0
    Вот крики души иногда бывают у людей — слезы на глаза наворачиваются

    wFrame.origin.y = (int)CGRectGetMaxY([header frame])+5;//Oh 10 hours of my life and what i know? Subviews of UIWebView Forgot mantissa! (bug 30208)
  • 0
    Источник уже не помню, но встречал чудесный метод:

    void enableDisable();

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.