web-dev-qa-db-fra.com

Noms de fonction en C ++: Capitaliser ou non?

Quelle est la convention pour nommer les fonctions en C++?

Je viens de l'environnement Java donc je nomme habituellement quelque chose comme:

myFunction(...) {
}

J'ai vu du code mixte en C++,

myFunction(....)
MyFunction(....)
Myfunction(....)

Quelle est la bonne façon?

Est-ce également la même chose pour une méthode de classe que pour une méthode non-classe?

60
user69514

Il n'y a pas de "bonne façon". Ils sont tous syntaxiquement corrects, bien qu'il existe certaines conventions. Vous pouvez suivre le Google style guide , bien qu'il y en ait d'autres.

De ce guide:

Les fonctions régulières ont des cas mixtes; les accesseurs et les mutateurs correspondent au nom de la variable: MyExcitingFunction (), MyExcitingMethod (), my_exciting_member_variable (), set_my_exciting_member_variable ().

40
int3

Depuis C++ 11, vous pouvez utiliser soit snake_case ou camelCase pour les noms de fonction.

En effet, pour faire fonctionner une classe en tant qu'expression de plage dans une boucle for basée sur une plage , vous - doit définir des fonctions appelées begin et end (sensible à la casse) pour cette classe.

Par conséquent, en utilisant par exemple PascalCase pour les noms de fonction signifie que vous devez rompre la cohérence de dénomination dans votre projet si vous avez besoin de faire fonctionner une classe avec la plage basée sur.

36
emlai

La plupart du code que j'ai vu est camelCase fonctions (lettre initiale minuscule) et ProperCase/PascalCase noms de classe et (le plus souvent), snake_case variables.

Mais, pour être honnête, ce ne sont que des conseils. La chose la plus importante est d'être cohérent dans votre base de code. Choisissez ce qui vous semble naturel/fonctionne et respectez-le. Si vous rejoignez un projet en cours, suivez leurs normes.

27
Donnie

Les plus courants que je vois dans le code de production sont (dans cet ordre):

myFunctionName     // lower camel case

MyFunctionName     // upper camel case

my_function_name   // K & R ?

Je trouve que la convention de dénomination qu'un programmeur utilise dans le code C++ a généralement quelque chose à voir avec son arrière-plan de programmation.

Par exemple. les anciens programmeurs Java ont tendance à utiliser la minuscule caisse de chameau pour les fonctions

16
Steven Keith

Si vous regardez les bibliothèques standard, le modèle est généralement ma_fonction , mais chaque personne semble avoir sa propre manière: - /

11
TofuBeer

Personnellement, je préfère thisStyle à ThisStyle pour les fonctions. C'est vraiment pour un goût personnel, probablement influencé par Java, mais j'aime bien que les fonctions et les classes soient différentes.

Si je devais plaider pour cela, je dirais que la distinction est un peu plus que simplement esthétique. Cela permet d'économiser un peu de réflexion lorsque vous rencontrez la construction de style fonctionnel d'un temporaire. Contre cela, vous pouvez faire valoir que peu importe si Foo(1,2,3) est un appel de fonction ou non - s'il s'agit d'un constructeur, il agit exactement comme une fonction renvoyant un Foo par valeur de toute façon.

La convention évite également le fiasco de la fonction avec le même nom que la classe n'est pas une erreur que C++ hérite parce que C a un espace de noms de balise distinct:

#include <iostream>

struct Bar {
    int a;
    Bar() : a(0) {}
    Bar(int a) : a(a) {}
};

struct Foo {
    Bar b;
};

int Bar() {
    return 23;
}

int main() {
    Foo f;
    f.b = Bar();
    // outputs 23
    std::cout << f.b.a << "\n";
    // This line doesn't compile. The function has hidden the class.
    // Bar b;
}

La barre est, après tout, à la fois un nom et un verbe, donc pourrait raisonnablement être définie comme une classe à un endroit et une fonction à un autre. De toute évidence, il existe de meilleures façons d'éviter le conflit, comme une bonne utilisation des espaces de noms. Donc, comme je l'ai dit, c'est simplement parce que je préfère l'apparence des fonctions avec des initiales en minuscules plutôt que parce qu'il est réellement nécessaire de les distinguer des classes.

7
Steve Jessop

Contrairement à Java, C++ n'a pas de "style standard". La société dans laquelle j'ai déjà travaillé a son propre style de codage C++, et la plupart des projets open source ont aussi leurs propres styles. Quelques conventions de codage que vous voudrez peut-être examiner:

Il est intéressant de noter que les normes de codage C++ spécifient souvent les parties du langage à ne pas utiliser . Par exemple, le Guide de style Google C++ indique "Nous n'utilisons pas d'exceptions C++". Presque partout où j'ai travaillé, certaines parties de C++ sont interdites. (Un endroit où j'ai travaillé a essentiellement dit: "programme en C, mais new et delete vont bien"!)

5
Laurence Gonsalves

Comme d'autres l'ont dit, il n'y a rien de tel en C++. Cela dit, j'ai tendance à utiliser le style dans lequel la bibliothèque standard est écrite - K & R.

Aussi, voir l'entrée FAQ de Bjarne Stroustrup .

4
Nemanja Trifunovic

Je pense que c'est une question de préférence, même si je préfère myFunction(...)

4
sud03r

Faites comme vous le souhaitez, tant que vous êtes cohérent parmi vos développeurs. groupe. toutes les quelques années, les conventions changent ..... (remmeber nIntVAr) ...

3
Dani

Il n'y a pas tant de manière "correcte" pour la langue. C'est une préférence plus personnelle ou quelle est la norme pour votre équipe. J'utilise généralement myFunction () lorsque je crée mon propre code. De plus, un style que vous n'avez pas mentionné que vous verrez souvent en C++ est my_function () - pas de majuscules, de soulignements au lieu d'espaces.

Vraiment, c'est juste dicté par le code dans lequel vous travaillez. Ou, si c'est votre propre projet, votre préférence personnelle.

3
Daniel Bingham

Tout dépend de votre définition de correct. Il existe de nombreuses façons d'évaluer votre style de codage. La lisibilité est importante (pour moi). C'est pourquoi j'utiliserais le my_function manière d'écrire les noms de fonction et les noms de variable.

2
Peter Stuifzand