Как правильно именовать булевы (bool) свойства в Dart/Flutter?

«Как правильно именовать булевы (bool) свойства в Dart/Flutter?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Dart/Flutter для булевых свойств и переменных используются префиксы, которые делают код самодокументируемым. Основные правила:

Рекомендуемые префиксы:

// 1. is - для состояний и характеристик
bool isLoading = true;
bool isVisible = false;
bool isEnabled = true;
bool isDarkMode = false;

// 2. has - для наличия чего-либо
bool hasChildren = true;
bool hasError = false;
bool hasPermission = true;
bool hasInternetConnection = false;

// 3. can - для возможности выполнения действия
bool canEdit = true;
bool canDelete = false;
bool canUpload = true;

// 4. should - для рекомендаций или условий
bool shouldRefresh = true;
bool shouldValidate = false;
bool shouldShowDialog = true;

// 5. show - часто используется в параметрах виджетов
bool showAppBar = true;
bool showDivider = false;
bool showProgressIndicator = true;

Пример в Flutter виджете:

class CustomButton extends StatelessWidget {
  final String label;
  final bool isPrimary;
  final bool isDisabled;
  final bool showIcon;

  const CustomButton({
    required this.label,
    this.isPrimary = false,
    this.isDisabled = false,
    this.showIcon = true,
  });

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: isDisabled ? null : () {},
      style: isPrimary 
          ? ElevatedButton.styleFrom(backgroundColor: Colors.blue)
          : null,
      child: Row(
        mainAxisSize: MainAxisSize.min,
        children: [
          Text(label),
          if (showIcon) Icon(Icons.arrow_forward),
        ],
      ),
    );
  }
}

Что следует избегать:

// Плохо: отрицательные формулировки
bool isNotVisible;     // Вместо этого используйте !isVisible
bool hasNoPermission;  // Вместо этого используйте !hasPermission

// Плохо: неясные имена
bool flag = true;
bool status = false;
bool value = true;

// Плохо: глаголы без контекста
bool check = true;     // Что проверяется?
bool enable = false;   // Что включается?

Правило: Имя должно сразу давать понять, что означает true, а что false.