Нужны ли комментарии для языка программирования?

StackOverflow https://stackoverflow.com/questions/390797

  •  23-08-2019
  •  | 
  •  

Вопрос

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

НАСТОЯЩИЙ Клингонский Воин не комментирует свой кодекс!

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

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

Удаление возможности комментирования из языка программирования означало, что я ИМЕТЬ написать грамотный код, без исключений.

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

Есть ли действительно веские аргументы в пользу того, чтобы не удалять комментарии с языка?

Редактировать:Требуются ли хорошие примеры комментариев?


P.S.> Язык моего хобби, описанный выше, в любом случае отчасти глуп, поэтому не зацикливайтесь слишком сильно на моей реализации, а не на концепции комментариев, необходимой в целом.

Это было полезно?

Решение

Я не уверен, что согласен с «Имею» в утверждении «Удаление возможности комментировать из языка программирования означало, что я ДОЛЖЕН писать грамотный код, без исключений», поскольку не весь код документирован.Я предполагаю, что большинство людей напишут нечитаемый код.

Более того, лично я не верю в реальность самообъяснительной программы или API в практическом мире.

Мой опыт ручного анализа документации целых API для моей диссертации показывает, что слишком часто вам придется нести больше информации, чем вы можете передать в одной только подписи.Если вы исключите комментарии интерфейса из своего языка, каковы альтернативы?Никакая документация не вариант.Внешнюю документацию с меньшей вероятностью будут читать.

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

Другие советы

Комментируйте не ЧТО вы делаете, а ПОЧЕМУ вы это делаете.

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

Ух, невозможность быстро закомментировать строку (или строки) во время тестирования меня раздражает, особенно при написании сценариев.

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

Места, где комментарии полезны:

  • Оставление номера заявки рядом с исправлением, чтобы будущие программисты могли понять бизнес-требования.
  • Объяснение особенно сложного взлома
  • Комментарий к бизнес-логике фрагмента кода
  • Краткие описания в документации API, чтобы третья сторона могла использовать ваш API.

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

У вашего кода есть две разные аудитории:

  • Компилятор
  • Люди, подобные нам

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

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

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

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

HelperFunctionDoesNothing("This is a comment! Blah Blah Blah...");

Мне любопытно.Как помешать кому-либо объявить статическую строку, содержащую комментарий, а затем игнорировать переменную для остальной части функции/метода/процедуры/битвы/что-то еще?

var useless_comment = "Can we destroy our enemies?"
if (phasers on full) return Qapla'

Языки нуждаются в комментариях.По крайней мере 95% комментариев можно заменить более понятным кодом, но все еще остаются предположения, которые необходимо документировать, и вам абсолютно необходимо документировать, если есть какая-то внешняя проблема, над решением которой вы работаете.

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

Хотя весь исходный код по умолчанию защищен авторским правом.Часто приятно:

  1. напомните человеку, читающему исходный код, что он защищен авторским правом

  2. расскажите людям, каковы условия лицензирования этого файла исходного кода

  3. скажите им, рассматривают ли они защищенную коммерческую тайну или нет

К сожалению, без комментариев это сделать сложно.

Я единственный, кто закомментировал пару строк? код для ряда целей?

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

Однако на самом деле я удивлен и разочарован, узнав, что даже мои любимые эзотерические языки программирования поддерживают комментарии: Мозговой трах и Пробелы.Эти языки созданы для того, чтобы их было трудно читать, поэтому кажется, что они не должны поддерживать комментарии.(В отличие от моего другого любимого эзотерического языка: LOLкод, который предназначен для самодокументирования, на языке лолкотов)

Я бы не согласился с другими ответчиками по этому поводу:Я говорю: будьте верны своему видению клингонского языка программирования и не поддерживайте комментарии!

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

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

Разве в грамотном программировании не столько же комментариев, сколько и кода?Конечно, многое из того, что я видел в грамотном программировании, имеет столько же объяснений, сколько и код, если не больше комментариев.

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

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

Кроме того, люди найдут способы добавлять комментарии, если им нужно, перехватывая строки и неправильно используя имена переменных (которые ничего не делают, кроме как заменяют комментарии).Ты читал Гёдель Эшер Бах?

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

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

По моему опыту, новые программисты склонны больше комментировать, и по мере того, как они приобретают опыт, их код становится самодокументируемым и кратким.В целом комментарии должны быть о том, ПОЧЕМУ, а не КАК или ЧТО.

НЕТ – не существует ни одного языка программирования, требующего комментариев.

Язык предназначен для компьютера.Комментарии предназначены для людей.Вы можете написать программу с 0% комментариев.Он будет выполнен, правильно или неправильно.Невозможно написать программу со 100% комментариями.Он либо не скомпилируется, либо нет main() и т. д.- или, для языков сценариев, ничего не делать.

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

Хотя я согласен с ответами Ури, я тоже высказался без комментариев.(ихбинс.) Язык должен был быть максимально простым, но при этом иметь возможность четко выражать собственный компилятор;поскольку вы можете сделать это без комментариев, их выбросили.

Я постоянно работаю над версией, которая поддерживает комментарии, но немного по-другому:Грамотный стиль программирования с кодом, вложенным в текст, а не комментариями, встроенными в код.Позже он также может получить примеры/тестовые примеры в качестве первоклассной функции языка.

Удачи в клингонском взломе.:-)

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

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

Я думаю, что комментарии необходимы во многих ситуациях.

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

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

Можем ли мы жить без комментариев к коду?Да, но это не облегчит жизнь.

Нужны ли комментарии для языка программирования?

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

Полезно ли в языке программирования предоставлять конструкцию комментирования?

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

Комментарии полезны, потому что они убеждают человека, читающего ваш код (возможно, «будущего вас»), что вы подумали о его благополучии.

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

if (false) {
    print("This is a comment. Chew on that, Klingons!")
}

Я думаю, может возникнуть вопрос, насколько самодостаточным будет язык без комментариев?Если, например, она компилируется в библиотеки DLL, которые используются в другом коде, то как можно узнать что-либо, кроме сигнатуры функции, с точки зрения того, что она требует, изменяет и возвращает?Я бы не хотел, чтобы имена функций состояли из десятков символов, чтобы попытаться выразить то, что можно очень легко сделать с помощью комментариев над функцией, которые можно использовать в качестве документации, например, в браузере объектов в Visual Studio.

Конечно!!

Основная причина — начинающие разработчики.Не все умеют писать грамотный код.На самом деле миллионы людей не получают исключения NullPointerException, когда видят его.

Мы все когда-то начинаем.

Но если вы ориентируетесь только на «экспертных» разработчиков, зачем вообще беспокоиться о языке.Вы должны быть использование бабочек !!!Вот что используют настоящие разработчики!

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

:)

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

Однажды я написал приложение на VB (глупую настольную игру, вдохновленную «Монополией») без любой Комментарии.Но я сделал это только для того, чтобы разозлить своего учителя, который сказал, что комментарии касаются «всего, что мы нашли». соответствующий, чтобы мы могли вспомнить это позже».

Идеальный код не требует комментариев.Оно должно быть простым и понятным новичкам.

Любой код нуждается в комментариях, я стараюсь в 1-2 строках объяснить причину и работу каждой функции, которую пишу.

Код, который объясняет сам себя, существует только в идеальном мире, всегда есть какой-нибудь странный хак или причина сделать что-то быстро и грязно вместо правильного пути.Лучше всего не забывать комментировать, ПОЧЕМУ код делает то, что он делает, хороший код объясняет, ЧТО он делает в 99% случаев.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top