Чистый код

BookClearCode

Содержательные имена

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

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

// Плохой пример:
public List getThem() 
{ 
	List list1 = new ArrayList(); 
	for (int[] x : theList) 
		if (x[0] == 4) list1.add(x); 
	return list1; 
}
// Хороший пример
public List getFlaggedCells() 
{ 
	List flaggedCells = new ArrayList(); 
	for (Cell cell : gameBoard) 
		if (cell.isFlagged()) flaggedCells.add(cell); 
	return flaggedCells; 
}

Избегайте дезинформации

  • Избегать нужно ложных ассоциаций
    • hp, aix, sco относятся к Unix
  • Конкретность конструкций
    • Использовать тот же accountList не стоит, если данные не хранятся в List-конструкции (в той же Java) - лучше использовать просто accounts
  • Использовать только чёткоразличимые имена
    • XYZControllerForEfficientHandlingOfStrings и XYZControllerForEfficientStorageOfStrings - очень схожи
  • Использование строчных “O” и “L”, которые схожи с 0 (“o”) и 1 (“l”)
int a = l; 
if ( O == l ) 
	a = O1; 
else l = 01;

Используйте осмысленные различия

Используйте удобопроизносимые имена

Выбирайте имена, удобные для поиска

Избегайте схем кодирования имен

Венгерская запись

Префиксы членов классов

Интерфейсы и реализации

Избегайте мысленных преобразований

Имена классов

Имена методов

Избегайте остроумия

Выберите одно слово для каждой концепции

Воздержитесь от каламбуров

Используйте имена из пространства решения

Используйте имена из пространства задачи

Функции

Комментарии

Форматирование

Объекты и структуры данных

Обработка ошибок

Границы

Модульные тесты

Классы

Системы

Форматирование архитектуры

Многопоточность

Последовательное очищение

Внутреннее строение JUnit

Переработка SerialDate

Запахи и эвристические правила