Ich sehe oft m_
Präfix für Variablen verwendet ( m_World
, m_Sprites
, ...) in Tutorials, Beispielen und anderem Code in erster Linie im Zusammenhang mit der Spieleentwicklung.
Warum fügen Leute m_
Variablen Präfixe hinzu?
hungarian-notation
Kravemir
quelle
quelle
m_
, doch die Hälfte der Antworten hier ist ein Kommentar darüber, warum jeder denkt, sein aktueller Favorit sei der beste.Antworten:
Dies ist eine typische Programmierpraxis zum Definieren von Variablen, die Mitgliedsvariablen sind. Wenn Sie sie später verwenden, müssen Sie nicht sehen, wo sie definiert sind, um ihren Umfang zu kennen. Dies ist auch großartig, wenn Sie den Umfang bereits kennen und etwas wie IntelliSense verwenden . Sie können damit beginnen
m_
und eine Liste aller Ihrer Mitgliedsvariablen wird angezeigt. Ein Teil der ungarischen Notation, siehe den Teil über den Umfang in den Beispielen hier .quelle
m_
entweder ein Präfix vorangestellt ist .In Clean Code: Ein Handbuch für agiles Software-Handwerk gibt es eine explizite Empfehlung gegen die Verwendung dieses Präfixes:
Es gibt auch ein Beispiel (C # -Code) dafür:
Schlechte Praxis:
Gute Übung:
Wir rechnen mit Sprachkonstrukten zu Elementvariablen im Fall ausdrücklich Mehrdeutigkeit beziehen ( das heißt ,
description
Mitglied unddescription
Parameter):this
.quelle
Dies ist in C ++ üblich. Dies liegt daran, dass Sie in C ++ nicht denselben Namen für die Elementfunktion und die Elementvariable haben können und Getterfunktionen häufig ohne das Präfix "get" benannt werden.
"m_" gibt für das "Mitglied" an. Das Präfix "_" ist ebenfalls üblich.
Sie sollten es nicht in Programmiersprachen verwenden, die dieses Problem durch Verwendung unterschiedlicher Konventionen / Grammatik lösen.
quelle
Das
m_
Präfix wird häufig für Mitgliedsvariablen verwendet. Ich denke, sein Hauptvorteil besteht darin, dass es dabei hilft, eine klare Unterscheidung zwischen einer öffentlichen Eigenschaft und der privaten Mitgliedsvariablen zu treffen, die sie unterstützt:Es kann hilfreich sein, eine konsistente Namenskonvention für das Sichern von Variablen zu haben, und das
m_
Präfix ist eine Möglichkeit, dies zu tun - eine, die in Sprachen ohne Berücksichtigung der Groß- und Kleinschreibung funktioniert.Wie nützlich dies ist, hängt von den Sprachen und Tools ab, die Sie verwenden. Moderne IDEs mit starken Refactor-Tools und Intellisense benötigen weniger Konventionen wie diese, und dies ist sicherlich nicht die einzige Möglichkeit, dies zu tun, aber es lohnt sich auf jeden Fall, sich der Praxis bewusst zu sein.
quelle
this.
in Ihrer Sprache schreiben müssen,m_
ist das wirklich nutzlos.m_
ist, um es von der Eigenschaft zu unterscheiden, die es sichert - alsothis.Something
für die Eigenschaft vsthis.m_something
für das unterstützende Mitglied. Es ist keine Konvention, die ich selbst bevorzuge, aber ich habe meistens gesehen, dass sie für unempfindliche Sprachen (wie VB) verwendet wird.this.Something
für die Immobilie undthis.something
für die Unterstützung? Oderthis._something
für die Unterstützung?this.m_something
ist redundant. Ich benutze,_something
damit ich es nicht versehentlichSomething
_
Präfix allein würde den Job machen, ist aberm_
die Konvention. Es ist nicht eines, das ich persönlich verwenden würde, aber wenn Sie es im Code sehen, war das die Absicht des Autors.Wie in den anderen Antworten angegeben, wird das
m_
Präfix verwendet, um anzuzeigen, dass eine Variable ein Klassenmitglied ist. Dies unterscheidet sich von der ungarischen Notation, da sie nicht den Typ der Variablen, sondern ihren Kontext angibt.Ich verwende
m_
in C ++, aber nicht in einigen anderen Sprachen, in denen 'dies' oder 'selbst' obligatorisch ist. Ich mag es nicht, wenn 'this->' mit C ++ verwendet wird, weil es den Code überfüllt.Eine andere Antwort
m_dsc
lautet "schlechte Praxis" und "Beschreibung". ist "gute Praxis", aber dies ist ein roter Hering, weil das Problem dort die Abkürzung ist.Eine andere Antwort besagt, dass durch Eingabe
this
IntelliSense angezeigt wird, aber jede gute IDE über einen Hotkey verfügt, mit dem IntelliSense für die aktuellen Klassenmitglieder angezeigt wird.quelle
m_description
vsdescription
.Wie in vielen anderen Antworten angegeben, ist m_ ein Präfix, das Mitgliedsvariablen bezeichnet. Es wird / wurde häufig in der C ++ - Welt verwendet und auch in andere Sprachen, einschließlich Java, weitergegeben.
In einer modernen IDE ist es vollständig redundant, da die Syntaxhervorhebung deutlich macht, welche Variablen lokal und welche Mitglieder sind . Zu dem Zeitpunkt, als die Syntaxhervorhebung Ende der 90er Jahre erschien, gab es die Konvention jedoch schon seit vielen Jahren und sie war fest verankert (zumindest in der C ++ - Welt).
Ich weiß nicht, auf welche Tutorials Sie sich beziehen, aber ich vermute, dass sie die Konvention aufgrund eines von zwei Faktoren verwenden:
quelle
Lockheed Martin verwendet ein Namensschema mit drei Präfixen, mit dem man wunderbar arbeiten konnte, insbesondere beim Lesen des Codes anderer.
So...
Nehmen Sie es für das, was es wert ist.
quelle
Um die aktuellen Antworten zu vervollständigen und da die Frage nicht sprachspezifisch ist, verwenden einige C-Projekte das Präfix
m_
, um globale Variablen zu definieren, die für eine Datei spezifisch sind - undg_
für globale Variablen, deren Umfang größer ist als die Datei, die sie definiert haben.In diesem Fall sollten globale Variablen, die mit dem Präfix
m_
definiert sind, definiert werden alsstatic
.Ein Beispiel für ein Projekt, das diese Konvention verwendet, finden Sie unter EDK2-Codierungskonvention (eine UEFI-Open-Source-Implementierung) .
quelle
Ein Argument, das ich noch nicht gesehen habe, ist, dass ein Präfix wie
m_
dieses verwendet werden kann, um zu verhindern, dass Namen mit#define
'd-Makros kollidieren .Regex-Suche nach
#define [a-z][A-Za-z0-9_]*[^(]
In/usr/include/term.h
aus Flüchen / Flüchen.quelle