Перейти к содержанию

Как писать осмысленные имена переменных?

Большинство людей, приступая к программированию, используют имена переменных из одной или двух букв, такие как A, v, d, mp и т.д. Большинство людей используют общие имена переменных, такие как flag, value, map, arr и т.д. Возможно, эти имена переменных легко написать, но это затрудняет чтение кода и отнимает больше времени на отладку.

Следуйте этим правилам для создания значимых переменных, функций и классов:

  • Используйте имена, раскрывающие намерения
  • Название функционирует как глаголы
  • Называйте классы существительными
  • Используйте значимое различие
  • Используйте произносимые имена
  • Используйте названия с возможностью поиска
  • Избегайте кодировок

Используйте имена, раскрывающие намерения

Названия переменной, функции, класса и т.д. должно быть достаточно, чтобы понять ее назначение. Не обязательно читать весь код, чтобы выяснить, что делает функция или что представляет класс, или понять, почему существует переменная.

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

Примеры

Плохой пример

//This is bad
int d;
String[] arr;
boolean flag;
//This is bad
int getAnswer(int a, int b) {

}

Хороший пример

//This is good
int courseDurationInDays;
String[] chapterNames;
boolean isCellVisited;
//This is good
int getSum(int firstNum, int secondNum) {

}

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

Название функционирует как глаголы

Названия функций должны быть глаголами или словосочетаниями, объясняющими, что делает функция. Средства получения (Accessors) и установки (Mutators) должны начинаться с get/set.

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

Принцип Уорда: “Вы знаете, что работаете над чистым кодом, когда каждая функция оказывается в значительной степени такой, как вы ожидали”.

Будьте последовательны в именовании функций и используйте одно и то же соглашение.

Называйте классы существительными

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

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

Когда существуют две переменные / функции / классы с похожими именами, убедитесь, что между их именами есть значимое различие.

Серия номеров

Присвоение имен числовым рядам - довольно неудачный способ присвоения имен переменным, поскольку трудно различать переменные.

Пример

int[] arr1;
int[] arr2;

Неоднозначно определяющие слова

Такие слова, как Data, Value, Info, Variable, Table ,String, Object,,, и т.д., которые используются в качестве суффикса, не дают никакого значимого различия. Эти слова излишни, и их следует избегать.

Примеры

String status;
String statusValue;

class Product {
}

class ProductInfo {
}

getDistinctValue(int[] arr) {
}

getDistinctValues(int[] arr) {
}

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

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

Плохие примеры

Date modDateYYMMDD;

Хорошие примеры

Date modificationTimestamp;

Используйте названия с возможностью поиска

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

Избегайте магических чисел

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

Плохой пример

ParkingLot() {
    int[] parkingSpots[100];
}

void printParkingSpots() {
    for (int i = 0; i < 100; i++) {
        System.out.println(parkingSpots[i]);
    }
}

Хороший пример

final int NUMBER_OF_PARKING_SPOTS = 100;

ParkingLot() {
    int[] parkingSpots[NUMBER_OF_PARKING_SPOTS];
}

void printParkingSpots() {
    for (int i = 0; i < NUMBER_OF_PARKING_SPOTS; i++) {
        System.out.println(parkingSpots[i]);
    }
}

Избегайте коротких названий

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

Избегайте кодировок

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

Плохие примеры

//String suffix ties the variable to the data type that makes it difficult to be changed later.
String locationString;

//The prefix I should be avoided for Interfaces
interface IEmployee {
}

Список литературы: Чистый код: руководство по разработке гибкого программного обеспечения Роберта К. Мартина (дяди Боба)