Directives d'utilisation du C++¶
Justification¶
Depuis Godot 4.0, le standard C++ utilisé dans toute la base de code est un sous-ensemble de C++17. Bien que le C++ moderne apporte de nombreuses possibilités d'écrire un code plus rapide et plus lisible, nous avons choisi de restreindre notre utilisation du C++ à un sous-ensemble pour quelques raisons :
Cela facilite la révision du code dans les éditeurs en ligne. En effet, les contributeurs du moteur n’ont pas toujours accès à un IDE complet pour réviser le code.
Cela rend le code plus facile à appréhender pour les contributeurs débutants (qui ne sont pas forcément des programmeurs C++ professionnels). La base de code de Godot est connue pour être facile à apprendre, et nous aimerions qu'il en reste ainsi.
Pour que votre pull request soit acceptée, elle doit respecter les directives d'utilisation du C++ décrites ici. Bien sûr, vous pouvez utiliser les fonctionnalités non autorisées ici dans vos propres modules C++ ou scripts GDNative.
Note
Avant Godot 4.0, la norme C++ utilisée dans l'ensemble de la base de code était C++03, avec une poignée d'extensions C++14. Si vous contribuez à une pull request sur la branche 3.x plutôt que sur la branche master, votre code ne peut pas utiliser les fonctionnalités C++17. Au contraire, votre code doit pouvoir être compiler avec un compilateur C++14.
Les directives ci-dessous ne s'appliquent pas aux dépendances de tiers, bien que nous favorisions généralement les petites bibliothèques plutôt que les solutions plus importantes. Voir aussi Bonnes pratiques pour les contributeurs au moteur.
Voir aussi
Voir Lignes directrices pour le style du code pour les directives de formatage.
Fonctionnalités non autorisées¶
Toute fonctionnalité non listée ci-dessous est autorisée. L'utilisation de fonctionnalités telles que constexpr
variables et nullptr
est encouragée lorsque cela est possible. Cependant, essayez de rester prudent dans votre utilisation des fonctionnalités modernes du C++. Leur utilisation doit servir un objectif réel, comme l'amélioration de la lisibilité ou des performances du code.
Standard Template Library¶
Nous ne permettons pas l'utilisation de la STL car Godot fournit ses propres types de données (entre autres choses). Voir Pourquoi Godot n'utilise pas la STL (Standard Template Library) ? pour plus d'informations.
Cela signifie que les pull requests ne doivent utiliser non std::string
, std::vector
et autres. Au lieu de cela, utilisez les types de données de Godot comme décrit ci-dessous :
Utilisez
String
au lieu destd::string
.Utilisez
Vector
au lieu destd::vector
. Dans certains cas,LocalVector
peut être utilisé comme alternative (demandez d'abord aux développeurs du noyau).Utilisez
Array
au lieu destd::array
.
Note
Godot possède également un type de données List (qui est une liste liée). Bien que List soit déjà utilisé dans la base de code, il est généralement moins performant que d'autres types de données comme Vector et Array. Par conséquent, List devrait être évité dans le nouveau code, sauf si nécessaire.
Mot-clé auto
¶
Veuillez ne pas utiliser le mot-clé auto
pour l’inférence de type. Bien que cela puisse éviter la répétition, cela peut également conduire à un code déroutant :
// Not so confusing...
auto button = memnew(Button);
// ...but what about this?
auto result = EditorNode::get_singleton()->get_complex_result();
Gardez à l'esprit que la documentation sur le survol n'est pas toujours disponible pour les réviseurs des demandes de retrait. La plupart du temps, les réviseurs utilisent la visionneuse en ligne de GitHub pour examiner les demandes de retrait.
Nous avons choisi d'interdire auto
au lieu de l'autoriser au cas par cas pour éviter d'avoir à trancher sur des cas limites difficiles. Nous vous remercions de votre compréhension.
Lambda¶
Les lambdas doivent être utilisés de manière conservatrice lorsqu'ils rendent le code effectivement plus rapide ou plus simple, et qu'ils ne nuisent pas à la lisibilité. Veuillez demander avant d'utiliser des lambdas dans une pull request.
Directive #pragma once
¶
Pour respecter le style existant, veuillez utiliser les gardes d'inclusion standard #ifdef
au lieu de #pragma once
dans les nouveaux fichiers.
Voir aussi
Voir L'en-tête comprend pour des directives sur le tri des includes dans les fichiers C++ et Objective-C.