web-dev-qa-db-fra.com

Nommer des fonctions qui récupèrent une valeur

J'ai cette règle personnelle pour démarrer tous les noms de la fonction/de la méthode avec un verbe. Mon verbe de choix pour les fonctions ou les méthodes qui obtiennent une valeur basée sur une structure de données ou un objet sont obtenez. Je me demande si c'est une bonne idée.

La bonne chose à propos de obtenez est que cela ne dit rien comment cette valeur est récupérée, obtenez-la. Quelque chose comme Calculer (En plus d'être terriblement long) peut être trop d'informations.

Ceci s'applique aux fonctions et aux méthodes, c'est-à-dire

float get_magnitude(Vector2d vector)
{
    return sqrt(pow(vector.x, 2), pow(vector.y, 2));
}

ou

float Vector2d::get_magnitude() const
{
    return sqrt(pow(x, 2), pow(y, 2));
}

D'autre part, je finis parfois avec des méthodes getter pour des propriétés en lecture seule. Il peut être logique d'utiliser un verbe plus significatif pour tout ce qui ne vient pas de renverser certaines propriétés et peut ne pas courir de temps linéaire.

Existe-t-il un cas à faire pour une approche ou est-ce juste une question de goût?

5
futlib

La cohérence des fonctions de dénomination est bonne, mais vous pouvez également en faire trop.

Si -chaque fonction qui renvoie une valeur est appelée getSomething, vous en avez probablement trop. Mon avantage serait de réserver le préfixe get pour des propriétés conceptuelles de l'objet que la fonction fonctionne sur, même si la valeur n'est pas explicitement stockée dans l'objet (comme la get_magnitude Dans votre exemple).

Si le retour d'une valeur n'est pas l'aspect le plus important de la fonction, mais simplement un effet secondaire de la vraie mesure ou de la conception de la fonction, je nommerais la fonction après ce qu'elle fait. Par exemple, il n'y a aucun moyen de donner à C fopen fonction de la fonction get préfixe, même si la fonction renvoie une valeur importante (une poignée au fichier vient d'ouvrir).

11

La nommée claire cohérente est bonne, donc "get_thingy ()" est bon, mais je ne vois pas que la lecture seule par rapport à mutable fait toute différence ici car vous ne "lisant" que la valeur.

J'aime "de" comme un identifiant suffixe, vous devez passer un paramètre comme dans "get_square_of (3)", et si vous savez qu'il y a un lot plus impliqué qu'une simple récupération ou calcul, alors peut-être peut-être Un autre verbe comme "obtenez" peut être utilisé pour l'indiquer comme dans "obtenue_meaning_of_f_life ()", également certaines personnes favorisent "Récupération_" pour indiquer que la méthode implique une sorte d'interaction/interaction externe.

6
James Anderson

Hmmm ... Eh bien, c'est presque toujours une préférence personnelle, n'est-ce pas. En règle générale, je pense que les conventions de dénomination devraient être telles que non seulement je comprends ce qui se passe dans mon code source, mais aussi que quiconque passe sur mon code. En outre, j'ai tendance à être un minimaliste dans la documentation du code; À moins que je fasse quelque chose de très délicat, mon code devrait être assez intelligent pour m'expliquer à moi même si je le vois 3 ans à partir de quand je l'ai écrit dans une stupeur ivre. Donc, la cohérence sur vos projets, pour la santé mentale interne est également importante.

Par exemple, lorsque j'utilise C sur * Nix Systems, j'utilise invariablement 0 en tant que succès et numéros négatifs pour signaler les défaillances; à l'exception des fonctions d'E/S où le retour est Taille_T; Ensuite, le nombre positif est le nombre d'E/S; 0 est une halte sur i/0 et (taille_t) -1 est un défaut avec errno défini sur une erreur système; Ceci est cohérent avec C comportement de la bibliothèque sur les systèmes, donc je sais que tout le monde comprendra ce qui se passe.

Lorsque je voulais écrire des programmes sous Win32 en utilisant c La Convention de Win32 était un peu différente et j'ai suivi cette convention. Là-bas, les noms utilisent Camelcase en C (qui m'ont ennuyeux pour moi, mais je le suis en train de le suivre) et utilisez la notation hongroise (ce qui est encore plus gênant) mais je m'envoie d'utiliser cela.

Cependant, si je devais écrire du code équivalent en C++, je changerais comment je signale des erreurs. Jeter des exceptions ou utiliser des valeurs de retour booléennes pour des méthodes plus simples.

Si je suis en mode de programmation du noyau, j'utilise les conventions utilisées par les développeurs de noyau;

Je pense que je ne veux pas passer du temps à expliquer mon code à d'autres (qui me comprend 3 à 5 ans, car j'aurais changé) alors j'utilise le dialecte qu'ils comprenaient seuls plutôt que moi avoir à Expliquez-leur de leur logique (ils ne sont vraiment pas si intelligents et je reçois stupide de l'année).

Je pense que tout ce que vous utilisez, gardez cela cohérent le long d'un chemin logique qui peut survivre à travers les langues, à travers les systèmes et votre croissance entre maintenant et 10 ans.

1
Ahmed Masud

Pour des méthodes visant à récupérer une valeur, certaines personnes omettent simplement le verbe, considérant que ceci n'est qu'un accès à une propriété:

float Celsius() { return self.celsius; }

float Fahrenheit() { return self.celsius * 9.0/5.0 + 32.0; }
0
mouviciel