Это первая статья из серии статей с подробным описанием ключевых моментов, которые я обнаружил, читая «Чистый код». Эта статья посвящена главе 2: Значащие имена.

Раскрытие информации. Пункты, изложенные в этой серии статей, не резюмируют содержание книги. Они просто обрисовывают в общих чертах некоторые ключевые моменты, которые я обнаружил, и которые такие программисты, как я (2–3 года опыта программирования), могут найти в качестве полезного учебного материала. Я бы посоветовал вам сначала прочитать книгу, а затем обратиться к этой серии, чтобы закрепить свои знания, как это сделал я.

С учетом сказанного, начнем…

Использование класса для раскрытия намерения

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

Ситуация: допустим, вы играете в тральщика и хотите получить все ячейки, содержащие мину. Каждая ячейка на доске представлена ​​простой IntArray. Кроме того, мы знаем, что нулевое значение в массиве ячеек — это значение статуса, а значение статуса 4 означает, что ячейка — мина. Вот следующая функция для получения всех мин:

Теперь этот код в порядке, но в операторе if все еще есть некоторая двусмысленность. Условие cell[0] == 4 открывает функцию для потенциальных вопросов от разработчиков: почему первое Int в ячейке определяет состояние шахты? Почему это состояние должно быть 4, чтобы это была мина?

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

Решение. Мы можем написать простой класс с именем Cell вместо использования IntArray, чтобы прояснить ситуацию. Затем этот класс может включать функцию выявления намерений (называемую isMine), чтобы скрыть магические числа. Результаты приведены ниже:

С этими изменениями уже нетрудно понять, что происходит. Неоднозначность оператора if теперь скрыта внутри класса Cell, что упрощает понимание логики функции.