web-dev-qa-db-fra.com

Convention de nommage de méthode privée

Existe-t-il une convention pour nommer la méthode privée que j'ai appelée "_Add" ici? Je ne suis pas un fan du soulignement de premier plan, mais c’est ce que suggère l’un de mes coéquipiers.

public Vector Add(Vector vector) {
    // check vector for null, and compare Length to vector.Length
    return _Add(vector);
}

public static Vector Add(Vector vector1, Vector vector2) {
    // check parameters for null, and compare Lengths
    Vector returnVector = vector1.Clone()
    return returnVector._Add(vector2);
}

private Vector _Add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
33
jason

J'ai l'habitude de voir et d'utiliser "AddCore" ou "InnerAdd"

28
TheSoftwareJedi

Je n'ai jamais vu de convention de codage en C # distinguant les méthodes publiques et privées. Je ne suggère pas de le faire, car je ne vois pas l'avantage.

Si le nom de la méthode entre en conflit avec les méthodes publiques, il est temps de devenir plus descriptif; si, comme dans votre cas, il contient la méthode réelle implementation pour la méthode publique, une convention consiste à l'appeler *Impl. C'est à dire. AddImpl dans votre cas.

25
Konrad Rudolph

J'utilise habituellement thisCase pour les méthodes privées et ThatCase pour les méthodes publiques.

private Vector add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

public Vector Add(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
24
Andy May

Personnellement, pour les méthodes, j'ai la même convention de nommage, quelle que soit la visibilité.

Ce sont mes conventions de nommage pour C #:

  • Espaces de noms, types, méthodes, propriétés: PascalCase
  • Variables locales: camelCase
  • Paramètres aux méthodes: camelCase
  • Champs privés: _PascalCase avec le préfixe de soulignement, si le champ de protection de la propriété, puis le même nom que la propriété uniquement avec le préfixe de soulignement

Edit : Remarque: je suis coupable d'utiliser des noms de préfixe pour les méthodes privées. Je n'ai pas compris cette partie de votre question la première fois que je l'ai lue.

Par exemple, si j'ai 7 manières différentes d'exécuter mon instruction SQL via ma classe DatabaseCommand, comme QueryDataTable, QueryEnumerable, QueryEnumerable<T>, QueryDataReader, etc., toutes ces méthodes veulent appeler les mêmes méthodes privées, j'ai tendance à appeler cette méthode. InternalQuery ou PrivateQuery.

15

Depuis que le public Add () fait des vérifications et que le privé ne:

private Vector AddUnchecked(Vector vector) {
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}
5
EricSchaefer

Les deux variantes que j'ai vues couramment utilisées sont les suivantes:

private Vector DoAdd(Vector vector) { ... }

et 

private Vector AddImpl(Vector vector) { ... }

Aucune des deux n'est particulièrement satisfaisante, mais c'est ce que j'ai vu.

Je n'ai jamais vu de convention selon laquelle TOUTES les méthodes privées devraient avoir un préfixe - la simple pensée de le faire me fait frémir! 

C’est déjà assez grave de traiter avec tous les développeurs C++ qui préfixent tous les membres visibles avec "_" - et je parle en tant qu’ancien développeur de Delphi qui préfixait chaque membre avec "F". Je me remets encore de ça!

5
Bevan

Il est assez courant d'utiliser un trait de soulignement principal pour les propriétés privées, mais je ne l'ai jamais vu faire avec des méthodes.

3
cgreeno

Méthodes publiques:

public void Add()
{
}
this.Add()

Méthodes privées:

private void _Add()
{
}
_Add();

Propriétés:

public int Id {get;set;}
this.Id = 10;

Des champs:

private bool _isUsed;
_isUsed = false;

Variables locales:

bool isUsed;
3
Y.Yanavichus

Je pense qu'avec la plupart des conventions, il y a plus de liberté dans les affaires privées. Cependant, je vois cela souvent:

private Vector AddCore(Vector vector)

ou

private Vector DoAdd(Vector vector)

Cependant, je supprimerais probablement la méthode d'ajout privé et n'en aurais qu'un:

public static Vector Add(Vector vector1, Vector vector2) 
{
    // check if vector1 is null
    Vector returnVector = vector1.Clone()
    return returnVector.Add(vector2);
}

public Vector Add(Vector vector) 
{
    // check parameters for null, and compare Lengths
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

Mettez également ces accolades au bon endroit :-)

1
Greg Dean

Je choisirais ce que mes coéquipiers ont suggéré et en ferions une convention dans l’équipe. Mais dans le cas particulier, il semble que vous puissiez l'éviter:

public Vector Add(Vector vector) {
    // check vector for null, and compare Length to vector.Length
    for (int index = 0; index < Length; index++) {
        this[index] += vector[index];
    }
    return this;
}

public static Vector Add(Vector vector1, Vector vector2) {
    // check parameters for null, and compare Lengths
    Vector returnVector = vector1.Clone()
    return returnVector.Add(vector2);
}

Ou peut-être que je ne devrais tout simplement pas être sur SO si tardivement ...

1
PEZ

EPiServer utilise la convention "... interne" comme dans AddInternal() dans cette situation.

0
user3638471

Oh j'ai oublié de dire pourquoi je fais ça. C'est parce que c'est un moyen simple de créer un traitement en utilisant une boucle pour les méthodes que j'aimerais appeler en séquence. Par exemple si j'ai une validation qui doit être faite légèrement différente à chaque fois mais en utilisant des méthodes avec la même classe. Je les ai configurés comme 

add_process = array(1,2,3);
delete_process = array(2,6,4);

//delete user, users  posts and users comments
foreach( process2 as value){
 method_{value}_delete
} 
0
Carl McDade

Soyez descriptif avec les noms de méthodes pour créer du code qui s’explique, il ne devrait pas y avoir de collisions car deux méthodes ne devraient pas faire exactement la même chose, vous ne devriez donc pas avoir besoin d’un caractère avec lequel préfixer les noms de méthodes.

Certaines personnes préfixent les champs privés avec "m_", je n'ai pas vu de styles similaires pour les méthodes privées.

0
Paul

J'ai souvent rencontré cette convention, malheureusement, avec une tendance à nommer les contrôles sur un formulaire avec un soulignement (par exemple, "_txtFirstname" au lieu de "txtFirstname"). Il semble s'agir d'un effet de resserrement étrange de la pratique, désormais déconseillée par les États membres, de nommer les variables privées avec un trait de soulignement de premier plan. Cela, ou les programmeurs adorent utiliser la touche de soulignement sans aucune raison que je puisse comprendre.

N'utilisez pas cette convention, et lorsque votre collègue l'insiste, défiez-le de trouver quelque chose ( rien ) en ligne qui recommande cette pratique. 

0
MusiGenesis