Какой наименее полезный комментарий вы когда-либо видели?

Все мы знаем, что комментирование нашего кода - важная часть стиля кодирования, позволяющая сделать наш код понятным для следующего человека, который придет, или даже для нас самих через 6 месяцев или около того.

Однако иногда комментарий просто не режет горчицу. Я не говорю об очевидных шутках или откровенном разочаровании, я говорю о комментариях, которые, кажется, пытаются объяснить, но делают это так плохо, что их с таким же успехом может и не быть. Комментарии, которые слишком короткие, слишком загадочны или просто неверны.

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

Смотрите также:


person Community    schedule 27.09.2008    source источник


Ответы (89)


Типичные комментарии типа Comp Sci 101:

$i = 0; //set i to 0

$i++; //use sneaky trick to add 1 to i!

if ($i==$j) { // I made sure to use == rather than = here to avoid a bug

Что-то в этом роде.

person Community    schedule 27.09.2008

Незаполненные стандартные комментарии javadoc особенно бесполезны. Они занимают много места на экране, не внося ничего полезного. И хуже всего то, что там, где появляется один такой комментарий, наверняка прячутся сотни других.

/**
 * Method declaration
 *
 *
 * @param table
 * @param row
 *
 * @throws SQLException
 */
void addTransactionDelete(Table table, Object row[]) throws SQLException {
person Community    schedule 27.09.2008

Я уже писал эту маленькую жемчужину раньше:

//@TODO: Rewrite this, it sucks. Seriously.

Обычно это хороший знак, что я подошел к концу сеанса кодирования на ночь.

person Community    schedule 27.09.2008
comment
По моему опыту, то, что я где-то вижу TODO, почти гарантирует, что что бы это ни было, никогда не будет исправлено. - person Jay Conrod; 29.10.2008

// remember to comment code

wtf? : D

person Community    schedule 29.09.2008

Что-то вроде этого:

// This method takes two integer values and adds them together via the built-in
// .NET functionality. It would be possible to code the arithmetic function
// by hand, but since .NET provides it, that would be a waste of time
private int Add(int i, int j) // i is the first value, j is the second value
{
    // add the numbers together using the .NET "+" operator
    int z = i + j;

    // return the value to the calling function
    // return z;

    // this code was updated to simplify the return statement, eliminating the need
    // for a separate variable.
    // this statement performs the add functionality using the + operator on the two
    // parameter values, and then returns the result to the calling function
    return i + j;
}

И так далее.

person Community    schedule 03.10.2008

Каждый комментарий, который просто повторяет то, что говорит код, бесполезен. Комментарии не должны рассказывать мне, что делает код. Если я недостаточно хорошо знаю язык программирования, чтобы понять, что происходит, просто прочитав код, мне вообще не следует читать этот код. Комментарии вроде

// Increase i by one
i++;

совершенно бесполезны. Я вижу, что i увеличивается на единицу, это то, что написано в коде, мне не нужны комментарии для этого! Комментарии следует использовать, чтобы объяснить, почему что-то делается (в случае, если это далеко не очевидно) или почему что-то делается именно так, а не каким-либо другим способом (чтобы я мог понимать некоторые дизайнерские решения, принятые другим программистом, которые далеко не сразу очевидны). Дополнительные комментарии полезны для объяснения сложного кода, когда совершенно невозможно определить, что происходит, быстро взглянув на код (например, существуют сложные алгоритмы для подсчета количества битов, установленных в числе; если вы этого не сделаете знаете, что делает этот код, у вас нет шанса угадать, что там происходит).

person Community    schedule 27.09.2008

Однажды я работал над проектом со странным компилятором C. Это давало ошибку в действительном фрагменте кода, если между двумя операторами не был вставлен комментарий. Поэтому я изменил комментарий на:

// Do not remove this comment else compilation will fail.

И это отлично сработало.

person Community    schedule 27.09.2008
comment
Хех, это напомнило мне thedailywtf.com/Articles/SUSBSTITUTE_CODE.aspx - person Ross; 27.09.2008
comment
Возможно, комментарий был просто волшебным: catb.org/jargon/html/magic-story .html - person skymt; 28.09.2008

Я этому не верю. Я задал этот вопрос после того, как получил 22 ответа, и никто не указал на наименее полезный тип комментария:

комментарии, которые неверны.

Достаточно плохо, что люди пишут лишние комментарии, которые мешают пониманию кода, но когда кто-то пишет подробный комментарий, объясняющий, как что-то работает, и это либо изначально неправильно, либо неправильно после того, как код был изменен без изменения комментария ( гораздо более вероятный сценарий), это определенно худший комментарий.

person Community    schedule 27.09.2008

GhostDoc сам по себе предлагает несколько довольно интересных.

/// <summary>
/// Toes the foo.
/// </summary>
/// <returns></returns>
public Foo ToFoo()
person Community    schedule 27.09.2008

try
{
...some code...
}
catch
{
// Just don't crash, it wasn't that important anyway.
}

*вздох

person Community    schedule 03.10.2008

Попался однажды напильником. Тысячи строк кода, по большей части ужасающий. Плохо названные переменные, сложные условия для циклов и один комментарий, спрятанный в середине файла.


   /* Hmmm. A bit tricky. */
person Community    schedule 27.09.2008

Комментарии по умолчанию, вставленные IDE.

В последнем проекте, над которым я работал и который использовал WebSphere Application Developer, было много разработчиков и подрядчиков по обслуживанию, которых, похоже, не беспокоили сотни, если не тысячи классов Java, которые содержали подобные:

/**
 * @author SomeUserWhoShouldKnowBetter
 *
 * To change this generated comment edit the template variable "typecomment":
 * Window>Preferences>Java>Templates.
 * To enable and disable the creation of type comments go to
 * Window>Preferences>Java>Code Generation.
 */

Всегда была доля секунды между мыслью, что вы действительно нашли хорошо прокомментированный исходный файл, и осознанием того, что, да, это еще один комментарий по умолчанию, который вынудил вас использовать SWEAR_WORD_OF_CHOICE.

person Community    schedule 27.09.2008

Вчера я видел этот комментарий в приложении на C #:

//TODO: Remove this comment.
person Community    schedule 22.04.2009

Мой любимый комментарий на все времена.

/* our second do loop */
do {

Кто бы это ни написал - вы знаете, кто вы.

person Community    schedule 27.09.2008

очень большой проект движка базы данных на C много лет назад - тысячи строк кода с короткими и ошибочными именами переменных и без комментариев ... до тех пор, пока далеко не во вложенных if-условиях несколько тысяч строк в модуле появился следующий комментарий :

//if you get here then you really f**ked

к тому времени, я думаю, мы уже знали это!

person Community    schedule 03.10.2008

В огромном приложении VB5

dim J
J = 0 'magic
J = J 'more magic
for J=1 to 100
...do stuff...

Ссылка явно ЭТО ... и да, приложение без эти две строки не работают во время выполнения с неизвестным кодом ошибки. Мы до сих пор не знаем почему.

person Community    schedule 27.09.2008

Взято из одного из моих сообщений в блоге:

В процессе очистки исходного кода одного из проектов, которым я управляю, я наткнулся на следующие комментарии:

/*
   MAB 08-05-2004: Who wrote this routine? When did they do it? Who should 
   I call if I have questions about it? It's worth it to have a good header
   here. It should helps to set context, it should identify the author 
   (hero or culprit!), including contact information, so that anyone who has
   questions can call or email. It's useful to have the date noted, and a 
   brief statement of intention. On the other hand, this isn't meant to be 
   busy work; it's meant to make maintenance easier--so don't go overboard.

   One other good reason to put your name on it: take credit! This is your
   craft
*/

а затем немного ниже:

#include "xxxMsg.h" // xxx messages
/*
   MAB 08-05-2004: With respect to the comment above, I gathered that
   from the filename. I think I need either more or less here. For one
   thing, xxxMsg.h is automatically generated from the .mc file. That might
   be interesting information. Another thing is that xxxMsg.h should NOT be
   added to source control, because it's auto-generated. Alternatively, 
   don't bother with a comment at all.
*/

а потом еще раз:

/*
   MAB 08-05-2004: Defining a keyword?? This seems problemmatic [sic],
   in principle if not in practice. Is this a common idiom? 
*/
person Community    schedule 03.10.2008

AHHHRRRGGHHH Только что нашел это в каком-то древнем коде, держу пари, парень подумал, что он довольно забавный

private
  //PRIVATE means PRIVATE so no comments for you
  function LoadIt(IntID: Integer): Integer;
person Community    schedule 09.10.2009

Худший комментарий - это неправильное объяснение того, что делает код. Это хуже, чем полное отсутствие комментариев.

Я видел такие вещи в коде со слишком большим количеством комментариев (этого не должно быть, потому что код сам по себе достаточно ясен), и это происходит в основном, когда код обновляется (рефакторинг, модифицированный и т. Д.) но комментарии не обновляются вместе с ним.

Хорошее практическое правило: пишите комментарии только для объяснения почему код что-то делает, а не что он делает.

person Community    schedule 28.09.2008
comment
+1 Обожаю твой ответ. Вся суть исходного кода в том, что он должен быть доступен для чтения компиляторам И людям. Это полная причина существования исходного кода! Программа делает не то, что говорится в комментарии, а то, что говорит код. Если вы не можете прочитать код, значит, он либо нуждается в рефакторинге, либо вам нужны навыки, либо он написан на менее чем хорошем языке программирования. - person Guge; 06.03.2010

Определенно должны быть комментарии, которые заменяют обработку ошибок.

if(some_condition){
    do_stuff();
}
else{
    //An error occurred!
}
person Community    schedule 03.10.2008

Я только что нашел вот это, написанное в строке перед закомментированной строкой кода:

//This causes a crash for some reason. I know the real reason but it doesn't fit on this line.
person Community    schedule 09.10.2009
comment
Судя по всему, последний комментарий Ферма. - person John; 10.10.2009

Приложение 100k LOC, которое было перенесено с vb6 на vb.net. Похоже, что предыдущий разработчик поместил заголовок комментария к одному методу, а затем скопировал и вставил точный комментарий к каждому методу, который он написал с тех пор. Сотни методов и каждый неправильно прокомментирован ...

Когда я впервые увидел это, я засмеялся ... 6 месяцев спустя шутка утихает.

person Community    schedule 27.09.2008
comment
Извините, если я не разъяснил это в ответе. Он прокомментировал метод А, хотя и с минимумом комментариев. Затем он создал методы B, C, D, E ... и использовал один и тот же комментарий от A ко всем из них ... С тех пор я оставил эту работу, поэтому мне больше не нужно на нее смотреть. Я думаю, он сделал это для того, чтобы сказать менеджерам Смотри! Я ВСЕ комментирую. - person SecretDeveloper; 13.07.2009

Это абсолютно реальный пример из триггера базы данных:

/******************************************************************************
   NAME:       (repeat the trigger name)
   PURPOSE:    To perform work as each row is inserted or updated.
   REVISIONS:
   Ver        Date        Author           Description
   ---------  ----------  ---------------  ------------------------------------
   1.0        27.6.2000             1. Created this trigger.
   PARAMETERS:
   INPUT:
   OUTPUT:
   RETURNED VALUE:
   CALLED BY:
   CALLS:
   EXAMPLE USE:
   ASSUMPTIONS:
   LIMITATIONS:
   ALGORITHM:
   NOTES:
******************************************************************************/
person Community    schedule 06.10.2008

Два самых бесполезных комментария, которые я когда-либо видел ...

try
{
  ...
}
catch
{
  // TODO: something catchy
}

Я также разместил это в Daily WTF, поэтому я обрезал его до комментария ...

  // TODO: The following if block should be reduced to one return statememt:
  // return Regex.IsMatch(strTest, NAME_CHARS);
  if (!Regex.IsMatch(strTest, NAME_CHARS))
    return false;
  else
    return true;
person Community    schedule 29.10.2008

Один, который я никогда не считал очень полезным:

<!--- Lasciate ogne speranza, voi ch'intrate --->
person Community    schedule 24.11.2008
comment
Перевод? Итальянско-английский язык Google получает только около половины этого. Разве это что-то вроде отказа от всякой надежды, входящие сюда? - person GalacticCowboy; 25.11.2008
comment
Данте - en.wikipedia.org/wiki/Divine_Comedy - person Abizern; 09.03.2009

Типичные комментарии типа Comp Sci 101:

Я угрожал своим ученикам случайными актами крайнего насилия, если они когда-либо делали это в заданиях. И они до сих пор сделали. Однако смысл правильного отступа для них, казалось, полностью утрачен. Я думаю, это показывает, почему Python может быть идеальным языком для начинающих.

person Community    schedule 27.09.2008
comment
Интересно, приведет ли необходимость повторения курса снова к цели. - person canadiancreed; 13.10.2009
comment
Интересно, сможет ли учитель заставить их пройти курс? - person Matthew; 20.11.2009
comment
@Matthew: Не думаю, что это было бы очень полезно. Единственная мысль, которая здесь помогает, - это заставить студентов программу - много. Делайте большие проекты. Забудьте обо всем остальном в CS, это просто не важно. Студенты CS не занимаются программированием, и в этом проблема. После того, как они смогут программировать, вы можете научить их продвинутым концепциям. И не приходите ко мне с утверждением, что «CS - это не программирование», потому что это чушь собачья. - person Konrad Rudolph; 20.11.2009

Комментарии, созданные с помощью инструмента авто-javadoc (например, JAutoDoc). У меня был член команды, отправивший большой объем кода, который был прокомментирован следующим образом:

/**
 * Gets the something
 *
 * @param num The num
 * @param offset The offset
 */
public void getSomething(int num, bool offset)

Может быть, это полезно в качестве отправной точки, но по определению, если программа анализирует имена переменных и методов, чтобы делать свои комментарии, она не может принести много пользы.

person Community    schedule 27.09.2008

У меня их много:

# For each pose in the document
doc.elements.each('//pose') do |pose| ...

# For each sprite in sprites
@sprites.each do |sprite| ...

# For each X in Y
for X in Y do ...

Однако я пытаюсь сократить это количество. :(

person Community    schedule 28.09.2008

Когда я преподаю ООП на C ++ или Java, я обычно получаю следующее:

// My class!
Class myclass 
{
    //Default constructor
    public myClass()
    {
       ...
    }
}

Моя политика - объявить студентам, что они потеряют баллы как за недостаточную, так и за лишнюю документацию.

person Community    schedule 27.09.2008

#include <stdio.h>
//why isn't this working!

С компилятором c, который поддерживает только /*-style */ глобальные комментарии.

person Community    schedule 29.10.2008

Мы поддерживаем ужасный беспорядок в PHP-приложении, и первоначальный разработчик имел привычку оставлять «отладочный код» закомментированным на этом месте. Как он всегда говорил, это произошло потому, что «на случай, если они ему снова понадобятся, он просто раскомментирует их и вуаля, так что это сэкономит ему много работы».

Таким образом, все скрипты буквально пронизаны такими строками, как:

//echo "asdfada";
//echo $query."afadfadf";

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

Кстати, он никогда не удалял устаревшие скрипты или таблицы базы данных. Итак, у нас есть каталоги, заполненные такими файлами, как dosomething.php, dosomething1.php, dosomething1.bak, dosomething1.bak.php и т. Д. Все боятся что-либо удалять, потому что никто не знает, что на самом деле используется.

person Community    schedule 22.04.2009
comment
вот для чего нужен контроль версий. - person mpen; 17.09.2010

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

Например, в Java Messaging Service (JMS или в J2EE) класс QueueReceiver.receive содержит следующий драгоценный камень: «Этот вызов блокируется до тех пор, пока не поступит сообщение, не истечет тайм-аут или этот потребитель сообщения не будет закрыт. Тайм-аут, равный нулю, никогда не истекает. и вызов блокируется на неопределенный срок ".

Звучит здорово? правильно?

Проблема в том, что, как показывают мои лабораторные исследования, пользователи считают, что комментарии охватывают все. Столкнувшись с ситуацией, когда сообщения не приходят, они отказываются искать объяснение где-либо еще.

В этом случае, когда вы создаете QueueConnection из QueueConnectionFactory, он сообщает вам, что сообщения не будут доставлены до вызова start. Но это не отображается в методе приема.

Я считаю, что если бы этой линии не было, больше людей искали бы ее в другом месте.

Между прочим, мое исследование посвящено удобству использования JavaDoc в целом и тому, действительно ли люди находят важные директивы в JavaDocs. Если кто-нибудь захочет взглянуть, ссылка на него находится здесь.

person Community    schedule 27.09.2008

У меня есть очень плохая привычка делать это, особенно когда я в ударе:

// TODO: Documentation.
person Community    schedule 03.10.2008

Обрывки посторонних комментариев. Обычно, если есть логическое разделение потока, строка комментариев вроде:

/***************************************************************************/

выше и ниже этого раздела кода могут быть полезны. Это также удобно, когда вам нужно вернуться позже и разделить большую функцию (которая начиналась с малого) на несколько более мелких функций, чтобы код был легко читаем.

Бывший программист, который останется безымянным, решил добавить следующие две строчки:

//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

После каждой строчки кода.

person Community    schedule 06.10.2008
comment
Ты лжешь. Ни в коем случае это не правда. - person Mike Cole; 22.04.2009
comment
Истинный. Я уверен, что была причина, по которой он использовал комментарии, например, заметку, чтобы указать, где он был в коде. Однако он так и не удалил их после того, как закончил, и в результате почти каждая строка была прокомментирована. Он также использовал абзац, чтобы указать, был ли код протестирован или нет. Если вы натолкнулись на большой блок кода без отступов, скорее всего, он не был хорошо протестирован. - person Steropes; 29.04.2009
comment
Программисту платили по линии? - person BoltBait; 12.12.2009
comment
Это то, что я представляю, когда слышу, как люди говорят что-то вроде: Мы написали более 20000 строк кода для этого проекта. - person HXCaine; 15.12.2011

Однажды я увидел в каком-то коде следующий комментарий:

//I know that this is very ugly, but I am tired and in a hurry. 
//You would do the same if you were me...
//...
//[A piece of nasty code here]
person Community    schedule 06.10.2008
comment
Я так и делаю, чисто из тщеславия. Когда кто-то видит мой неприятный код, я хочу, чтобы они знали, что, по крайней мере, я знаю, что это не так, как должно быть. - person CindyH; 21.10.2008

Вот два моих любимых:

                // do nothing

На самом деле это не помогает, так как просто занимает место.

Потом где-то дальше:

        // TODO: DAN to fix this.  Not Wes.  No sir.  Not Wes.

Думаю, если я не Дэн или Уэс, мне следует просто проигнорировать это, верно?

person Community    schedule 21.10.2008
comment
// ничего не делать может быть полезно, если оно появляется в пустом блоке, который может быть ошибочно принят за незаконченный код. Стоит ли вообще иметь пустой блок - это другой вопрос. - person Daniel Cassidy; 27.11.2008
comment
Нет пустых блоков. Значит, ты сделал это неправильно. - person snicker; 10.10.2009
comment
Я обычно делаю это при вложении if, это делает его более читабельным. - person Loren Pechtel; 13.10.2009
comment
@ Лорен, ты оставляешь это на несколько месяцев? Сначала я вижу, как это делается, но через несколько месяцев это все еще в кодовой базе кажется разбитым окном. - person JB King; 13.10.2009
comment
Я использую // Do nothing. или // NOOP, поэтому время от времени. Некоторые IDE выдают предупреждения о пустых блоках. И неспроста. - person BalusC; 20.11.2009
comment
Зачем мне его удалять? Это дает понять, что происходит. - person Loren Pechtel; 05.01.2010
comment
На мой взгляд, это было бы немного болезненно. Я читал строку и задавался вопросом: если вы ничего не делаете, то почему бы просто не удалить строку? а затем удалите ненужный код, чтобы сделать вещи немного более компактными. Если в кодовой базе есть миллионы мест, где есть комментарий, в котором говорится, что ничего не делать, это в некотором смысле меня просто сбивает с толку. Вроде как люди еще не носят одежду, в которой постоянно играет музыка. Некоторым это может показаться милым, а другим быстро надоедает. - person JB King; 05.01.2010

cntrVal = ""+ toInteger(cntrVal)      //<---MAYBE THIS IS THE WAY I'M GOING THROUGH CHANGES (comin' up comin' up) THIS IS THE WAY I WANNA LIVE

Кстати, это лирика из песни E-type ...

person Community    schedule 29.10.2008

Чрезмерная избыточность не проясняет, что происходит. Это из прошивки мобильного телефона

/*========================================================================

FUNCTION 
    DtFld_SetMin

DESCRIPTION
    This local function sets a nMin member of the Dtfld struct.

DEPENDENCIES
    None

ARGUMENTS
    [in]me
        Pointer to the Dtfld struct.
    [in]val
        Value to set

RETURN VALUE
    None.

SIDE EFFECTS
    None

NOTE
    None
========================================================================*/
/**
 @brief This local function sets a nMin member of the Dtfld struct..
 @param [in] me  Pointer to the Dtfld struct.
 @param [in]val Value to set
 @retval None 
 @note None
 @see None
*/

static __inline void DtFld_SetMin(DtFld *me, int val)
{
  me->nMin = val;
}
person Community    schedule 22.04.2009

Очень большой исходный файл, реализующий многопоточность в одном процессе. Посреди всех переключений стека вызовов и захвата семафоров, а также приостановки и возобновления потоков был простой комментарий относительно особенно непонятной части манипуляции с указателями:

/* Trickiness */

Ну и дела, спасибо, что поделились.

person Community    schedule 03.10.2008

/* FIXME: documentation for the bellow functionality - and why are we doing it this way */

Это была огромная статистическая программа для бухгалтерского учета. Мы так и не поняли, почему она поступила так - неправильно. Но пришлось его переписать, и заказчику заплатили штраф.

person Community    schedule 27.09.2008

// Magic
menu.Visible = False
menu.Visible = True

Это из инфраструктуры пользовательского интерфейса в некотором коде PowerBuilder, над которым я работал. Фреймворк создавал пункты меню динамически (из данных базы данных). Однако, когда PowerBuilder был обновлен с 16-битной до 32-битной, код меню перестал работать. Ведущий разработчик каким-то образом определил, что скрытие меню с последующим его отображением приводит к его правильному отображению.

person Community    schedule 06.10.2008

Не совсем комментарий, но из JavaDoc, в котором описывается API системы, с которой мне когда-то приходилось работать.

setAttribute(attributeName, attributeValue)
Sets an attribute

Нигде не было задокументировано, что такое атрибут (это не были атрибуты HTML / XML и т. Д.), Какие атрибуты существуют или какие значения они могут иметь.

person Community    schedule 27.09.2008

Однажды я увидел:

#region This is ugly but a mas has to do what a man has to do
Initialization of a gigantic array (...)
#endregion 
// Aren't you glad this has ended?

Я был рад, что не был этим разработчиком.

person Community    schedule 29.10.2008

Я удивлен, что никто не публиковал подобное раньше.

 #contentWrapper{
  position:absolute;
  top: 150px; /*80 = 30 + 50 where 50 is margin and 30 is the height of the header*/
 }

Совершенно неверные комментарии - худший вид комментариев.

person Community    schedule 22.04.2009

Я работаю на двух языках (английском и французском), но мой любимый комментарий был на французском:

/* La passe du coyote qui tousse */

В переводе это будет примерно так:

/* The coughing coyote trick */

Обычно он представлял собой сегмент кода, который либо казался автору умной идеей и был совершенно непонятным, либо это было странное исправление, которое даже автор не понимал, почему он работал (подумайте об исправлении состояния гонки путем перемещения операторов if). Во всех случаях это был плохо написанный код, что пугало любого, кому приходилось его реорганизовывать, потому что было очень трудно предсказать эффект от его изменения.

person Community    schedule 22.04.2009

add ax,1 ;add 1 to the accumulator

шутки в сторону? этот комментарий потратил впустую 5 секунд моей жизни.

также устаревшие комментарии FTL

//the system can only handle 5 people right now. make sure where not over
if(num_people>20){ 
person Community    schedule 12.10.2009

Один из самых забавных, с которыми я когда-либо сталкивался.

// HACK HACK HACK. REMOVE THIS ONCE MARLETT IS AROUND

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

// this is a comment - don't delete
person Community    schedule 20.11.2009

// yes, this is going to break in 2089, but, one, I'll be dead, and two, we really ought to be using
// a different system by then
if (yearPart >= 89)
{
    // naughty bits removed....
}

(Бесполезно в качестве комментариев, но оба являются правдивыми заявлениями.)

person Community    schedule 04.02.2010

Я только что видел это в файле INI для программного обеспечения (одного из нескольких, сброшенных на меня не так давно), я поддерживаю:

;--- if LOGERR=1, errors are logged but debugging is difficult
;--- if LOGERR=0, errors are not logged but debugging is easy
LOGERR=1

Что ж, отладка действительно была сложной, но я не решился изменить настройку.

person Community    schedule 01.10.2010

Я бы сказал, что наименее полезный вид комментариев, с которыми я столкнулся, - это комментарии на втором языке.

Я бы предпочел видеть комментарии, написанные четко на чьем-то родном языке, чем нацарапанные на очень плохом приближении к английскому. По крайней мере, тогда его сможет перевести носитель этого языка. Комментарии ESL часто недоступны для чтения всем на планете, кроме человека, который их написал, а иногда даже им.

person Community    schedule 29.09.2008

Взято из унаследованного кода, это было единственное описание назначения следующего if условия (условие занимало 4 строки по 120 столбцов):

#-- Whoa, now that's a big if condition.
person Community    schedule 06.10.2008

Цитирую это по памяти, так что это может быть неточно.

Я не знаю, какого хрена это делает, но похоже, что это работает, поэтому я не трогаю его.

Самое смешное, как я узнал об этом. Этот комментарий был встроен в приложение доступа, написанное одним разработчиком из нашей компании для клиента и распространяемое в MDB. К сожалению, код, который «кажется, работает», провалился, и Access послушно открыл окно кода, при этом отладчик выделил строку прямо под комментарием. У покупателя это не внушало доверия.

person Community    schedule 21.10.2008

Сегодня пробежал через дурак. Я должен был ожидать этого, учитывая, что он был частью макроса VBA в книге Excel.

a.writeline s 'write line

Мне показалось особенно очаровательным, что тот, кто это написал, нашел время, чтобы написать комментарий, в котором использовался пробел, чтобы прояснить невероятно сбивающую с толку беспорядочную команду «Writeline», но не было необходимости использовать осмысленные имена переменных. Лучшее, что я могу сказать, это сокращение от «файл», а s - это сокращение от «String» (потому что «a» уже было занято).

person Community    schedule 06.02.2009

Случайно в середине кода:

//???
person Community    schedule 06.02.2009
comment
Поместите маркер. Я делал то же самое - но этого нельзя оставлять! - person Loren Pechtel; 05.01.2010
comment
Если это был C ++, хорошо, что это не было //??/ (что переводится как `//` с экранированной новой строкой). Меня пугают повторяющиеся вопросительные знаки, потому что это могут быть триграфы. - person David Thornley; 06.03.2010

Я удалил имя, чтобы избежать затруднений, но это комментарий, найденный в некотором производственном коде. К сожалению, поскольку это был код ASP, относящийся к модулю VB6, и заказчик был весьма любознателен, именно она указала мне на комментарий, когда я был на месте во время визита консультанта. К счастью, она относилась к этому с чувством юмора.

"Я не знаю, как работает этот @"% &. Это набор из & £ $!, Созданный этим подрядчиком ---------.
Я просто оставлю его на месте и надеюсь, что это никому не нужно менять.

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

person Community    schedule 27.09.2008

if (someFlag)
{
    // YES
    DoSomething();
}
else
{
    // NO
    DoSomethingElse();
}

Был один парень, который делал это постоянно, остальная часть команды в конце концов убедила его прекратить это делать!

person Community    schedule 20.03.2009
comment
Да, просто измените someFlag на isTrue или что-то в этом роде. - person John; 10.10.2009

Этот:

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

person Community    schedule 22.04.2009

Я нашел это в примере приложения для картографического продукта:

// Return value does not matter
return 0;
person Community    schedule 18.05.2009

Я нашел это в скрученной программе

# Let them send messages to the world
#del self.irc_PRIVMSG  # By deleting the method? Hello?
person Community    schedule 26.05.2009

Однажды я работал с очень талантливым программистом на ассемблере, который дополнил базовый набор инструкций ARM рядом макросов. Его код состоял из десятков тысяч инструкций и выглядел примерно так - с макро-инструкциями, которые я (компетентный программист ARM) не мог прочитать, представленные ??? и периодические регулярные инструкции ARM, такие как ADD:

...
??? R0,R0,#1
??? R0,R1
ADD R0,R0,#6    ; Add 6
??? R1,R0
??? R0,R0,R1
...

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

person Community    schedule 09.10.2009

Нашел сегодня в середине блока объявлений:

// other variables

Ну и дела, правда? Спасибо.

person Community    schedule 12.10.2009

Чье-то имя или инициалы и все. Иногда эти подписи определяют блок кода ...

//SFD Start
...code...
//SFD End

Как будто код - это произведение искусства, они должны его подписать! Кроме того, что, если кому-то еще нужно изменить код, отмеченный таким образом?

Это не следует путать с функцией «обвинять» или «аннотировать» в системах управления версиями - они потрясающие!

person Community    schedule 29.10.2008
comment
Подозреваю, что точно знаю, откуда взялась эта привычка. Я ходил на курсы C ++ в колледже, где профессор давал нам шаблон приложения и просил реализовать определенные разделы. Она потребовала, чтобы мы использовали именно такой формат комментариев, чтобы помочь ей оценивать нашу работу. Может быть переходящий остаток ... - person JohnFx; 07.02.2009

Однажды я наткнулся на эту маленькую красотку в приложении VB.NET

Dim huh as String 'Best name for a variable ever.
person Community    schedule 12.10.2009

// возврат

return;

person Community    schedule 11.11.2009

Только что нашел это сегодня ...

// TODO: this is basically a copy of the code at line 743!!!
person Community    schedule 19.11.2009

Это комментарий, который я написал в файле в последнем проекте моей группы в колледже.

/* http://youtube.com/watch?v=oHg5SJYRHA0 */
person Community    schedule 20.11.2009

Классика, над которой мы всегда шутим на моей работе (полная опечаток):

// Its stupid but it work

Это неоднократно обнаруживалось в старой кодовой базе.

person Community    schedule 20.11.2009

Мне пришлось исправить ошибку в 2000 строк кода, которая транскодировала звук из GSM в мю-закон (в основном с использованием битового сдвига и массивов значений преобразования). Единственный комментарий в файле находился в верхней части единственного в нем метода. Это было:

/* Do the business */
person Community    schedule 11.12.2009

Однажды я поддерживал код операционной системы, который мы настроили для миникомпьютера Harris (да, это было давно). Просматривая код планировщика (ассемблера) однажды, я наткнулся на блок кода, который имел комментарий «Begin Magic» вверху и примерно через 25 строк после комментария «End Magic». Промежуточный код был одним из самых сложных, сложных и элегантных, которые я когда-либо видел. Нам потребовалось четверо, чтобы выяснить, что на самом деле делает этот небольшой фрагмент кода (переключение виртуальных машин).

person Community    schedule 05.01.2010

Я вношу некоторые изменения в java-класс, который содержит более 1000 строк, но без комментариев. Я новичок в их стиле кодирования, поэтому не могу удержаться от добавления комментария вроде

/*Added because someone asked me to add it*/
person Community    schedule 21.09.2010

//I am not sure why this works but it fixes the problem.

Это первое место в списке моих бесполезных комментариев.

person Community    schedule 21.10.2008

кто-то прислал мне c-файл, в котором описан двоичный файл, созданный его программой.

он не содержал никаких комментариев, кроме как где-то в записи реальных данных

SwapArray(..); // Big endian ???
write();

Я спросил о реализации SwapArray, и он сказал мне, что он мне не нужен, просто чтобы убедиться, что он работает на машинах с Linux.

После экспериментов я обнаружил, что он везде использовал прямой порядок байтов (что вполне нормально), но только реальные данные были записаны с прямым порядком байтов. Обычно вы могли видеть это в шестнадцатеричном редакторе, но данные хранились с плавающей запятой, поэтому заметить смешанный порядок байтов не так-то просто.

person Community    schedule 29.10.2008

Top of the Pops обязательно должен быть

//  This code should never be called
person Community    schedule 29.10.2008
comment
Хм? На самом деле это очень полезный комментарий. Еще лучше было бы указать assert (например, assert(false, "Code should never be reached")) или выбросить соответствующее исключение, но комментарий определенно лучше, чем ничего. - person Konrad Rudolph; 17.08.2009
comment
// Этот комментарий никогда не должен был быть написан. - person JohnFx; 13.10.2009

Мне больше всего понравилось, когда я работал над устаревшим коммуникационным приложением.

// Magic happens here...
person Community    schedule 29.10.2008

Сегодня наткнулся на вот это:

/// <summary>
/// The Page_Load runs when the page loads
/// </summary>
private void Page_Load(Object sender, EventArgs e) {}
person Community    schedule 20.03.2009

Еще один я помню:

//TODO: This needs to be reworked.  THIS CRAP NEEDS TO STOP!!!
person Community    schedule 22.04.2009

{Some Code;} // Не помню, зачем я это делаю, но работает ...

person Community    schedule 12.10.2009

На самом деле у меня их несколько,

// 18042009: (Name here) made me do this

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

person Community    schedule 12.10.2009

Я недавно нашел это в коде, который написал много лет назад:

// it's a kind of magic (number)
$descr_id = 2;
$url_id = 34;
person Community    schedule 02.11.2009

Этот комментарий на самом деле был написан на другом языке, но я постараюсь передать эффект в переводе:

//we trick it, if forbidden, as if it had already existed

Комментарий пытался описать то, как он поступал с отключенными элементами списка - код помечает элемент как дубликат, который, следовательно, следует пропустить. Да, очень басовый способ делать что-то, но он бледнел по сравнению с бессмысленным комментарием.

person Community    schedule 20.11.2009

[some code]
// [a commented out code line]
// this line added 2004-10-24 by JD.
// removed again 2004-11-05 by JD.
// [another commented out code line]
[some more code]

а) ПОЧЕМУ? б) Какая линия?

person Community    schedule 20.11.2009

Я увидел потрясающий код внутри AI-части игры:

..."AI code"...
if(something)
   goto MyAwesomeLabel;   //Who's gonna be the first to dump crap on me for this?
..."More Ai code"...

MyAwesomeLabel:
   //It wasn't that hard to get here, right?
   ..."Even more AI code"...
person Community    schedule 20.11.2009

// СРОЧНЫЙ ТОД: Реализуйте это дерьмо заново, старый код чертовски сломан ... и мы думали, что решили все проблемы

Только что нашел это в одном из моих старых проектов. Сначала я рассмеялся, но в конце концов начал скулить, потому что все еще не мог найти ошибку.

person Community    schedule 05.03.2010

Не совсем подходит для вопроса, но я ненавижу, когда вижу:

try
{
  someSeeminglyTrivialMethod();
}
catch (Exception e)
{
  //Ignore. Should never happen.
}

Всякий раз, когда я вижу это во время проверки кода, я говорю им заменить уловку на:

catch (Exception e)
{
  System.exit(0);
}
person Community    schedule 01.10.2010

Я подумал, что это худший комментарий к сообщению SO, и был разочарован, обнаружив обратное.

person Community    schedule 27.09.2008

Прокомментированный код - наименее полезный комментарий :)

person Community    schedule 27.09.2008
comment
Нет, временное удаление кода может быть весьма полезным. - person Toon Krijthe; 28.09.2008

person    schedule
comment
Что касается того, что должно было быть там: похоже, это помогает мне обойти мое дерьмовое понимание реализации потоковой передачи .NET. - person Steve Jessop; 27.09.2008
comment
Это полезный комментарий. Это говорит мне, что мой предшественник не понимал потоков и / или функций синхронизации .NET. - person finnw; 28.09.2008

person    schedule
comment
Я работал подрядчиком у провайдера электронного голосования, чтобы привести кодекс в соответствие со стандартами. Я никогда не видел вышеупомянутый комментарий, но другое правило заключалось в том, что не могло быть никаких магических чисел ›1. Итак, было много CONST INT INT_55 = 55, с INT_55 использованным, как если бы он имел значение. Это прошло требования. - person CindyH; 21.10.2008
comment
Я видел const THE_LETTER_S = 83; в каком-то коде, где я сейчас работаю ... - person Nick Lewis; 23.07.2009

person    schedule
comment
Это С ++? Должен быть сделан чисто виртуальным. - person mpen; 17.09.2010
comment
согласно используемым соглашениям и комментариям, это C # - person Can Poyrazoğlu; 04.02.2012