← Назад к вопросам
По каким правилам в Dart именуются классы?
1.0 Junior🔥 131 комментариев
#Dart#ООП и паттерны
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Правила именования классов в Dart
Правильное именование — это важная часть чистого кода. Dart следует определённым соглашениям для именования классов.
1. Основное правило: UpperCamelCase (PascalCase)
Классы должны начинаться с БОЛЬШОЙ буквы и использовать camelCase:
// ✅ Правильно
class User {}
class UserProfile {}
class ApiClient {}
class HttpRequest {}
class FileManager {}
// ❌ Неправильно
class user {} // Маленькая буква
class User_Profile {} // Underscore (это для константных переменных)
class userProfile {} // Маленькая буква в начале
class USER {} // Все заглавные (это для констант)
class u {} // Слишком короткое имя
2. Имена должны быть описательными
// ✅ Правильно: понятные имена
class UserRepository {}
class PaymentService {}
class DatabaseConnection {}
class ImageProcessor {}
class NotificationManager {}
// ❌ Неправильно: слишком короткие или неинформативные
class Usr {}
class Svc {}
class Proc {}
class Utils {} // Слишком общее
class MyClass {} // Не описывает назначение
3. Существительные для имён классов
Классы обычно именуют существительными, не глаголами:
// ✅ Правильно: существительные
class Button {} // Widget, можно нажать
class User {} // Сущность, которую мы моделируем
class Logger {} // Сервис логирования
class Timer {} // Таймер
class Request {} // Объект запроса
class Response {} // Объект ответа
// ❌ Неправильно: глаголы в названии
class DoSomething {} // Глагол + объект
class ProcessData {} // Хотя Process может быть сущностью...
class HandleClick {} // Глагол + объект
class FetchUser {} // Глагол
4. Абстрактные классы
// ✅ Обычно используется префикс Abstract
abstract class Animal {}
abstract class Repository {}
abstract class Service {}
// Или просто как обычное имя
abstract class Database {}
// ❌ Не используйте префиксы I для интерфейсов (как в Java)
// ❌ interface IUserRepository {} // В Dart это не требуется
5. Mixins
// ✅ Правильно: часто используют суффиксы
mixin Loggable {} // Может логировать
mixin Comparable {} // Может сравниваться
mixin Serializable {} // Может сериализоваться
mixin ChangeNotifier {} // Может уведомлять об изменениях
// Или обычные имена
mixin AudioMixin {}
mixin CacheMixin {}
mixin ValidationMixin {}
6. Перечисления (Enum)
// ✅ Правильно
enum Status { pending, active, completed }
enum Color { red, green, blue }
enum UserRole { admin, moderator, user }
enum HttpMethod { get, post, put, delete }
// Значения enum пишутся с маленькой буквы
enum Season {
spring, // ✅
Summer, // ❌ Неправильно: маленькая буква для значений
AUTUMN, // ❌ Неправильно: все заглавные
winter, // ✅
}
7. Exception классы
// ✅ Правильно: суффикс Exception
class ValidationException implements Exception {}
class NetworkException implements Exception {}
class DatabaseException implements Exception {}
class TimeoutException implements Exception {}
// ❌ Неправильно
class ValidationError {} // Лучше Exception
class Error_Validation {} // Underscore
8. Widget классы в Flutter
// ✅ Правильно
class UserProfile extends StatefulWidget {}
class LoadingIndicator extends StatelessWidget {}
class CustomAppBar extends AppBar {}
class ProfileCard extends StatelessWidget {}
class ErrorMessage extends StatelessWidget {}
// ❌ Неправильно
class user_profile extends StatefulWidget {} // Lowercase и underscore
class LoadingIndicatorWidget {} // Лишнее слово Widget
class MyCustomWidget {} // My + слишком неинформативно
class WButtonWidget {} // W + Widget + Widget
9. Вложенные классы
// ✅ Правильно
class User {
class Preferences {}
class Settings {}
}
class ApiClient {
class Request {}
class Response {}
}
// ❌ Неправильно
class User {
class UserPreferences {} // Повторение User
class user_settings {} // Маленькая буква и underscore
}
10. Типовые назначения класса в имени
// ✅ Service классы
class UserService {} // Бизнес-логика
class PaymentService {} // Работа с платежами
class NotificationService {}
// ✅ Repository классы
class UserRepository {} // Доступ к данным
class PostRepository {}
class CommentRepository {}
// ✅ Provider классы (для state management)
class UserProvider {} // Riverpod/Provider
class ThemeProvider {}
class LocalizationProvider {}
// ✅ Model/Entity классы
class User {}
class Product {}
class Order {}
// ✅ DTO (Data Transfer Object) классы
class UserDTO {}
class CreateUserRequest {}
class UserResponse {}
// ✅ Controller классы
class UserController {}
class AuthController {}
// ✅ Utility классы (если нужны)
class DateUtils {} // Утилиты для дат
class StringUtils {} // Утилиты для строк
class ValidationUtils {}
11. Практические примеры правильного именования
// ✅ Хорошо структурированное приложение
// Models
class User {}
class Post {}
class Comment {}
class Tag {}
// Services
class UserService {
Future<User> getUser(int id) async {}
Future<void> updateUser(User user) async {}
}
class PostService {}
class NotificationService {}
// Repositories
class UserRepository {}
class PostRepository {}
// Providers (State Management)
class UserProvider {}
class ThemeProvider {}
// Widgets
class UserProfile extends StatefulWidget {}
class PostCard extends StatelessWidget {}
class LoadingOverlay extends StatelessWidget {}
// Exceptions
class UserNotFoundException implements Exception {}
class NetworkTimeoutException implements Exception {}
class ValidationException implements Exception {}
// Enums
enum UserRole { admin, moderator, user }
enum PostStatus { draft, published, archived }
// Mixins
mixin Loggable {}
mixin Cacheable {}
mixin Validatable {}
12. Соглашения Dart Code Style (по официальной документации)
✅ DO: используйте UpperCamelCase для названий классов
class MyClass {}
✅ DO: используйте маленькие буквы для переменных и методов
var myVariable = 10;
void myMethod() {}
✅ DO: используйте UPPER_SNAKE_CASE для констант
const int MAX_SIZE = 100;
const String DEFAULT_NAME = 'Guest';
✅ DO: помещайте открывающую скобку { на той же строке
class MyClass { // ✅
class MyClass
{ // ❌
✅ DO: используйте 2 пробела для отступа (не tabs)
class MyClass {
void method() {
print('hello');
}
}
13. Чек-лист для проверки имён классов
- Начинается с БОЛЬШОЙ буквы (UpperCamelCase)
- Не содержит underscore (_)
- Описательное имя (не одна буква, не слишком короткое)
- Это существительное, не глагол
- Соответствует роли класса (Service, Repository, Provider, Widget и т.д.)
- На английском языке
- Понятно для других разработчиков
- Не дублирует уже существующие имена
Итоговое правило
Используй UpperCamelCase, будь описательным и следуй намерениям класса через его имя.
Хорошее имя класса — это первая документация для других разработчиков.