Gelegentlich ist der logischste Name für etwas (z. B. eine Variable) ein reserviertes Schlüsselwort in der Sprache oder Umgebung Ihrer Wahl. Wenn es kein gleichwertiges Synonym gibt, wie nennt man es?
Ich stelle mir vor, es gibt Best-Practice-Heuristiken für dieses Problem. Diese können von den Erstellern oder Verwaltern von Programmiersprachen und -umgebungen bereitgestellt werden. Wenn zum Beispiel python.org (oder Guido van Rossum) sagt, wie man damit in Python umgeht, wäre das eine gute Richtlinie in meinem Buch. Ein MSDN-Link zum Umgang in C # wäre ebenfalls gut.
Alternativ sollten auch die Richtlinien wichtiger Einflussnehmer in der Softwareentwicklung von Nutzen sein. Vielleicht hat Google / Alphabet einen netten Styleguide, der uns den Umgang damit lehrt?
Hier ist nur ein Beispiel: In der C # -Sprache ist "default" ein reserviertes Schlüsselwort. Wenn ich eine Aufzählung verwende, möchte ich möglicherweise den Standardwert "default" (analog zu "switch" -Anweisungen) angeben, kann dies jedoch nicht.
(C # unterscheidet zwischen Groß- und Kleinschreibung, und Aufzählungskonstanten sollten
großgeschrieben werden. Daher ist "Standard" die naheliegende Wahl. Nehmen wir jedoch an, dass in unserer aktuellen Stilrichtlinie alle Aufzählungskonstanten in Kleinbuchstaben angegeben sind.) Wir könnten das Wort "defaultus" in Betracht ziehen ", aber dies entspricht nicht dem Grundsatz des geringsten Erstaunens . Wir sollten auch "standard" und "initial" berücksichtigen, aber leider ist "default" das Wort, das genau seinen Zweck in dieser Situation wiedergibt.
clazz
praktisch ein De-facto-Standard ist. Es im Wesentlichen ist Teil der Plattform Namenskonvention. Alles andere wäre eine Verletzung der Erwartungen, die andere möglicherweise daran haben, Ihren Code zu lesen. Dies sollte nur dann erfolgen, wenn dies unbedingt erforderlich ist.Antworten:
Für eine Aufzählungsoption sollten Sie die Groß- und Kleinschreibung verwenden
Default
. Da bei C # die Groß- und Kleinschreibung beachtet wird, kollidiert es nicht mit dem reservierten Schlüsselwort. Siehe .net-Benennungsrichtlinien .Da alle öffentlichen Mitglieder in .net in Groß- und Kleinschreibung geschrieben sein sollten und alle reservierten Namen in Kleinschreibung geschrieben sind, sollte dies nur bei lokalen Variablen (einschließlich Parametern) auftreten. Und Einheimische haben normalerweise Substantive oder Phrasen als Namen, so dass es ziemlich selten vorkommt, dass der natürlichste Name mit einem Schlüsselwort kollidiert. Z.B.
defaultValue
wäre in der Regel ein natürlicherer Name alsdefault
. In der Praxis ist dies also kein großes Problem.In C # können Sie das
@
Präfix " " verwenden, um reservierte Schlüsselwörter zu " " entziehen und sie als Bezeichner (wie@default
) zu verwenden. Dies sollte jedoch nur verwendet werden, wenn Sie wirklich keine andere Option haben, dh wenn Sie eine Schnittstelle zu einer Drittanbieter-Bibliothek herstellen, die reservierte Schlüsselwörter als Bezeichner verwendet.Natürlich haben andere Sprachen andere Syntax und Schlüsselwörter und daher unterschiedliche Lösungen für dieses Problem.
SQL hat eine ganze Reihe von Schlüsselwörtern, aber es ist sehr üblich, Bezeichner wie einfach zu maskieren
[Table]
. Einige tun dies sogar für alle Bezeichner, unabhängig davon, ob sie mit einem Schlüsselwort in Konflikt stehen oder nicht. (Immerhin könnte in Zukunft ein zusammenstoßendes Schlüsselwort eingeführt werden!)Powershell (und eine Reihe anderer Skriptsprachen) stellt allen Variablen ein Siegel wie $ voran, was bedeutet, dass sie niemals mit Schlüsselwörtern kollidieren.
Lisp hat überhaupt keine Schlüsselwörter, zumindest nicht im herkömmlichen Sinne.
Python hat in PEP-8 eine offiziell anerkannte Konvention :
Einige Sprachen wie Brainfuck oder Whitespace vermeiden die Definition von Wörtern und umgehen das Problem auf elegante Weise.
Kurz gesagt, es gibt keine sprachunabhängige Antwort auf Ihre Frage, da diese stark von der Syntax und den Konventionen der jeweiligen Sprache abhängt.
quelle
#define
, aber der rechte Operand würde immer als ein Identifikator interpretiert, bei dem die Groß- und Kleinschreibung beachtet wird. Auf diese Weise könnten viele Arten von Namenskonflikten gelöst werden (einschließlich des Imports von Symbolen, bei denen die Groß- und Kleinschreibung nicht berücksichtigt wird, mit Ausnahme von Groß- und Kleinschreibung).Ich würde einen Unterstrich anhängen (default_)
Vorteile:
Warum ich andere Lösungen nicht mag:
Synonym:
Wort anhängen / voranstellen:
Buchstaben ändern (klausel statt klasse):
Nummer anhängen (default1):
Brief anhängen / voranstellen:
Schlüsselwort maskieren (@default (c #), `default` (scala))
Wann würde ich es nicht benutzen:
quelle
klass
nach einer Variablen, woclass
ein reserviertes Wort ist. Ich habe noch nie gesehen,defawlt
aber es ist die gleiche Idee. Ich würde es vorziehendefault_
(und wahrscheinlich,class_
wenn ich damit nicht über etablierte Konventionen trete)."Standard" ist wahrscheinlich kein hilfreicher Aufzählungswert. Es stellt ein Verhalten dar, das sich je nach Kontext, in dem es verwendet wird, ändern kann.
Wenn Ihre Sprache zwischen Groß- und Kleinschreibung unterscheidet, verwenden Sie eine andere Groß- und Kleinschreibung für das Wort. (Standard gegen Standard)
Oder noch besser: Geben Sie ein paar Buchstaben mehr ein und nennen Sie es DefaultValue.
quelle
enum ErrorHandlingLevel { Default = 0, ... }
vsenum ErrorHandlingLevel { None = 0, ... }
. Im zweiten Beispiel kann die Tatsache, dass diesNone
der Standardwert ist, durch Festlegen des Enum-Werts auf 0 mithilfe von xmldoc oder explizit im Code bekannt gemacht werden. Sie erhalten den zusätzlichen Vorteil, zu wissen, was es bedeutet, wenn ein ObjektErrorHandlingLevel
eingestellt istNone
. Vergleichen Sie dies mit dem Untersuchen eines Objekts mitErrorHandlingLevel
der Standardeinstellung.Ich würde wärmstens empfehlen, die Namenskonvention NICHT lokal zu ändern (oder bedeutungslose Zeichen hinzuzufügen), um die Mehrdeutigkeit zu verbessern (wie in anderen Posts vorgeschlagen). Es schafft Verwirrung, wenn die Absicht nicht offensichtlich ist, und kann Fragen aufwerfen, warum sie so benannt wurde. Es kann ohne es gelöst werden.
In jedem Fall sollte es möglich sein, entweder ein Wort mit synonymer Bedeutung zu verwenden oder den Namen spezifischer (oder sogar ausführlicher) zu machen. Auch wenn es zu einer Wiederholung des Kontexts kommen kann, ist es möglicherweise eine bessere Lösung.
Nehmen wir beispielsweise an, Sie haben eine Aufzählung
Mode
, die einen Standardwert wie in Ihrem Fall verfügbar machen soll. Die Benennungdefault_mode
scheint aufgrund der Wiederholung nicht die beste zu sein, vermeidet jedoch Mehrdeutigkeiten, während die gewünschte Bedeutung vermittelt wird.quelle
Sie müssen andere oder geänderte Wörter verwenden, das ist klar.
Das bedeutet also normalerweise entweder
Ein weiterer zu bestimmender Faktor ist die Art und Weise, wie die verschiedenen Wörter verbunden werden
Mein Vorschlag ist, ein Präfix oder Suffix und Unterstriche / Bindestriche zu verwenden, z
local_default
hat den Vorteil, dass alle Einheimischen ausgerichtet sind und somit schnell auffallen, aber den Nachteil, dass man immer zum zweiten Teil weiterlesen muss, um den eindeutigen Namen zu erhalten.default_local
hat den umgekehrten Vorteil, dass der eindeutige Variablenname schnell erkannt wird, die Einheimischen jedoch nicht immer so einfach visuell gruppiert werden können.Ein paar Beispiele für den domain_spezifischen Ansatz, den ich gesehen habe, sind:
vehicle_model
Stattmodel
dessen war ein reserviertes Wort;room_table
für eine SQL-Tabelle wietable
ein reserviertes Wort.Die anderen beiden Optionen, die ich bei der Verwendung von Sprachen oder Skripten gesehen habe, sind:
quelle
words_with_underscores-or-dashes
mit zwei Namen bezeichnet gesehen -snake_case
bei der Verwendung des Unterstrichs undkebab-case
bei der Verwendung des Bindestrichs. Letzteres fand ich lustig.Tun Sie natürlich, was Sie können, um diese Situation zu vermeiden. Ich schreibe seit den späten 1970er Jahren Software und die Zeit, in der ich wirklich, wirklich ein reserviertes Wort fummeln musste, ist weit unter zehn, wahrscheinlich näher an fünf.
Sie können viele Dinge tun, z. B. den ersten oder letzten Buchstaben verdoppeln (
reservedd
) oder einen führenden oder nachfolgenden Unterstrich hinzufügen (reserved_
). Was angemessen ist, hängt stark von den verwendeten Konventionen ab, die Sie schreiben, insbesondere im Hinblick auf führende oder nachfolgende Unterstriche. Versuchen Sie auch, Dinge nicht mit Fällen zu tun, die von Menschen falsch verstanden werden könnten (z. B. mit,Reserved
wenn sie von denen abweichenreserved
).Sobald Sie etwas ausgewählt haben, fügen Sie es in Ihre Kodierungsrichtlinien ein, und stellen Sie sicher, dass die Leute darüber Bescheid wissen und dass es konsequent verwendet wird. Ich gehe sogar so weit, einen Erinnerungskommentar hinzuzufügen, damit die Leser nicht glauben, dass es sich um einen Tippfehler handelt, und wissen, dass sie ihn wieder sehen werden:
quelle
classs
?)In C # können Sie dem Namen eines Bezeichners ein @ voranstellen . Dies weist den Compiler an, den Namen als Namen einer Kennung und nicht als mögliches Schlüsselwort zu behandeln.
quelle