Это первая статья из серии статей с подробным описанием ключевых моментов, которые я обнаружил, читая «Чистый код». Эта статья посвящена главе 2: Значащие имена.
Раскрытие информации. Пункты, изложенные в этой серии статей, не резюмируют содержание книги. Они просто обрисовывают в общих чертах некоторые ключевые моменты, которые я обнаружил, и которые такие программисты, как я (2–3 года опыта программирования), могут найти в качестве полезного учебного материала. Я бы посоветовал вам сначала прочитать книгу, а затем обратиться к этой серии, чтобы закрепить свои знания, как это сделал я.
С учетом сказанного, начнем…
Использование класса для раскрытия намерения
Классы можно использовать, чтобы раскрыть назначение кода и сделать его более явным.
Ситуация: допустим, вы играете в тральщика и хотите получить все ячейки, содержащие мину. Каждая ячейка на доске представлена простой IntArray
. Кроме того, мы знаем, что нулевое значение в массиве ячеек — это значение статуса, а значение статуса 4 означает, что ячейка — мина. Вот следующая функция для получения всех мин:
Теперь этот код в порядке, но в операторе if
все еще есть некоторая двусмысленность. Условие cell[0] == 4
открывает функцию для потенциальных вопросов от разработчиков: почему первое Int
в ячейке определяет состояние шахты? Почему это состояние должно быть 4, чтобы это была мина?
Проблема в том, что эта информация находится на неправильном уровне абстракции, из-за чего разработчикам сложнее понять, что происходит.
Решение. Мы можем написать простой класс с именем Cell
вместо использования IntArray
, чтобы прояснить ситуацию. Затем этот класс может включать функцию выявления намерений (называемую isMine), чтобы скрыть магические числа. Результаты приведены ниже:
С этими изменениями уже нетрудно понять, что происходит. Неоднозначность оператора if
теперь скрыта внутри класса Cell
, что упрощает понимание логики функции.