🦉C++
Полезные функции и классы, которые не популярны
Атрибут nodiscard
Макрос UE_LOGFMT
UMG Viewmodel
Использование шаблонных указателей на функции
Макрос TEXT() нужен только для FString и FText
HealthComponent должен сам обрабатывать урон
Архитектура не должна быть сложной для простых проектов
Пояснение по Single Responsibility Principle из SOLID
Переопределять конкретные функции - плохо
Создавать зависимости от неиспользуемого - плохо
Принцип устойчивых зависимостей и метрики управления зависимостями
Политики стоит группировать в компоненты по способам изменения
Передача данных между компонентами
Роль API-тестирования - скрыть структуру приложения от тестов
Уровень должен зависеть только от соседнего, нижележащего уровня
Закон Деметры
Вместо сырых UObject лучше использовать TObjectPtr
Оператор / для FString
SStarshipGallery.cpp
Композиция не всегда означает "содержит"
Любая "пометка или флаг", что произошло изменение, должны ставиться только после изменения
Стоит избегать возврата дескрипторов внутренних данных объекта (ссылки, указатели, итераторы)
Стоит избегать приведения типов
Объявляйте переменные, как можно позже
Все данные-члены стоит делать private
Хорошие интерфейсы легко использовать правильно и трудно - неправильно
Никогда не стоит вызывать виртуальные функции в конструкторе или деструкторе
Правила инициализации
Использование mutable
Использование EditCondition в UPROPERTY
Использование static_cast, const_cast и dynamic_cast
Желательно воздерживаться от определяемых пользователем функций преобразования типа
Если компилятор или IDE сообщает, что переменная не используется, то можно удалить её имя
Префиксные формы инкремента и декремента - предпочтительны
Никогда нельзя перегружать операторы &&, || и ,
Операторы присваивания (например, +=) обычно более эффективны, чем отдельные операторы (например, +)
Не стоит объявлять inline для виртуальных функций
Всегда стоит делать нетерминальные классы абстрактными
Желательно использовать модули в UE
PublicDependencyModuleNames или PrivateDependencyModuleNames?
Желательно использовать префиксы в названии классов
Добавлять надо только те компоненты в AActor, которые используются
Композиция или наследование?
Локализация
USTRUCT не собираются сборщиком мусора
Поиск ENUM по имени
Использование UPROPERTY(Instanced)
Получение случайной точки
Использование auto (или decltype(auto)) в качестве типа возвращаемого значения
Использование auto – предпочтительно
Использование static_cast и auto
Использование фигурной инициализации – предпочтительно
Всегда лучше использовать nullptr вместо 0 или NULL
Использование перечисления с областью видимости – предпочтительно
Удалённые функции стоит объявлять, как public
Использование std::unique_ptr – предпочтительно
Избегать создания указателей std::shared_ptr из переменных, тип которых – обычный встроенный указатель
Применение std::weak_ptr
Использование make-функций - предпочтительно
Когда параметр является универсальной ссылкой
Не всегда возвращаемое значение без ссылок и указателей является неэффективным
Применение std::move и std::forward
Избегать режима захвата по умолчанию в lambda-выражениях
Применение auto в lambda-выражениях приветствуется
Захваты в lambda-выражениях применяются только к нестатическим локальным переменным
Lambda-выражения могут принимать любое количество параметров
Last updated