Хабрахабр

Комментарии в коде как способ самовыражения

Недавно, ковыряя один не особо популярный фреймворк, я наткнулся на следующий кусок кода.


Потому что роботы-убийцы любят единорогов!

Немного находок под катом. Не знаю, какую мысль и в каком настроении хотел донести автор, но это навело меня на размышления: как часто мы используем комментарии не совсем по назначению?

//Не рекомендуется к прочтению, если Вы не любите пятничные посты во вторник.

Существуют разные мнения на тему комментирования кода. Есть адепты self-explanatory code (самообъясняющего кода). Согласно этой концепции переменные и функции именуются максимально развёрнуто, что во многих случаях избавляет от необходимости писать дополнительные комментарии. Другие предпочитают описывать каждый свой шаг в комментариях в помощь себе и тем, кому в дальнейшем придётся работать с кодом. Некоторые пишут 3-этажные конструкции в одну строку и никак их не комментируют (сам таким грешил, признаюсь). Но есть и другие случаи.

Печальное признание

Приходилось ли Вам писать что-то, за что Вы сами себя ненавидели? Вы понимали, что так делать плохо и некрасиво, но обстоятельства (требования заказчика, например) были сильнее Вас? У некоторых такое бывало.

//This code sucks, you know it and I know it.
//Move on and call me an idiot later.

Этот код отвратителен, Вы знаете это и я это знаю. Двигайтесь дальше, потом назовёте меня идиотом.

// I am not responsible of this code.
// They made me write it, against my will.

Я не в ответе за этот код. Меня заставили это написать, против моей воли.

// I have to find a better job

Пора найти работу получше

// I dedicate all this code, all my work, to my wife, Darlene, who will // have to support me and our three children and the dog once it gets // released into the public.

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

А иногда корпоративные стандарты написания кода заставляют делать что-то, что не поддаётся внутренней логике разработчика.

const int TEN=10; // As if the value of 10 will fluctuate...

Будто значение 10 может варьироваться...

Система взаимодействия была выстроена сложным образом, в результате чего прямой обратной связи с заказчиком не было. Вспомнился случай, когда мне на фрилансе достался небольшой кусок работы над одним каталогом. Вам тоже такие попадались? И нужно было сделать «как на картинке, потому что так утвердил заказчик», хоть это и было некрасиво с точки зрения кода.

Предупреждения и утерянные знания

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

/* * You may think you know what the following code does. * But you dont. Trust me. * Fiddle with it, and youll spend many a sleepless * night cursing the moment you thought youd be clever * enough to "optimize" the code below. * Now close this file and go play with something else. */

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

/* * Dear Maintainer * * Once you are done trying to ‘optimize’ this routine, * and you have realized what a terrible mistake that was, * please increment the following counter as a warning * to the next guy. * * total_hours_wasted_here = 73 */

Уважаемый Сопровождающий! Когда Вы закончили свою попытку «оптимизировать» этот процесс и поняли, насколько чудовищной была эта ошибка, увеличьте последующий счётчик в назидание тем, кто придёт за Вами.

// Magic. Do not touch.

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

/*
after hours of consulting the tome of google
i have discovered that by the will of unknown forces
without the below line, IE7 believes that 6px = 12px
*/
font-size: 0px;

После часов консультаций и гугления, я обнаружил, что по воле неведомых сил без последующей линии IE7 считает, что 6px = 12px

// Autogenerated, do NOT edit. All changes will be undone.

Сгенерировано автоматически, НЕ редактировать. Все изменения будут отменены.

Говорят, работает. Последнее, кстати — интересный пример сообразительности в борьбе с попытками влезть в Ваш код.

Боль и отчаянье

Вам приходилось работать с чем-то, что приводило Вас в полнейшее отчаянье? Разработчик просмотрщика изображений Xee столкнулся с разбором формата PSD. Но с кем может поделиться программист своими страданиями, как не с комментарием? Ниже — перевод, оригинал на данный момент лежит на гитхабе (строки 108-136).

PSD не является хорошим форматом. Здесь я хотел бы остановиться на минутку и рассказать о формате Adobe PSD. Назвать его так было бы оскорблением для других плохих форматов, таких как PCX или JPEG. PSD даже не является плохим форматом. Несколько недель работы над этим кодом возвели мою ненависть к PSD до уровня яростного огня, пылающего лютой страстью миллиона солнц. Нет, PSD — чудовищный формат.

Вдобавок он создаст ещё три способа, которые бы не пришли в голову любому здравому человеку, и использует их заодно. Если есть два способа что-то сделать, PSD использует оба, в разных местах. Почему, например, он решил, что именно эти блоки должны быть выравнены на четыре байта, и это выравнивание не должно быть включено в размер? PSD возводит несогласованность до уровня искусства. Тут, впрочем, оно не включено. Другие блоки в других местах либо не выравниваются, либо включают выравнивание в размер. Разумный формат остановился бы на одном. Любой из этих трёх способов подошёл бы. PSD, конечно же, использует все три, и другие.

Последняя деталь не имеет особого значения для повествования, но в данный момент я провожу немало времени, представляя занятные судьбы для людей, ответственных за этого Руба Голдберга среди файловых форматов. Попытаться извлечь данные из PSD файла — всё равно, что искать что-то на чердаке Вашего эксцентричного старого дядюшки, умершего от атаки взбесившейся пресноводной акулы на свой 58-й день рождения.

Для этого мне пришлось обратиться к ним за разрешением обратиться к ним для рассмотрения возможности отправки мне этого священного тома. Ранее я пытался заполучить свежие спецификации формата PSD. Единственное приходящее мне в голову объяснение такой сложности процесса — им чрезвычайно стыдно за создание этой мерзости. Процесс включал отправку им по факсу копий тех или иных документов, возможно, подписанных кровью. Будь это в моих силах, я бы собрал все копии спецификации в мире, и отправил их ракетой прямо на Солнце. Естественно, я не был в состоянии пройти эту процедуру, но если бы я смог, я бы распечатал все до единой странички этой спецификации, и сжёг бы их.

PSD — не мой любимый формат.

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

Способ развлечь себя

Мы знаем, насколько скучной и одинокой бывает работа программиста. Потому все мы иногда играем в КВН одного лица. Безопаснее всего это делать в комментариях, конечно, но бывают варианты.

#Christmas tree initializer toConnect = [] toRead = [ ] toWrite = [ ] primes = [ ] responses = remaining = {}

Инициализатор новогодней ёлочки

/////////////////////////////////////// this is a well commented line

Хорошо закомментированная строка

Repeat ...
Until (JesusChristsReturn) ' Not sure

Религиозные догмы под сомнением...

// if i ever see this again i'm going to start bringing guns to work

Ещё раз такое увижу — начну носить оружие на работу

//Abandon all hope ye who enter beyond this point

Оставь надежду, всяк сюда входящий

// drunk, fix later

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

Шутки шутками, а когда-то я оставлял себе похожую записку на стикере на мониторе: «Протрезвеешь — проверь классы XXX, YYY»…

catch (Exception e) { //who cares?
}

Кому какое дело?

// I don't understand how the following bit works, but it worked in the program I stole it from.

Не знаю, как работает этот кусок, но он работал в программе, откуда я его спёр.

// This code was written by a genius so don't try to understand it with
// your tiny little brain.

Этот код написан гением. Не пытайся понять его своим миниатюрным мозгом.

double penetration; // ouch

И правда, ой...

// Added because boss changed his mind : 20020111,20020501,20020820, ...
// Commented out because boss changed his mind : 20020201,20020614,20020908, ...

Добавлено, т.к. босс передумал… Закомментировано, т.к. босс передумал...

//Haleluya i can go home!

Алелуйя, я могу идти домой

А Вы расскажите, каким был Ваш самый памятный или забавный комментарий. Я пошёл домой.

Вам нравятся наши статьи? Спасибо, что остаетесь с нами. Поддержите нас оформив заказ или порекомендовав знакомым, 30% скидка для пользователей Хабра на уникальный аналог entry-level серверов, который был придуман нами для Вас: Вся правда о VPS (KVM) E5-2650 v4 (6 Cores) 10GB DDR4 240GB SSD 1Gbps от $20 или как правильно делить сервер? Хотите видеть больше интересных материалов? (доступны варианты с RAID1 и RAID10, до 24 ядер и до 40GB DDR4).

класса c применением серверов Dell R730xd Е5-2650 v4 стоимостью 9000 евро за копейки? Dell R730xd в 2 раза дешевле? Только у нас 2 х Intel Dodeca-Core Xeon E5-2650v4 128GB DDR4 6x480GB SSD 1Gbps 100 ТВ от $249 в Нидерландах и США! Читайте о том Как построить инфраструктуру корп.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть