← Назад к вопросам

Допустимо ли отрицательное именование в Dart?

1.0 Junior🔥 61 комментариев
#Dart

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Отрицательное именование в Dart: Правила и практика

Отрицательное именование относится к использованию отрицательных префиксов (не-, dis-, un-) в названиях переменных, методов и параметров. Например: isNotNull, disableButton, unsubscribe. Это спорный вопрос в разработке, и в Dart существуют определённые рекомендации.

Официальная позиция Dart

Да, отрицательное именование допустимо синтаксически — Dart это позволит компилировать и запускать. Однако Dart Style Guide и общепринятые лучшие практики рекомендуют избегать отрицательных имён, особенно в логических флагах и методах.

// ❌ Не рекомендуется
bool isNotLoading = false;
if (isNotLoading) {
  // Двойное отрицание создаёт путаницу
}

// ✅ Рекомендуется
bool isLoading = true;
if (!isLoading) {
  // Ясно и просто
}

Почему избегать отрицательного именования?

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

// Сложно читается
if (!isNotAvailable && !isNotVisible) {
  performAction();
}

// Намного проще
if (isAvailable && isVisible) {
  performAction();
}

2. Ошибки логики Отрицательные имена часто приводят к логическим ошибкам, особенно при инверсии значений.

// Опасно:
bool isNotValid = validateData(data);
if (isNotValid) { // Интуитивно кажется, что это означает "невалидно"
  showError(); // Но на самом деле это означает "валидно"!
}

3. Затруднённое тестирование и отладка Когда вы видите в отладчике isNotNull = true, требуется дополнительное усилие для интерпретации.

Когда отрицание допустимо

В некоторых случаях отрицание может быть оправданным:

1. Для методов-предикатов, где это семантически правильно

class String {
  bool isEmpty; // ✅ Здесь отрицание естественно
  bool isNotEmpty; // ✅ И его инверсия тоже
}

2. Для приватных флагов, где контекст ясен

class Widget {
  bool _shouldNotRebuild = false; // Может быть приемлемо в контексте класса
}

3. В параметрах методов, когда это явно документировано

void setTimer({
  required Duration timeout,
  bool disableAutoStart = false, // Ясно из контекста
}) { ... }

Рекомендации

  1. Используй позитивные имена по умолчанию
// ✅ Хорошо
bool isVisible = true;
bool isEnabled = true;
bool isLoading = false;
  1. Избегай двойного отрицания
// ❌ Плохо
if (!isNotReady) { ... }

// ✅ Хорошо
if (isReady) { ... }
  1. Для инверсии используй оператор !
// Вместо отрицательного имени
if (!isLoading) {
  proceedWithNextStep();
}

Вывод

Отрицательное именование синтаксически допустимо в Dart, но стилистически не рекомендуется. Позитивные имена делают код чище, понятнее и безопаснее. Следование этому правилу — признак профессионального подхода к разработке.

Допустимо ли отрицательное именование в Dart? | PrepBro