Parfois, le nom le plus logique pour quelque chose (par exemple une variable) est un mot clé réservé dans la langue ou l'environnement de votre choix. Quand il n'y a pas de synonyme tout aussi approprié, comment peut-on l'appeler?
J'imagine qu'il existe des heuristiques de meilleures pratiques pour résoudre ce problème. Ceux-ci pourraient être fournis par les créateurs ou les gouverneurs des langages de programmation et des environnements. Par exemple, si python.org (ou Guido van Rossum) explique comment le gérer en Python, ce serait une bonne directive dans mon livre. Un lien MSDN sur la façon de gérer cela en C # serait également utile.
Alternativement, les directives fournies par les principaux influenceurs en génie logiciel devraient également être utiles. Peut-être que Google / Alphabet a un bon guide de style qui nous apprend comment le gérer?
Voici un exemple: dans le langage C #, "default" est un mot clé réservé. Lorsque j’utilise une énumération, j’aimerais peut-être nommer la valeur par défaut "default" (analogue aux instructions "switch"), mais ne le peut pas.
(C # est sensible à la casse et les constantes enum devraient être en majuscules. Le choix par défaut est donc évident, mais supposons que notre guide de style actuel dicte que toutes les constantes enum doivent être en minuscules.)
Nous pourrions considérer le mot "defaultus". ", mais cela n’adhère pas au principe de moindre surprise . Nous devrions également considérer «standard» et «initial», mais malheureusement, «défaut» est le mot qui traduit exactement son objectif dans cette situation.
clazz
est pratiquement une norme de facto. En substance , elle est partie de la convention de nommage de la plate - forme. Faire autre chose enfreindrait les attentes que d'autres pourraient avoir lues dans votre code. Ne le faites donc que si cela est absolument nécessaire.Réponses:
Pour une option enum, vous devriez utiliser un cas de titre comme
Default
. C # étant sensible à la casse, il n'entrera pas en conflit avec le mot clé réservé. Voir les directives de nommage .net .Étant donné que tous les membres publics doivent avoir la casse du titre dans .net et que tous les noms réservés sont en minuscule, vous ne devriez pas le rencontrer, sauf avec des variables locales (y compris des paramètres). Et les habitants ont généralement des noms ou des phrases comme noms, il est donc assez rare que le nom le plus naturel entre en collision avec un mot-clé. Par exemple.
defaultValue
serait généralement un nom plus naturel quedefault
. Donc, dans la pratique, ce n’est pas un gros problème.En C #, vous pouvez utiliser le
@
préfixe " " pour échapper aux mots clés réservés afin qu'ils puissent être utilisés comme identifiants (du type@default
). Mais cela ne devrait être utilisé que si vous n'avez vraiment aucune autre option, c'est-à-dire si vous vous connectez à une bibliothèque tierce qui utilise un mot clé réservé comme identifiant.Bien sûr, d'autres langues ont une syntaxe et des mots-clés différents et, par conséquent, différentes solutions à ce problème.
SQL a beaucoup de mots-clés, mais il est très courant d'échapper simplement aux identifiants, comme
[Table]
. Certains le font même pour tous les identifiants, qu'ils entrent en conflit avec un mot clé ou non. (Après tout, un mot clé conflictuel pourrait être introduit à l'avenir!)Powershell (et de nombreux autres langages de script) préfixe toutes les variables avec un sigil comme $, ce qui signifie qu'elles n'entreront jamais en conflit avec des mots-clés.
Lisp n'a pas du tout de mots clés, du moins pas au sens conventionnel du terme.
Python a une convention officiellement reconnue dans PEP-8 :
Certaines langues telles que Brainfuck ou Whitespace évitent de définir des mots, évitant élégamment le problème.
En bref, il n’ya pas de réponse indépendante de la langue à votre question, car elle dépend fortement de la syntaxe et des conventions de la langue spécifique.
la source
#define
, mais l'opérande de droite serait toujours interprété comme un identifiant sensible à la casse. Cela permettrait de résoudre de nombreux types de conflits de noms (y compris, pour les langages ne respectant pas la casse, l'importation de symboles identiques, sauf pour les cas).Je voudrais ajouter un trait de soulignement (default_)
Avantages:
Pourquoi je n'aime pas les autres solutions:
Synonyme:
Ajouter / Préposer un mot:
Changer les lettres (clazz au lieu de la classe):
Ajouter un numéro (par défaut1):
Ajouter / ajouter une lettre au préalable:
Échapper à un mot-clé (@default (c #), `default` (scala))
Quand ne l'utiliserais-je pas:
la source
klass
pour une variable oùclass
est un mot réservé. Je n'ai jamais vudefawlt
mais c'est la même idée. Je préféreraisdefault_
(et probablementclass_
si ce n’est pas au détriment des conventions établies)."Default" n'est probablement pas une valeur utile enum. Cela représente un comportement qui peut changer en fonction du contexte dans lequel il est utilisé.
Cela étant dit, si votre langue est sensible à la casse, utilisez une casse différente pour le mot. (Valeur par défaut vs valeur par défaut)
Ou mieux encore, faites l'effort supplémentaire de taper quelques lettres de plus et appelez-le DefaultValue.
la source
enum ErrorHandlingLevel { Default = 0, ... }
vsenum ErrorHandlingLevel { None = 0, ... }
. Dans le deuxième exemple, le fait qu'ilNone
s'agisse de la valeur par défaut peut être connu en définissant la valeur enum sur 0, en utilisant xmldoc ou explicitement dans le code. Vous avez l’avantage supplémentaire de savoir ce que cela signifie quand un objet estErrorHandlingLevel
réglé surNone
. Comparez cela à l'inspection d'un objet avecErrorHandlingLevel
la valeur par défaut.Je recommanderais vivement de NE PAS modifier localement la convention de dénomination (ni ajouter des caractères dénués de sens) aux fins de la désambiguïsation (comme cela a été suggéré dans d'autres messages). Cela crée de la confusion si l'intention n'est pas évidente et peut amener à se demander pourquoi il a été nommé ainsi. Il peut être résolu sans cela.
Dans tous les cas, il devrait être possible d'utiliser un mot ayant une signification synonyme ou de préciser le nom (ou même de le commenter). Même si cela introduit une répétition du contexte, cela peut être une meilleure solution.
Par exemple, disons que vous avez une énumération
Mode
qui devrait exposer une valeur par défaut, comme dans votre cas. Nommer celadefault_mode
peut ne pas sembler le meilleur en raison de la répétition, mais cela évite les ambiguïtés tout en transmettant le sens souhaité.la source
Vous devrez utiliser des mots différents ou modifiés, cela est clair.
Donc, cela signifie généralement soit
Un autre facteur à déterminer est la manière de joindre les mots multiples et les options sont généralement
Ma suggestion est d’utiliser un préfixe ou un suffixe et des traits de soulignement / tirets, par exemple
local_default
L'avantage est que toutes les sections locales sont alignées et se démarquent donc rapidement, mais l'inconvénient est que vous devez toujours lire la deuxième partie pour obtenir le nom unique.default_local
L’avantage commun est que le nom unique de la variable est rapidement visible, mais les sections locales ne sont pas toujours aussi facilement regroupées visuellement.Voici quelques exemples de l’approche domain_specific que j’ai vue:
vehicle_model
au lieu demodel
qui était un mot réservé;room_table
pour une table SQL commetable
c'est un mot réservé.Les deux autres options que j'ai vu utiliser des langues ou des scripts sont:
la source
words_with_underscores-or-dashes
deux noms se rapporter -snake_case
lorsque vous utilisez le trait de soulignement etkebab-case
lorsque vous utilisez le tiret. J'ai trouvé ce dernier drôle.Évidemment, faites ce que vous pouvez pour éviter cette situation. J'écris des logiciels depuis la fin des années 1970 et le temps où j'ai vraiment dû tromper un mot réservé est bien inférieur à dix, probablement plus proche de cinq.
Vous pouvez faire beaucoup de choses, comme doubler la première ou la dernière lettre (
reservedd
) ou ajouter un trait de soulignement (reserved_
). Ce qui est approprié dépendra beaucoup du langage utilisé dans les conventions, en particulier en ce qui concerne les traits de soulignement. Essayez également de ne pas faire des choses avec des cas qui pourraient être mal interprétés par les humains (par exemple, en utilisantReserved
quand il diffère dereserved
).Une fois que vous avez choisi quelque chose, mettez-le dans vos directives de codage, assurez-vous que les gens le savent et qu'il est utilisé de manière cohérente. Je vais même jusqu'à ajouter un commentaire de rappel pour que les lecteurs ne pensent pas que ce soit une faute de frappe et sachent qu'ils le verront encore:
la source
classs
?)En C #, vous pouvez ajouter le nom d'un identifiant avec @ . Cela indique au compilateur de traiter le nom comme le nom d'un identifiant et non comme un mot clé possible.
la source