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


15

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

Опять же, вы можете написать такой же плохой код, как и раньше, потому что вам все равно. Но что ты думаешь?


44
Как вы думаете, есть ли разница между языком, который не позволяет оставлять комментарии, и разработчиками, которые их не используют?
Джереми Хейлер

21
Идея, что запрещение комментариев заставит разработчиков писать больше самодокументируемого кода, абсурдна.
Адам Кроссленд

2
@Jeff, это особенность IDE / редактора, а не особенность языка, IMHO
jk.

4
Я не уверен, что можно заставить разработчиков делать что-либо
JK.

2
@Adam @ jk01: у них даже есть язык, который заставляет разработчиков делать отступы в коде особым образом ;-)
Joris Meys

Ответы:


61

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

string aComment = "This is a kludge.";

7
Мне нравится, как этот «комментарий» имеет несколько слоев
Логан Капальдо

29
Дополнительным преимуществом является то, что он будет идти в двоичном формате, так что вы также можете увидеть комментарии там! Делает обратное проектирование намного проще.

1
Ты прав. Вместо этого мы должны использовать операторы #ifdef.
Джеймс

9
Это, пожалуй, лучший пример «программирования на языке» в отличие от «программирования на языке» , который я когда - либо видел. =)
Габлин

2
В MOO есть поддержка комментариев, но все программы анализируются для хранения и не анализируются для отображения, поэтому комментарии теряются. Фраза для постоянных комментариев - строковые литералы аля"this is a comment";
Бен Джексон

44

Я не думаю, что это так просто:

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


13
+1 за комментарии, представляющие собой нечто большее, чем простое повествование о том, что делает код. Даже самый лучший «самодокументированный код» должен иметь комментарии для разработки многих вещей. Часто код будет иметь внешние зависимости, входные предположения, предостережения, улучшаемые области, известные уязвимости и множество других вещей, которые никогда не признаются иначе. Комментарии имеют много применений.
Адам Кроссленд

3
Точно. Как вы регистрируете «намерение» или «почему» или «доказательство правильности» без комментариев?
С.Лотт

2
Согласитесь, комментарии должны быть «почему», а не «что». Любой, кто не может получить что-то из кода, не должен его читать.
Мэтью Читал

3
@ Матфея: Честно говоря, вы можете легко написать код, который не легко расшифровать. Но да, читаемый код - лучший источник для «что».

14

Предположим, вы идеальный программист (а вы нет, но давайте просто предположим) ...

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


11

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

Ничто не заменит хорошие практики развития.


6

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

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


1
Я сейчас читаю какой-то код с этим: argument = 3.0; aa = sqrt( argument ); bb = f( aa ); Вздох.
С.Лотт

Кобол - это особый язык. Но "." Оператор злой !!! Это как бы нарушает синтаксис предложения.
Лоик Фор-Лакруа

3

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

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

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

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

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


2

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


Предполагая, что количество методов не ограничено, почему бы вам просто не преобразовать свои блоки кода в применимые методы, а затем дать им описательные имена (или больше комментариев, в вашем случае)? В большинстве «хорошего» кода, который я видел, методы редко бывают длиннее примерно 10 строк, и совершенно очевидно, что они делают.
Скотт Уитлок

@ Скотт - я твердый сторонник того, что код должен самодокументироваться и что следует избегать встроенных комментариев, но явное запрещение их является излишним.
Джейсон Бейкер

@ Джейсон - я согласен с вами, но я не согласен с идеей, что без встроенных комментариев это «на порядок хуже».
Скотт Уитлок

@ Скотт: Вы получаете много комментариев, таких как «причина, по которой мы проводим странную проверку на ноль в строке 37, ...», а затем вам приходится пролистывать глаза между кодом и комментариями. Было бы намного проще просто
оставить

2

Я избегаю комментирования кода, и он работает.

Я избегаю всех комментариев в коде (inline или stream) в пользу docblock + значимых переменных + спартанского программирования , и это работает.

И да, я знаю, что docblocks - это технически комментарии, тем не менее, они фактически дополняют код, а не навязчивы и «стандартизированы» ... все, что не является общим комментарием.

То, что я думаю, может работать как замена комментариев: стандартизированный язык docblock / синтаксис / идиома, что-то вроде аннотаций в java.


«стандартизированный язык докблока / синтаксис / идиома»: не подойдет ли doxygenэто? ru.wikipedia.org/wiki/Doxygen
sleske

Doxygen - это инструмент документации, такой же, как phpdocumentor и тот, который генерирует документацию Java из javadoc (homonim?). Я имею в виду, что язык / синтаксис / идиомы был частью самого языка программирования, а не комментарием, который нужно анализировать для тегов / свойств.
dukeofgaming

4
Таким образом, вы избегаете комментариев, называя их чем-то другим.
Nate CK

2

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

Я уверен, что большинство из нас время от времени делают что-то подобное:

foreach ( myObject obj in SomeList )
 {
    Debug.Writeline( obj.Name );
//  for some reason this isn't working
//  obj.SetArielPotency( setting );
//  obj.DoSomeProcess();       
 }

Насколько раздражающим было бы, если бы вы не могли закомментировать несколько строк кода, чтобы выяснить, откуда эта ошибка?

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


1

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


3
Если вы можете суммировать его в одну строку, вы можете назвать функцию или метод достаточно наглядно, чтобы объяснить, что он делает.
Скотт Уитлок

1

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

Я думаю, что реальный вопрос заключается в следующем: «Можно ли разработать новый язык программирования, который не нуждается в комментариях?» Это должно быть довольно высокий уровень с большой абстракцией. Каждое утверждение и функция должны быть доступны для чтения через синтаксис языка.


1
Грамотное программирование предлагает язык, который не нуждается в комментариях. Вы пишете свой документ, который включает в себя все необходимые объяснения, поддержку, доказательства, намерения, компромиссы, ключи и т. Д., А также код. Поскольку код не предназначен для самостоятельной работы, он работает хорошо.
С.Лотт

@DisgrunteldGoat: забудь об этом. Вы должны начать с определенного языка, а я говорю только на 5. Все остальные языки я бы потерял так же, как и на голландском.
Йорис Мейс

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

1

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

Интригует тот python, который просто имеет приватное соглашение (_-префикс), не прилагает никаких усилий, чтобы контролировать это, и много хорошего кода все еще пишется.

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


1

Я угадаю: вероятно, нет. Почему? Потому что вам придется кодировать «почему» как формализм в языке, а потому что «почему», независимо от того, кодируется ли он на языке или на языке комментариев, программисты все равно не используют.


1

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

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

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


0

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

(if (= x y)
    x
    y)

... в это:

(if (= x y)
    :then x
    :else y)

Если вам абсолютно необходимо, вы можете объединить несколько комментариев в одно слово, чтобы сформировать встроенный комментарий:

(if x :Remember, :x :could :be :nil!
    ...)

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


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

0

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

Причины, по которым это хорошая идея: - Нет

Причины, по которым это плохая идея: - Есть намного больше жестоких программистов, чем хороших, но не очень хороших программистов - Почти всегда должны быть некоторые комментарии для странных ошибок, резюме и т. Д. - Даже если вы отказываетесь от комментариев, вы, вероятно, будете использовать комментарии как этап на пути: добавьте комментарий, когда вы пишете что-то, а затем вернитесь и выполните рефакторинг. Но вы не всегда можете сделать это сразу, потому что вы все еще учитесь. - Это побудит людей работать вокруг него - Кто бы это использовал? Люди, которые пишут нечитаемый код и хотят оправдание (плохое), и люди, которые уже очарованы идеей (которые могут просто «не писать комментарии» для начала). Если это то, что вы хотите, просто напишите стандарт кодирования, показывающий, как вы хотите, чтобы люди это делали.

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.