Магия, драконы и Мистер Компилятор — забавные комментарии в коде
Комментируем комментарии программистов :)


Анастасия Телесницкая для Skillbox
В прошлых выпусках мы постигали юмор разработчиков — смеялись и плакали вместе с ними. Кажется, даже выяснили, что программисты — вовсе не зануды или ботаники.
Сегодня подберёмся к ним ещё ближе: залезем в святая святых — в код. В алгоритмах разбираться не будем, а просто почитаем комментарии — пояснения к коду, которые разработчики пишут для себя и коллег.
Комментарии во многих языках программирования оформляются похоже. Однострочные следуют после символов //, а многострочные (блочные) заключаются между /* и */ — так в Java, C#, Kotlin и JavaScript.
Также применяются решётка # (например, в Python или Ruby) и -- (два дефиса подряд) — так в SQL.
Мы для единообразия везде будем использовать пару слешей //.
Белая и чёрная магия

Жизнь программистов, похоже, полна волшебства и магических ритуалов.
Кто-то практикует примитивные бытовые заговоры:
// Работай, пожалуйста.
Другие — знакомы с магией истинной:
// Магия. Не трогать.
А в самых глубинах кода водится сильная и страшная магия:
// Это чёрная магия.
С такими заклинаниями шутки плохи, предупреждает следующий комментарий:
// Из какой-то ветки stackoverflow.
// Не играй с магией, иногда она кусается.
Stack Overflow — это интернет-форум, где разработчики пишут о проблемах, которые не могут решить сами. А в ответ получают код, который похож на настоящие заклинания :)
Иногда подобные колдунства настолько непонятны, что пугают даже того, кто их в код принёс:
// Не уверен, что нам это нужно, но так страшно удалять.
Преступление и извинение

Временами авторам бывает настолько стыдно за свои творения, что они сами перед собой извиняются:
// Дорогой будущий я. Прости меня, пожалуйста.
// Я даже выразить не могу, как мне жаль.
Наверное, это хорошо, когда свой же код кажется плохим через какое-то время, — ведь это признак развития. Гораздо хуже, когда никакого развития нет. В таком случае можно свалить всё на кота, как сделал автор следующего комментария:
// Этот код работал, пока мой кот не решил
// прогуляться по клавиатуре.
…или пожаловаться на жёсткие сроки:
// Да, это плохой код, но сейчас четвёртый час ночи,
// а мне надо заставить его заработать.
…или честно описать, как обстоят дела:
// я сам не понял, что сделал
Можно и вовсе снять с себя ответственность и переложить её на коллег или работодателя:
// Я был против, но они заставили меня написать это.
Код, который просто и быстро устраняет последствия какой-то проблемы (но не её причину), русскоговорящие программисты называют ёмким словом «костыль». Или шифруют вот так:
// Устройство для поддержания веса тела пациента
// при стоянии и ходьбе (костыль).
Высокомерие и угрозы
Работа программистов, казалось бы, тихая и спокойная: сидят себе за компьютером и по клавиатуре стучат. Но, кажется, тишь да гладь у них далеко не всегда.
Порой в комментариях сквозит пассивная агрессия с лёгким налётом самооправданий:
// писать это было сложно
// так что и читать должно быть не проще
Иногда от коллег высокомерно отмахиваются:
// для тебя — никаких комментариев
А тут и до прямых угроз недалеко:
// Джон, если ты ещё раз удалишь этот фрагмент кода,
// честное слово, я тебя прибью!
// Это не «что-то странное»!
// Это АВТОМАТИЧЕСКАЯ ПРОВЕРКА!
И даже до очень-очень серьёзных угроз:
// Если я ещё раз это увижу, начну ходить на работу с оружием.
Я, снова я и Мистер Компилятор
Думаете, разговаривать с коллегами и самим собой в комментах странно? Общаться с компилятором — вот что на самом деле странно:
// Мистер Компилятор, не читайте это, пожалуйста.
И ведь знают прекрасно, что компилятор и так не видит комментарии. Или, по крайней мере, подозревают:
// Иногда мне кажется, что компилятор игнорирует все мои комментарии.
Компилятору комментарии действительно не нужны. Их пишут люди — для людей. Причём есть мнение, что лучше бы не писали: хороший код должен быть понятен, а потому не нуждается в комментировании.
Как говорил Мартин Фаулер, когда вам в следующий раз захочется написать комментарий, попробуйте сперва отрефакторить (переписать) код так, чтобы комментарий стал не нужен.
А если комментарии всё же есть — не доверяйте им. Зачастую они нагло врут:
// Всегда возвращает true
public boolean isAvailable() {
return false;
}
На самом деле этот метод всегда возвращает логическое значение false («ложь»), хотя комментарий утверждает обратное.
А как вам такое получение случайного числа:
// Этот метод, очевидно, возвращает случайное число,
// выбранное счастливым кубиком
int getRandom() {
return 4;
}
Ирония в том, что этот метод всегда возвращает число 4. Возможно, оно и правда счастливое, но от метода с таким названием ждёшь, что он будет возвращать разные случайные числа, а не каждый раз одно и то же.
Драконы и свинка безопасности
Если где-то есть место магии, то и до драконов недалеко:
// .==. .==.
// //`^\\ //^`\\
// // ^ ^\(\__/)/^ ^^\\
// //^ ^^ ^/6 6\ ^^ ^ \\
// //^ ^^ ^/( .. )\^ ^ ^ \\
// // ^^ ^/\| v""v |/\^ ^ ^\\
// // ^^/\/ / `~~` \ \/\^ ^\\
// -----------------------------
// здесь обитают драконы
Будьте осторожнее, копаясь в комментариях: вместо драконов вам могут подложить свинью. Но эта свинка окажется полезной. Называют её Safety Pig. Она предупреждает об особенно забористом и сложном коде:
// Внимание! Код ниже может довести до слёз.
// Да хранит вас священная свинка
// _
// _._ _..._ .-', _.._(`))
//'-. ` ' /-._.-' ',/
// ) \ '.
// / _ _ | \
// | a a / |
// \ .-. ;
// '-('' ).-' ,' ;
// '-; | .'
// \ \ /
// | 7 .__ _.-\ \
// | | | ``/ /` /
// /,_| | /,_/ /
// /,_/ '`-'
Возможно, образ свиньи выбран не случайно. В компьютерной безопасности есть термин «пляшущие свинки» — он описывает отношение пользователей к этой самой безопасности. В частности, к предупреждениям о потенциально опасном переходе — например, по ссылке, где обещают показать пляшущих свиней.
Как говорили Гари Мак-Гроу и Эдвард Фельтен, если пользователям дать выбор между пляшущими свиньями и безопасностью, они всегда выберут свиней.
И «Оскар» достаётся…

Комментарии — это целая фантазийная Вселенная, в которой есть место магии и драконам, драмам и сожалениям. Про неё можно написать не статью, а целую книгу или снять фильм. Может, он даже удостоился бы «Оскара» — хотя бы за эту речь:
// Я посвящаю этот код, да и вообще всю мою работу, моей жене Дарлин.
// Ведь именно ей придётся содержать меня, троих наших детей и собаку,
// когда мои творения войдут в релиз.
Что дальше?
Если хотите ещё больше узнать о языке айтишников, почитайте об истории словечек из цифрового мира: «жучки»-баги и «печеньки»-куки, «заплатки»-патчи и прочие «облака» — про это вот всё. А если думаете, что и так прекрасно переводите с программерского на русский, — пройдите наш тест и подтвердите это.