Можно ли написать хороший и понятный код без каких-либо комментариев? - PullRequest
15 голосов
/ 24 апреля 2009

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

Ответы [ 20 ]

15 голосов
/ 24 апреля 2009

Чтение Код завершен, 2-е издание обложка для обложки. Возможно дважды.

Чтобы дать некоторые особенности:

  • Создание кода для чтения
  • Устранение повторения кода
  • Проектирование / архитектура, прежде чем писать код
14 голосов
/ 24 апреля 2009

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

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

7 голосов
/ 24 апреля 2009

Мне нравится «гуманизировать» код, поэтому вместо:

if (starColour.red > 200 && starColour.blue > 200 && starColour.green > 200){
   doSomething();
}

Я сделаю это:

bool starIsBright;
starIsBright = (starColour.red > 200 && starColour.blue > 200 && starColour.green > 200);

if(starIsBright){
   doSomething();
}
6 голосов
/ 29 апреля 2009

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

if (starColour.red > 200 && starColour.blue > 200 && starColour.green > 200){
   doSomething();
}

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

// we do this according to the requirement #xxxx blah-blah..
if (starColour.red > 200 && starColour.blue > 200 && starColour.green > 200){
   doSomething();
}
6 голосов
/ 29 апреля 2009

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

3 голосов
/ 29 апреля 2009

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

То, что функция очень четко объясняет, что она делает, само по себе не говорит, почему она делает то, что делает.

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

3 голосов
/ 24 апреля 2009

Если вы действительно хотите, то вам нужно быть очень подробным в именах переменных и методов.

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

2 голосов
/ 24 апреля 2009

Чистый код Роберта С. Мартина содержит все необходимое для написания чистого, понятного кода.

2 голосов
/ 24 апреля 2009

Я думаю, что концепция Fluent Interfaces действительно хороший пример этого.

var bob = DB.GetCustomers (). FromCountry ("USA"). WithName ("Bob")

1 голос
/ 29 апреля 2009

Я думаю, что комментарии должны выражать почему, возможно что, но как можно больше код должен определять как (поведение).

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...