it-swarm.com.de

Wie benenne ich etwas, wenn die logische Option ein reserviertes Schlüsselwort ist?

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, dass es für dieses Problem Best-Practice-Heuristiken gibt. Diese können von den Erstellern oder Gouverneuren von Programmiersprachen und -umgebungen bereitgestellt werden. Wenn zum Beispiel python.org (oder Guido van Rossum) sagt, wie man in Python damit umgeht, wäre das eine gute Richtlinie in meinem Buch. Ein MSDN-Link zum Umgang damit in C # wäre ebenfalls gut.
Alternativ sollten auch Richtlinien von wichtigen Einflussnehmern in der Softwareentwicklung wertvoll sein. Vielleicht hat Google/Alphabet einen netten Styleguide, der uns lehrt, wie wir damit umgehen sollen?

Hier nur ein Beispiel: In der C # -Sprache ist "Standard" ein reserviertes Schlüsselwort. Wenn ich eine Aufzählung verwende, möchte ich möglicherweise den Standardwert "default" (analog zu "switch" -Anweisungen) nennen, kann dies aber nicht.
(Bei C # wird zwischen Groß- und Kleinschreibung unterschieden, und Enum-Konstanten sollten groß geschrieben werden. Daher ist "Standard" hier die naheliegende Wahl. Nehmen wir jedoch an, dass unser aktueller Styleguide vorschreibt, dass alle Enum-Konstanten in Kleinbuchstaben geschrieben werden sollen.)
Wir könnten das Wort "defaultus" betrachten, aber dies entspricht nicht dem Prinzip des geringsten Erstaunens . Wir sollten auch "Standard" und "Initiale" berücksichtigen, aber leider ist "Standard" das Wort, das in dieser Situation genau seinen Zweck vermittelt.

64
Protector one

Für eine Aufzählungsoption sollten Sie die Groß- und Kleinschreibung wie Default verwenden. Da bei C # zwischen Groß- und Kleinschreibung unterschieden wird, kollidiert es nicht mit dem reservierten Schlüsselwort. Siehe . Net Naming Guidelines .

Da alle öffentlichen Mitglieder in .net in Groß- und Kleinschreibung geschrieben werden sollten und alle reservierten Namen in Kleinbuchstaben geschrieben sind, sollten Sie dies nur bei lokalen Variablen (einschließlich Parametern) feststellen. Und Einheimische haben normalerweise Substantive oder Phrasen als Namen, so dass es ziemlich selten ist, dass der natürlichste Name mit einem Schlüsselwort kollidiert. Z.B. defaultValue ist normalerweise ein natürlicherer Name als default. In der Praxis ist dies also kein großes Problem.

In C # können Sie das "@ "Präfix, um reservierte Schlüsselwörter zu umgehen, damit sie als Bezeichner verwendet werden können (wie @default). Dies sollte jedoch nur verwendet werden, wenn Sie wirklich keine andere Option haben, d. H. Wenn Sie eine Schnittstelle zu einer Bibliothek eines Drittanbieters herstellen, die reservierte Schlüsselwörter als Kennung verwendet.


Natürlich haben andere Sprachen andere Syntax und Schlüsselwörter und daher unterschiedliche Lösungen für dieses Problem.

[~ # ~] sql [~ # ~] haben ziemlich viele Schlüsselwörter, aber es ist sehr üblich, einfach Bezeichner wie [Table]. Einige tun dies sogar für alle Bezeichner, unabhängig davon, ob sie mit einem Schlüsselwort kollidieren oder nicht. (Schließlich könnte in Zukunft ein kollidierendes 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 eine offiziell anerkannte Konvention in PEP-8 :

Verwenden Sie immer cls als erstes Argument für Klassenmethoden.

Wenn der Name eines Funktionsarguments mit einem reservierten Schlüsselwort kollidiert, ist es im Allgemeinen besser, einen einzelnen nachgestellten Unterstrich anzuhängen, als eine Abkürzung oder Rechtschreibbeschädigung zu verwenden. Somit ist class_ besser als clss. (Vielleicht ist es besser, solche Zusammenstöße mit einem Synonym zu vermeiden.)

Einige Sprachen wie Brainfuck oder Whitespace vermeiden es, Wörter zu definieren und treten elegant aus dem Weg das Problem.

Kurz gesagt, es gibt keine sprachunabhängige Antwort auf Ihre Frage, da dies stark von der Syntax und den Konventionen der jeweiligen Sprache abhängt.

63
JacquesB

Ich würde einen Unterstrich anhängen (default_)

Vorteile:

  • einfach
  • offensichtlich (warum sonst würden Sie einen Unterstrich anhängen?)
  • konsistent
  • einfach zu verwenden
  • funktioniert in allen modernen Sprachen, die ich kenne
  • der logischen Option am nächsten

Warum ich andere Lösungen nicht mag:

Synonym:

  • schwer zu finden
  • oft nicht genau die gleiche Bedeutung (Nuancen)

Anhängen/Voranstellen eines Wortes:

  • inkonsistent (defaultValue, defaultItem)
  • erhöhte Ausführlichkeit ohne erhöhte Lesbarkeit

Buchstaben ändern (Clazz statt Klasse):

  • inkonsistent (clazz, klass, klazz)

Anhängen einer Nummer (Standard1):

  • wirft die Frage für default2 auf

Brief anhängen/vorbereiten:

  • nicht offensichtlich (Programmierer muss raten, dass es für die Namenskollision verwendet wurde und keine Abkürzung für etwas anderes)

Escapezeichen eines Schlüsselworts (@default (c #), `default` (scala))

  • nur in einigen Sprachen möglich
  • selten verwendete Funktion, hauptsächlich aus Gründen der Kompatibilität mit anderen Sprachen
  • macht es für Benutzer Ihrer API schwieriger zu verwenden (sie müssen wissen, wie es geht und sich daran erinnern, wie es geht)

Wann würde ich es nicht benutzen:

  • bestehende, weit verbreitete andere Konvention
  • Ich kenne bereits ein passendes Synonym
  • in Ihrem speziellen Enum-Fall würde ich der Antwort von @JacquesB folgen
22
Siphor

"Standard" ist wahrscheinlich kein hilfreicher Aufzählungswert. Es stellt ein Verhalten dar, das sich je nach verwendetem Kontext ändern kann.

Wenn Ihre Sprache jedoch zwischen Groß- und Kleinschreibung unterscheidet, verwenden Sie eine andere Groß- und Kleinschreibung für das Wort. (Standard gegen Standard)

Oder noch besser, geben Sie sich die Mühe, noch ein paar Buchstaben einzugeben und nennen Sie es DefaultValue.

18
Kent A.

Ich würde dringend empfehlen, die Namenskonvention NICHT lokal zu ändern (oder bedeutungslose Zeichen hinzuzufügen), um sie eindeutig zu definieren (wie in anderen Beiträgen 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 gleichbedeutender Bedeutung zu verwenden oder den Namen spezifischer (oder sogar ausführlicher) zu machen. Selbst wenn es zu einer Wiederholung des Kontexts kommt, ist es möglicherweise eine bessere Lösung.

Angenommen, Sie haben eine Aufzählung Mode, die einen Standardwert wie in Ihrem Fall verfügbar machen soll. Benennung default_mode scheint aufgrund der Wiederholung nicht das Beste zu sein, vermeidet jedoch Mehrdeutigkeiten und vermittelt gleichzeitig die gewünschte Bedeutung.

9
Sopel

Sie müssen andere oder geänderte Wörter verwenden, das ist klar.
Das bedeutet also normalerweise entweder

  • ein ganz anderes Wort
  • ein Präfix
  • ein Suffix

Ein weiterer zu bestimmender Faktor ist, wie die mehreren Wörter verbunden werden sollen, und die Optionen sind normalerweise

  • allonewordnoseparators
  • words_with_underscores-or-Striche ( snake_case )
  • CapitalizationForClarityAndReadability ( CamelCase )

Mein Vorschlag ist, ein Präfix oder Suffix und Unterstriche/Bindestriche zu verwenden, z.

local_default, my_default, a_default, domain_specific_default
default_local, default_me, default_a, default_domain_specific

local_default hat den Vorteil, dass alle Einheimischen ausgerichtet sind und somit schnell auffallen, aber den Nachteil, dass Sie immer zum zweiten Teil weiterlesen müssen, 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.

Einige Beispiele für den domänenspezifischen Ansatz, den ich gesehen habe, sind: vehicle_model anstelle von model, das ein reserviertes Wort war; room_table für eine SQL-Tabelle als table ist ein reserviertes Wort.

Die anderen beiden Optionen, die ich bei der Verwendung von Sprachen oder Skripten gesehen habe, sind:

  • anführungszeichen oder Rücktipps, um Variablennamen zu umgeben und somit die Verwendung reservierter Wörter zu ermöglichen. Ähnlich könnte ich mir vorstellen, dass einige Sprachen einem Sonderzeichen wie einer Rücktaste erlauben, einem Namen zu entkommen.
  • leerzeichen in Variablennamen.
3
Michael Durrant

Tun Sie natürlich, was Sie können, um diese Situation zu vermeiden. Ich schreibe seit den späten 1970er Jahren Software und die Zeiten, in denen ich wirklich, wirklich ein reserviertes Wort fummeln musste, sind 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, keine Dinge mit Fällen zu tun, die von Menschen falsch gelesen werden könnten (z. B. mit Reserved, wenn es sich von reserved unterscheidet).

Wenn Sie etwas ausgewählt haben, fügen Sie es in Ihre Codierungsrichtlinien ein, stellen Sie sicher, dass die Leute darüber Bescheid wissen und dass es konsistent verwendet wird. Ich gehe sogar so weit, einen Erinnerungskommentar hinzuzufügen, damit die Leser nicht glauben, dass es ein Tippfehler ist, und wissen, dass sie ihn wieder sehen werden:

int ccase;  // Name dodges a reserved Word
2
Blrfl

In C # können Sie dem Namen eines Bezeichners @ voranstellen. Dies weist den Compiler an, den Namen als Namen eines Bezeichners und nicht als mögliches Schlüsselwort zu behandeln.

enum @default {Sat, Sun, Mon, Tue, Wed, Thu, Fri}; 
2
Robert Stiffler