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

По каким правилам в Dart именуются константы?

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

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

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

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

Правила именования констант в Dart

В Dart есть чёткие соглашения по именованию констант. Давайте разберёмся, какие это правила и как их применять.

Основное правило: lowerCamelCase

Константы в Dart именуются в lowerCamelCase, а не UPPER_SNAKE_CASE как в Java или C++.

// ✅ Правильно
const maxRetries = 3;
const defaultTimeout = Duration(seconds: 30);
const appVersion = '1.0.0';
const apiBaseUrl = 'https://api.example.com';

// ❌ Неправильно
const MAX_RETRIES = 3;           // Java style
const max_retries = 3;           // Python style
const MaxRetries = 3;            // PascalCase (для классов)

Правила по типам констант

1. Простые const значения (top-level)

// ✅ Правильно
const String appName = 'MyApp';
const int maxConnections = 10;
const double minVersion = 1.5;
const bool isProduction = true;

2. Константы в классах

// ✅ Правильно
class Config {
  static const String appName = 'MyApp';
  static const int maxRetries = 3;
  static const Duration timeout = Duration(seconds: 30);
}

class Colors {
  static const Color primary = Color(0xFF2196F3);
  static const Color secondary = Color(0xFFFFC107);
}

3. Константные коллекции

// ✅ Правильно
const List<String> supportedLanguages = ['en', 'ru', 'de'];
const Map<String, String> errorMessages = {
  'not_found': 'Resource not found',
  'forbidden': 'Access denied',
  'server_error': 'Internal server error',
};

Const vs Final

const — значение известно во время компиляции

const int maxItems = 100; // Компилируется, значение известно
const DateTime now = DateTime(2025, 3, 26); // Можно const

final — значение известно во время выполнения

final String apiKey = Platform.environment['API_KEY'] ?? 'default';
final int randomNumber = Random().nextInt(100);
// ✅ Правильно
const String appVersion = '1.0.0'; // Const — значение известно
final String deviceId = getDeviceId(); // Final — runtime value

// ❌ Неправильно
const String deviceId = getDeviceId(); // Ошибка! deviceId неизвестен во время компиляции

Константы для разных целей

API URLs и endpoints

// ✅ Правильно
const String apiBaseUrl = 'https://api.example.com';
const String apiUsersEndpoint = '/users';
const String apiPostsEndpoint = '/posts';

// Или в классе
class ApiEndpoints {
  static const String base = 'https://api.example.com';
  static const String users = '$base/users';
  static const String posts = '$base/posts';
  static const String comments = '$base/comments';
}

Таймауты и задержки

// ✅ Правильно
const Duration defaultTimeout = Duration(seconds: 30);
const Duration debounceDelay = Duration(milliseconds: 500);
const Duration animationDuration = Duration(milliseconds: 300);

Регулярные выражения

// ✅ Правильно
const String emailRegex = r'^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$';
const String phoneRegex = r'^\+?[0-9]{10,}$';
const String urlRegex = r'^https?://[^\s/$.?#].[^\s]*$';

Размеры и отступы (UI)

// ✅ Правильно
const double defaultPadding = 16.0;
const double defaultBorderRadius = 12.0;
const EdgeInsets defaultScreenPadding = EdgeInsets.all(16.0);

const int maxItemsPerPage = 20;
const double minSwipeDistance = 50.0;

Сообщения об ошибках

// ✅ Правильно
const String errorNetworkConnection = 'No internet connection';
const String errorUserNotFound = 'User not found';
const String errorInvalidEmail = 'Invalid email address';

// Или в классе
class ErrorMessages {
  static const String networkError = 'No internet connection';
  static const String serverError = 'Server error. Please try again.';
  static const String validationError = 'Invalid input';
}

Организация констант

Вариант 1: Отдельный файл

// lib/constants/app_constants.dart
const String appName = 'MyApp';
const String appVersion = '1.0.0';
const String apiBaseUrl = 'https://api.example.com';

// lib/constants/ui_constants.dart
const double defaultPadding = 16.0;
const double defaultBorderRadius = 12.0;

// lib/constants/error_messages.dart
const String errorNetworkConnection = 'No internet connection';
const String errorUserNotFound = 'User not found';

Вариант 2: Класс с константами

class AppConstants {
  static const String appName = 'MyApp';
  static const String appVersion = '1.0.0';
}

class ApiConstants {
  static const String baseUrl = 'https://api.example.com';
  static const Duration timeout = Duration(seconds: 30);
}

class UiConstants {
  static const double defaultPadding = 16.0;
  static const double defaultBorderRadius = 12.0;
}

Вариант 3: Enum для связанных констант

// ✅ Правильно — для enum также lowerCamelCase
enum Environment {
  development,
  staging,
  production,
}

enum UserRole {
  admin,
  moderator,
  user,
}

const Map<Environment, String> environmentUrls = {
  Environment.development: 'http://localhost:3000',
  Environment.staging: 'https://staging.example.com',
  Environment.production: 'https://api.example.com',
};

Специальные случаи

Compile-time constants (const constructor)

// ✅ Правильно
const TextStyle headingStyle = TextStyle(
  fontSize: 24.0,
  fontWeight: FontWeight.bold,
);

const EdgeInsets buttonPadding = EdgeInsets.symmetric(
  horizontal: 16.0,
  vertical: 8.0,
);

Приватные константы (по Dart conventions)

// ✅ Правильно
const String _apiKey = 'secret-key'; // Приватная константа тоже lowerCamelCase
const int _maxRetries = 3;

class MyService {
  static const String _internalUrl = 'http://internal.service';
}

Lint rules

В analysis_options.yaml есть правило для проверки:

linter:
  rules:
    - constant_identifier_names

Этот lint запрещает UPPER_SNAKE_CASE для констант и требует lowerCamelCase.

Итоговая таблица

ЧтоПравильноНеправильно
const переменнаяconst appVersion = '1.0.0'const APP_VERSION = '1.0.0'
static conststatic const int maxItems = 10static const int MAX_ITEMS = 10
Enum значенияenum Role { admin, user }enum Role { ADMIN, USER }
Приватная constconst String _apiKey = 'key'const String _API_KEY = 'key'
Класс с константамиclass Config { static const ... }class CONFIG { ... }

Практический пример проекта

// lib/constants/constants.dart
class AppConstants {
  static const String appName = 'FlutterApp';
  static const String appVersion = '1.0.0';
}

class ApiConstants {
  static const String baseUrl = 'https://api.example.com';
  static const Duration requestTimeout = Duration(seconds: 30);
  static const int maxRetries = 3;
}

class UiConstants {
  static const double defaultPadding = 16.0;
  static const double buttonHeight = 48.0;
  static const Duration animationDuration = Duration(milliseconds: 300);
}

class ErrorMessages {
  static const String networkError = 'Network error';
  static const String validationError = 'Invalid input';
}

Главное правило

В Dart — всегда lowerCamelCase для констант, независимо от их типа или значения.

По каким правилам в Dart именуются константы? | PrepBro