Präfixe, unsignierte Variablen, ungarische Notation - Umsteiger braucht Hilfe



  • Hallo,
    ich habe jetzt nach ~4 Jahren von Object Pascal zu C++ gewechselt.
    Dazu habe ich noch ein paar Fragen, die mir meine Bücher nicht so ganz beantworten konnten.
    1. Was bedeuten die Präfixe "g" und "nf" vor einer Variable? Warum werden diese auf unterschiedliche Weise kombiniert? Z.B. lpfnWndProc und g_szClassName. Was ist besser?

    2. Was ist eine unsignierte Variable (uInt, uChar)? Wie lautet die korrekte Schreibweise (uInt, Uint, ...)?

    3. Wann sollte ich den Anfang klein schreiben, wann groß? Wenn ich z.B. zwei Variablen für die Fenster-Höhe u. -Weite habe, wie sollte man diese am Besten nennen? Unter OP wäre WndHeight/WndWidth oder WindowHeight/WindowWidth korrekt gewesen. Was könntet ihr mir empfehlen?

    Danke im Voraus!

    MfG Philipp



  • das Prefix lpfn bedeutet long pointer to function, g_ steht für global
    ein unsigned Wert ist immer postiv z.B unsigned int, unsigned char, unsigned long usw.

    Wie du deine Variablen benennst, musst du selbst entscheiden, meistens aber wird alles klein geschrieben, mit der Ausnahme von Klassennamen: der erste Buchstabe ist immer groß.



  • Ok, danke 🙂



  • Die ungarische Notation ist völlig veraltet und stammt aus alten C-Zeiten. Als C++ler sollte man sparsam mit Prefixen umgehen...



  • @MaSTaH: Was spricht gegen die ungarische Notation? Ich habe gelesen, dass sie für Windows entwickelt wurde. Demnach müsste es ja Alternativen geben, oder? Wenn ja, warum sollte ich diese Nutzen?

    Warum sollte ich sparsam mit Präfixen umgehen? Ich meine, sie sind doch sehr praktisch, weil man sofort weiß, mit welchem Typ von Variable man "es zu tun hat".



  • 2. Was ist eine unsignierte Variable (uInt, uChar)? Wie lautet die korrekte Schreibweise (uInt, Uint, ...)?

    Gibt's doch in Object Pascal auch - Cardinal, Longword, Byte... 🙂 Variablen, die keine negativen Werte annehmen können (also kein Vorzeichen haben).
    Die korrekte Schreibweise in C++ ist "unsigned int", "unsigned short", "unsigned char" etc., alles andere sind typedefs aus irgendwelchen Bibliotheken. Für "unsigned int" kannst du auch kurz "unsigned" schreiben.

    3. Wann sollte ich den Anfang klein schreiben, wann groß? Wenn ich z.B. zwei Variablen für die Fenster-Höhe u. -Weite habe, wie sollte man diese am Besten nennen? Unter OP wäre WndHeight/WndWidth oder WindowHeight/WindowWidth korrekt gewesen. Was könntet ihr mir empfehlen?

    In der Standard-Welt ist alles klein geschrieben, nur Template-Argumente werden öfter mal kapitalisiert. Andere empfehlen KlassenNamen und variablenNamen sowie funktionsNamen, wieder andere SchreibenAllesGroß (WieZumBeispiel Microsoft OderEben Borland).
    Wenn man alles klein schreibt, hat man zwar öfter nervige Namenskollisionen, dafür kann man die Standardbibliothek benutzen, ohne dass zwei Benennungskonventionen aufeinander prallen. Wenn du genug Testprojekte vor dir hast, kannst du ja einfach mal ein paar Variationen ausprobieren.



  • Nonsense schrieb:

    Warum sollte ich sparsam mit Präfixen umgehen? Ich meine, sie sind doch sehr praktisch, weil man sofort weiß, mit welchem Typ von Variable man "es zu tun hat".

    Dazu gibt es bestimmt schon pihundert Threads, die du mit der Suchfunktion finden kannst 🙂



  • Wenn du genug Testprojekte vor dir hast, kannst du ja einfach mal ein paar Variationen ausprobieren.

    Das hoffe ich doch 😉
    Danke. 🙂



  • Dazu gibt es bestimmt schon pihundert Threads, die du mit der Suchfunktion finden kannst 🙂

    Mhh, ich habe irgendwie nur einen Thread gefunden, und das ist meiner... 😃



  • zB FAQ

    Es geht zwar primaer um CKlasse VS Klasse, aber es sollte trotzdem interessant sein



  • MaSTaH schrieb:

    Die ungarische Notation ist völlig veraltet und stammt aus alten C-Zeiten. Als C++ler sollte man sparsam mit Prefixen umgehen...

    LOL. Die ungarische Notation wurde wie oben erwähnt tatsächlich für die Windows Programmierung sogar ganz speziell von einem Programmierer bei MicroSoft entwickelt. Ist inzwischen ein Standard bei vielen Projeketen (vor allem bei Java und OOP-C++) und gehört zur Software Entwicklung nach Software Life Cycle Modellen einfach dazu. Die wichtigsten Punkte sollte man zur Übersicht des Codes beibehalten: Klassennamen groß (z.B. CVector, CSingleton...) und Variablennamen nur am Anfang klein schreiben mit imperativen Ausdruck als erstes Teilwort (getValue(), setvalue(), addElement(), printField()...). Die Präfixe als Teil der ungarischen Notation sind hilfreich, um den Sinn von Bezeichnern schnell zu erkennen, wenn der Code ausgetauscht wird oder nur die Schnittstelle der Headerdatei bekannt ist. Präfixe werden aber wirklich nur bei sehr großen Projekten notwendig (statt par_ lieber this-> nehmen und auf globale Variablen ohnehin verzichten).



  • NeoTrent schrieb:

    MaSTaH schrieb:

    Die ungarische Notation ist völlig veraltet und stammt aus alten C-Zeiten. Als C++ler sollte man sparsam mit Prefixen umgehen...

    LOL. Die ungarische Notation wurde wie oben erwähnt tatsächlich für die Windows Programmierung sogar ganz speziell von einem Programmierer bei MicroSoft entwickelt.

    Ja, in alten (C-)Zeiten und trotzdem müssen sich unschuldige Programmierer noch immer von IdioHHHHLeuten quälen lassen die der Ansicht sind nur mit UN-Präfixen lasse sich brauchbarer Code (TM) schreiben.



  • NeoTrent schrieb:

    LOL. Die ungarische Notation wurde wie oben erwähnt tatsächlich für die Windows Programmierung sogar ganz speziell von einem Programmierer bei MicroSoft entwickelt. Ist inzwischen ein Standard bei vielen Projeketen (vor allem bei Java und OOP-C++) und gehört zur Software Entwicklung nach Software Life Cycle Modellen einfach dazu.

    mal ganz blöd gefragt:
    warum verwendet die STL keine ungarische Notation?
    warum verwendet boos keine ungarische Notation?
    warum verwendet dotNET keine ungarische Notation?
    warum verwendet Java keine ungarische Notation?

    warum verwenden nur Libraries die allgemein als 'schlecht designt' bzw. als 'zu alt um modern zu sein' betitelt werden ungarische Notation? (zB MFC, VCL,...)

    warum verwenden Sutter, Meyers, Alexandrescu, [nachtrag]volkard[/nachtrag], ... keine ungarische Notation?

    Und jetzt erklär mir noch, warum ungarische Notation einfach zur Softwareentwicklung gehört.



  • reicht es denn nicht, wenn ich sage, daß sie nix taugt?



  • reicht es denn nicht, wenn ich sage, daß sie nix taugt?

    Mir schon 🙂



  • volkard schrieb:

    reicht es denn nicht, wenn ich sage, daß sie nix taugt?

    Ja, reicht mir, bei dir.



  • Shade Of Mine schrieb:

    warum verwendet die STL keine ungarische Notation?
    warum verwendet boos keine ungarische Notation?
    warum verwendet dotNET keine ungarische Notation?
    warum verwendet Java keine ungarische Notation?

    warum verwenden nur Libraries die allgemein als 'schlecht designt' bzw. als 'zu alt um modern zu sein' betitelt werden ungarische Notation? (zB MFC, VCL,...)

    warum verwenden Sutter, Meyers, Alexandrescu, [nachtrag]volkard[/nachtrag], ... keine ungarische Notation?

    Und jetzt erklär mir noch, warum ungarische Notation einfach zur Softwareentwicklung gehört.

    Da sprichst du jetzt ein paar wochtige Dinge an. Die ungarische Notation, die für MFC und Co entwickelt wurde wird von vielen Programmierspracherweiterungen und -bibliotheken tatsächlich gar nicht verwendet, was ja auch allgemein hin bemengelt wird (PS: Java ist ein klassischer Vertreter ungarischen Notation, aber denk mal drüber nach warum man in Java ehe kaum Präfixe braucht ;)). Die ungarische Notation ist vor allem deshalb im Software Engineering sehr wichtig, da sehr oft sehr viele Menschen an einem Projeklt arbeiten und selbst nach Abschluss des Projekt stets erweitert werden muss oder kann (Software Life Cycle). Der Code wird ständig verändert, weshalb viele Entwickler damit in Berührung kommen und für Module meist nur Schnittsetllen kennen (Information Hiding). Damit sie mit den Klassen was anfangen können, ohne sich die Implementation um die Ohren zu schlagen, müssen bsw. Methoden eindeutig und klar benannt werden. Die ungarische Notation bringt meiner Meinung nach aber nur was bei sehr großen Projekten und stringend kann man vor allen in der OOP sowie nicht verfolgen (wie lange darf ein Variablenname sein? 😃 ). Es ist ja nur ein Vorschlag und keine ANSI-Norm. Am besten das Projekt einigt sich selbst auf eine vernüpftige Codekonvention.



  • NeoTrent schrieb:

    Da sprichst du jetzt ein paar wochtige Dinge an. Die ungarische Notation, die für MFC und Co entwickelt wurde wird von vielen Programmierspracherweiterungen und -bibliotheken tatsächlich gar nicht verwendet, was ja auch allgemein hin bemengelt wird

    Von wem?

    (PS: Java ist ein klassischer Vertreter ungarischen Notation, aber denk mal drüber nach warum man in Java ehe kaum Präfixe braucht ;)).

    😕

    Entweder man verwendet die ungarische Notation, oder nicht. Klaer mich da mal bitte auf.

    Die ungarische Notation ist vor allem deshalb im Software Engineering sehr wichtig, da sehr oft sehr viele Menschen an einem Projeklt arbeiten und selbst nach Abschluss des Projekt stets erweitert werden muss oder kann (Software Life Cycle). Der Code wird ständig verändert, weshalb viele Entwickler damit in Berührung kommen und für Module meist nur Schnittsetllen kennen (Information Hiding). Damit sie mit den Klassen was anfangen können, ohne sich die Implementation um die Ohren zu schlagen, müssen bsw. Methoden eindeutig und klar benannt werden.

    Soweit stimme ich dir vollkommen zu.
    Hat aber nix mit ungarischer Notation zu tun.

    Die ungarische Notation bringt meiner Meinung nach aber nur was bei sehr großen Projekten und stringend kann man vor allen in der OOP sowie nicht verfolgen (wie lange darf ein Variablenname sein? 😃 ).

    Siehst du: ungarische Notation hat in der OOP nichts verloren.
    Genau das behaupte ich (und volkard, Hume,...) auch.

    Es ist ja nur ein Vorschlag und keine ANSI-Norm. Am besten das Projekt einigt sich selbst auf eine vernüpftige Codekonvention.

    Ja, genau meine Meinung.
    Nur was hat das mit ungarischer Notation zu tun?

    Also, erklaer mir mal, warum man ungarische Notation braucht.



  • NeoTrent schrieb:

    Die ungarische Notation ist vor allem deshalb im Software Engineering sehr wichtig, da sehr oft sehr viele Menschen an einem Projeklt arbeiten und selbst nach Abschluss des Projekt stets erweitert werden muss oder kann (Software Life Cycle).

    Mann, du schmeißt mit Ausdrücken um dich und scheinst nicht zu wissen was sie bedeuten. http://de.wikipedia.org/wiki/Softwaretechnik

    NeoTrent schrieb:

    Der Code wird ständig verändert, weshalb viele Entwickler damit in Berührung kommen und für Module meist nur Schnittsetllen kennen (Information Hiding). Damit sie mit den Klassen was anfangen können, ohne sich die Implementation um die Ohren zu schlagen, müssen bsw. Methoden eindeutig und klar benannt werden.

    Was hat Information-Hiding mit der UN zu tun? Und was hat die Benennung von Methoden mit der UN zu tun?



  • Kann ich Euch in Eurer netten Flame-Runde mal kurz unterbrechen? 😃
    Kann mir jemand mal ein paar Source-Codes geben, in denen kurz und prägnant eine "vernünftige" Variablen\Klassen\Methoden-Benennung erkennbar ist (Bitte überschaubar)?
    Danke. 😉 🙂


Anmelden zum Antworten