Чистый код. Создание, анализ и рефакторинг (Мартин) - страница 59


Листинг 4.6. wc.java

>public class wc {

>  public static void main(String[] args) {

>    BufferedReader in = new BufferedReader(new InputStreamReader(System.in));

>    String line;

>    int lineCount = 0;

>    int charCount = 0;

>    int wordCount = 0;

>    try {

>      while ((line = in.readLine()) != null) {

>        lineCount++;

>        charCount += line.length();

>        String words[] = line.split("\\W");

>        wordCount += words.length;

>      } //while

>      System.out.println("wordCount = " + wordCount);

>      System.out.println("lineCount = " + lineCount);

>      System.out.println("charCount = " + charCount);

>    } // try

>    catch (IOException e) {

>      System.err.println("Error:" + e.getMessage());

>    } //catch

>  } //main

>}

Ссылки на авторов

>/* Добавлено Риком */

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

И снова лучшим источником подобной информации является система контроля исходного кода.

Закомментированный код

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

>InputStreamResponse response = new InputStreamResponse();

>response.setBody(formatter.getResultStream(), formatter.getByteCount());

>// InputStream resultsStream = formatter.getResultStream();

>// StreamReader reader = new StreamReader(resultsStream);

>// response.setContent(reader.read(formatter.getByteCount()));

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

Следующий код взят из общих модулей Apache:

>this.bytePos = writeBytes(pngIdBytes, 0);

>//hdrPos = bytePos;

>writeHeader();

>writeResolution();

>//dataPos = bytePos;

>if (writeImageData()) {

>  writeEnd();

>  this.pngBytes = resizeByteArray(this.pngBytes, this.maxPos);

>}

>else {

>    this.pngBytes = null;

>}

>return this.pngBytes;

Почему эти две строки кода закомментированы? Они важны? Их оставили как напоминание о будущих изменениях? Или это «хлам», который кто-то закомментировал сто лет назад и не удосужился убрать из программы?

В 60-е годы закомментированный код мог быть действительно полезен. Но с тех пор у нас давно появились хорошие системы контроля исходного кода. Эти системы запоминают изменения в коде за нас. Нам уже не нужно закрывать их комментариями. Просто удалите ненужный код. Он никуда не исчезнет. Честное слово.