Правила використання C++
Підґрунтя
Починаючи з Godot 4.0, стандарт C++, який використовується в кодовій базі, є підмножиною C++17. Незважаючи на те, що сучасний C++ надає багато можливостей для написання швидшого та читабельного коду, ми вирішили обмежити використання C++ підмножиною з кількох причин:
Це полегшує перегляд коду в онлайн-редакторах. Це пояснюється тим, що учасники механізму не завжди мають доступ до повнофункціональної IDE під час перегляду коду.
Це полегшує сприйняття коду початківцями (які можуть не бути професійними програмістами на C++). Відомо, що кодову базу Godot легко освоїти, і ми хотіли б її зберегти.
Щоб об’єднати ваш запит на отримання, він має відповідати наведеним тут інструкціям із використання C++. Звичайно, ви можете використовувати заборонені тут функції у своїх власних модулях C++ або GDExtensions.
Примітка
До Godot 4.0 стандартом C++, який використовувався в кодовій базі, був C++03 із кількома розширеннями C++14. Якщо ви надсилаєте запит на отримання в гілку 3.x, а не в master, ваш код не може використовувати функції C++17. Натомість ваш код має бути створений за допомогою компілятора C++14.
Наведені нижче вказівки не стосуються залежностей третіх сторін, хоча зазвичай ми віддаємо перевагу невеликим бібліотекам замість більших рішень. Дивіться також Найкращі практики для учасників системи.
Дивись також
Дивіться Настанови щодо стилю програмного коду для вказівок щодо форматування.
Заборонені функції
Будь-яка функція, не перерахована нижче, дозволена. Використання таких функцій, як змінні constexpr і nullptr, заохочується, коли це можливо. Проте, намагайтеся використовувати сучасні функції C++ консервативно. Їх використання має служити реальній меті, наприклад покращенню читабельності коду або продуктивності.
Стандартна бібліотека шаблонів
Ми не дозволяємо використовувати STL, оскільки Godot надає власні типи даних (між іншим). Перегляньте Чому Godot не використовує STL (Standard Template Library)? для отримання додаткової інформації.
Це означає, що запити на отримання не повинні використовувати std::string, std::vector тощо. Натомість використовуйте типи даних Godot, як описано нижче:
Використовуйте
Stringзамістьstd::string.Використовуйте
Vectorзамістьstd::vector. У деяких випадкахLocalVectorможна використовувати як альтернативу (спочатку запитайте у розробників ядра).Використовуйте
Arrayзамістьstd::array.
Примітка
Godot також має тип даних List (який є пов’язаним списком). Хоча List вже використовується в кодовій базі, він зазвичай працює гірше, ніж інші типи даних, такі як Vector і Array. Тому List слід уникати в новому коді, якщо це не необхідно.
ключове слово auto
Будь ласка, не використовуйте ключове слово auto для визначення типу. Хоча це може уникнути повторення, це також може призвести до заплутаного коду:
// Not so confusing...
auto button = memnew(Button);
// ...but what about this?
auto result = EditorNode::get_singleton()->get_complex_result();
Майте на увазі, що документація щодо наведення курсора часто недоступна для рецензентів запитів на отримання. У більшості випадків рецензенти використовують онлайн-переглядач GitHub для перегляду запитів на отримання.
Ми вирішили заборонити автоматичний замість того, щоб дозволити його на індивідуальній основі, щоб уникнути необхідності вирішувати складні граничні випадки. Дякуємо за розуміння.
Лямбда
Лямбда-вирази слід використовувати консервативно, якщо вони значно пришвидшують або спрощують код і не перешкоджають читабельності. Запитайте, перш ніж використовувати лямбда-вирази в запиті на отримання.
Директива #pragma once
Щоб слідувати існуючому стилю, будь ласка, використовуйте стандартні #ifdef включаючі захисники замість #pragma once у нових файлах.
try-catch блоки
Обробка винятків у стилі C++ за допомогою блоків try і catch заборонена. Це обмеження діє з кількох причин, включаючи продуктивність, двійковий розмір і складність коду. Замість цього використовуйте Макроси помилок.
Дивись також
Дивіться Заголовок містить для вказівок щодо сортування включень у файлах C++ і Objective-C.