Ungarische Notation veraltet
-
Gomon schrieb:
Oh Man! Das z steht für zero und bedeutet daß es sich um eine NULL-terminierte Zeichenkette handelt. Das lp steht für long pointer weil es früher eine Bedeutung spielte und jederzeit wieder Bedeutung erlangen kann, sollte eine zukünftige Windows Version wieder auf mehreren Architekturen verfügbar gemacht werden.
Gomon
Achsooo. "früher eine Bedeutung spielte"? => veraltet
Gomon schrieb:
Das hat insofern etwas damit zu tun, als daß als Gegenargument angeführt wird, daß eine moderne IDE sowieso den Typ erkennen könnte.
Wer nutzt schon ne IDE. IDE's sidn doch was für Weicheier.
Also mal ehrlich. Es dürfte einem Programmierer immer bewusst sein, dass man strings in char* ( oder string in c++ ) speichert und nicht in int oder float.
Somit ist das Prefix str schonmal wertlos.
Den Unterschied zwischen int und float dürfte ein Programmierer auch kennen.
Naja, aber jedem das seine.
-
Ach Mensch. Wenn du die Vorteile der ungarischen Notation nicht schätzt, dann lass es eben.
Keiner zwingt dich dazu.
Sinnvolles Einsatzgebiet der ungarischen Notation:
http://www.microsoft.com/development/literature/not/hungary.html
-
-
Shade Of Mine schrieb:
Es heißt Präfix/Präfixe und nicht Prefix/Prefixe
-
Was macht ihr (ungarische Notationsbeführworter) denn nun mit Objekten, Maps, Vektoren usw.?
-
Am besten sowas:
map< string , vector< map<string , stack> > >
Lautet dann das Prefix etwa mapstrvecmapstrstck?
-
Och ist ganz einfach:
Bsp: vecAsbVenAutos [b]vec[/b]tor gefüllt mit [b]A[/b]utos [b]s[/b]orted [b]b[/b]y [b]Ven[/b]dor mit dem Namen [b]Autos[/b].
Ist doch echt brilliant, nicht? Man hat einfach alle Infos, die man braucht auf einen Blick und das trotzdem absolut intuitiv. Demnächst werd ich wahrscheinlich noch wichtige Termine in die Variablen eintragen, damit ich nicht ständig das Programm wechseln muss, was mich ungeheuer aus meinem Rythmus reißt.
Lautet dann das Prefix etwa mapstrvecmapstrstck?
Ist schon ein ganz guter Ansatz, allerdings fehlen noch 2 entscheidende Dinge:
- die Sortierung (um während dem Programmieren Aufschluss über die Laufzeit zu haben)
- der Name selbstmapKStrVVecMapKStrVStcknsName
Klarerweise mussten auch noch der Key und der Value klarer differnziert werden, ansonsten wurde eben noch die Tatsache angegeben, dass der Vektor nicht sortiert ist und der Name wurde angefügt. Wieder einmal mehr ist bewiesen, dass alle Software Entwickler, die keine Präfixe verwenden keine Ahnung haben ..
-
befürworter schrieb:
Och ist ganz einfach:
Bsp: vecAsbVenAutos [b]vec[/b]tor gefüllt mit [b]A[/b]utos [b]s[/b]orted [b]b[/b]y [b]Ven[/b]dor mit dem Namen [b]Autos[/b].
Ist doch echt brilliant, nicht? Man hat einfach alle Infos, die man braucht auf einen Blick und das trotzdem absolut intuitiv. Demnächst werd ich wahrscheinlich noch wichtige Termine in die Variablen eintragen, damit ich nicht ständig das Programm wechseln muss, was mich ungeheuer aus meinem Rythmus reißt.
Lautet dann das Prefix etwa mapstrvecmapstrstck?
Ist schon ein ganz guter Ansatz, allerdings fehlen noch 2 entscheidende Dinge:
- die Sortierung (um während dem Programmieren Aufschluss über die Laufzeit zu haben)
- der Name selbstmapKStrVVecMapKStrVStcknsName
Klarerweise mussten auch noch der Key und der Value klarer differnziert werden, ansonsten wurde eben noch die Tatsache angegeben, dass der Vektor nicht sortiert ist und der Name wurde angefügt. Wieder einmal mehr ist bewiesen, dass alle Software Entwickler, die keine Präfixe verwenden keine Ahnung haben ..
Hat schon seine Vorteile, wenn der Prefix 10 mal so lang ist wie der eigentliche Variablenname! Das bringt echt Vorteile mit sich!
Ungarische Notation: mapKStrVVecMapKStrVStcknsName
UNIX/Linux-like: name
-
TGGC schrieb:
Hier soll es nicht darum gehen, was schöner aussieht, oder was jemandem persönlich besser gefällt, sondern ob die ungarische Notation durch moderne IDEs nicht mehr nötig ist. Das man nun bequem den Typ Ersetzen kann (Refaktoring), ist übrigens ein weiterer Vorteil, der sich durch moderne IDEs ergibt.
[ automatisch ] schrieb:
Wenn ich was programmier, dann weiß ich doch welche Variable ich brauch
Nicht jeder muss nur mit eigenen Code arbeiten.
Sieben ist die ungefähre Größe des Kurzeitgedächtnis (http://www.google.de/search?hs=Fj9&hl=de&client=firefox-a&rls=org.mozilla%3Ade-DE%3Aofficial&q=Kurzzeitgedächtnis+sieben+dinge+gleichzeitig&btnG=Suche&meta=), übrigens unabhängig von der sonstigen Intelligenz. f'`8k
Bye, TGGC (\-/ returns)
Es gibt mehr als 7 verschiedene Präfixe in der ungarischen Notation, was mach ich jetzt bloß?!
-
Langzeitgedächtnis benutzen. f'`8k
Bye, TGGC (\-/ returns)
-
dragon90# schrieb:
Es gibt mehr als 7 verschiedene Präfixe in der ungarischen Notation, was mach ich jetzt bloß?!
Sie vernünftig organisieren. Die korrekte Aussage ist nicht, dass man sich "sieben Dinge" merken kann sondern "sieben +/- zwei Chunks". Chunks können durchaus auch aus kleineren Teilen zusammengesetzt sein.
Siehe "1 2 3 4 5 6 7 8 9 1 2 3 4 5 6" - da ist bei der Ziffer 7, durchschnittlich aber spätestens bei der 9 Schluß.
Wenn du dir die selbe Ziffernfolge aber als "12 34 56 78 91 23 45 6" merkst, kommt durchschnittlich jeder bis zur 45. Und wennst dir "1 bis 9" und "1 bis 6" als Chunk merkst, hast ohne Probelme die ganze Folge. Letzteres sind nur zwei Chunks. Hättest dann sogar noch ~5 Chunks Platz übrig
Ist also alles eine Frage der Organisation.Intuitiv ist uns das aber sowieso allen klar. Wie merkst du dir z.B. Telefonnummern?
-
Das einzige was ich an der Ungarischen Notation gutfinde bzw. was ich benutze sind "m_" für Membervarialben und eventuell "p" für Pointer. Wobei das p ja eigentlich ausgedient hat, da moderne IDE's Zeiger erkennen und somit den Punkt . durch einen Pfeil -> ersetzten können.
Visual Assistent X macht's vor.
-
Wenn ich das so toll organisieren kann, wozu soll ich mir dann nen Präfix vor die Variable schreiben?
-
Also mit der IDE hat die HN nichts zu tun, sondern viel mehr mit der eingesetzten Programmiersprache.
In C mag man es noch verstehen, aber C++ hat ist eine objektorientierte typensiche Sprache. Da hat HN nichts mehr zu suchen.
Die wird meist nur noch verwendet weil ein Entwickler zu faul ist sich ordentliche Namen für seine Variablen auszudenken (mit ein wenig Überung ist das kein Problem mehr).Wer den Mumm hat sich das mal anzusehen:
http://www.ddj.com/dept/cpp/184403804
Herb Sutter sollte man auf alle Fälle ernst nehmen
Vielleicht öffnet es machen ja die Augen.
MS selbst rät in .NET von der HN sowieso ab."Avoid Hungarian notation. It will make a liar out of you.
Warts are not information, but disinformation."WM_CHEERS
-
Ich finde die ungarische Notation auch ziemlich überflüssig. Ein Source sollte sich lesen wie ein "normaler" Text. Dh, es sollte eigentlich aus dem Kontext klar werden, welchen Typ eine Variable hat. Sinnvolle Namensgebung ist wichtiger, auch weil dadurch Verwendung und Bedeutung ersichtlich sind.
-
Lasst die Variablen doch jeden seine so nennen, wie er am besten damit zurecht kommt. Kritisch wird es erst, wenn man mit mehreren Personen an einem Projekt arbeitet - dann sollte man sich auf eine Schreibweise einigen.
Ich habe auch total chaotisch angefangen mit den Bezeichnungen, aber mit jedem Projekt habe ich meine Schreibweise verbessert, so dass ich jedes Mal besser damit zurecht kam - und darauf kommt es eben erstmal an.
Inzwischen sieht das so aus:
Variablenbezeichner bestehen aus aus einem Präfix (Kleinbuchstaben) abhängig vom Typ und dem Namen. Die Präfixe stehen nur für den Basistyp und sind unabhängig von Indirektionen (Pointer, Referenzen) oder 'const'.
Präfixe für Variablenbezeichner:
b: bool
c: char/char*
h: Funktionszeiger (Callbacks)
o: Objekte (Typ wird aus dem Namen klar, ansonsten wäre auch der Präfix zu lang)
s: sint8/sint16/sint32/sint64 (ganzzahlig, mit Vorzeichen)
u: uint8/uint16/uint32/uint64 (ganzzahlig, ohne Vorzeichen)
v: void*
w: wchar_t/wchar_t*Typbezeichner bestehen aus einem Präfix (Großbuchstaben) für die Art des Typs, gefolgt vom Namen.
Präfixe für Typbezeichner:
S: struct (SBlubb, SBla, SWasAuchImmer)
C: class (CBlubb, CBla, CWasAuchImmer)
T: für spezielle Typedefs (TSize, TOffset, TPosition - jeweils Systemabhängig, ähnlich wie size_t)Statische Variablen haben vor dem Präfix noch ein '_' (wobei ich noch nicht weiß, ob das Probleme verursachen kann. Eine bessere Lösung habe ich hier noch nicht.).
Auf Membervariablen der aktuellen Klasse wird explizit per 'this->' zugegriffen.
[edit]Inzwischen habe ich mir auch vorgeschrieben, Bezeichner nicht mehr abzukürzen (uPosition statt uPos, sOffset statt sOff, uLength statt uLen, etc.), seien die Bezeichner auch noch so lang. Die Abkürzungen waren vor IntelliSense schneller zu schreiben, aber dafür war der Code schwerer zu lesen.[/edit]
Ob andere damit klar kommen ist unwichtig, solange ohnehin nur ich an dem Projekt arbeite.
-
Neku schrieb:
Lasst die Variablen doch jeden seine so nennen, wie er am besten damit zurecht kommt. Kritisch wird es erst, wenn man mit mehreren Personen an einem Projekt arbeitet - dann sollte man sich auf eine Schreibweise einigen.
Ich habe auch total chaotisch angefangen mit den Bezeichnungen, aber mit jedem Projekt habe ich meine Schreibweise verbessert, so dass ich jedes Mal besser damit zurecht kam - und darauf kommt es eben erstmal an.
Inzwischen sieht das so aus:
Variablenbezeichner bestehen aus aus einem Präfix (Kleinbuchstaben) abhängig vom Typ und dem Namen. Die Präfixe stehen nur für den Basistyp und sind unabhängig von Indirektionen (Pointer, Referenzen) oder 'const'.
Präfixe für Variablenbezeichner:
b: bool
c: char/char*
h: Funktionszeiger (Callbacks)
o: Objekte (Typ wird aus dem Namen klar, ansonsten wäre auch der Präfix zu lang)
s: sint8/sint16/sint32/sint64 (ganzzahlig, mit Vorzeichen)
u: uint8/uint16/uint32/uint64 (ganzzahlig, ohne Vorzeichen)
v: void*
w: wchar_t/wchar_t*Typbezeichner bestehen aus einem Präfix (Großbuchstaben) für die Art des Typs, gefolgt vom Namen.
Präfixe für Typbezeichner:
S: struct (SBlubb, SBla, SWasAuchImmer)
C: class (CBlubb, CBla, CWasAuchImmer)
T: für spezielle Typedefs (TSize, TOffset, TPosition - jeweils Systemabhängig, ähnlich wie size_t)Statische Variablen haben vor dem Präfix noch ein '_' (wobei ich noch nicht weiß, ob das Probleme verursachen kann. Eine bessere Lösung habe ich hier noch nicht.).
Auf Membervariablen der aktuellen Klasse wird explizit per 'this->' zugegriffen.
[edit]Inzwischen habe ich mir auch vorgeschrieben, Bezeichner nicht mehr abzukürzen (uPosition statt uPos, sOffset statt sOff, uLength statt uLen, etc.), seien die Bezeichner auch noch so lang. Die Abkürzungen waren vor IntelliSense schneller zu schreiben, aber dafür war der Code schwerer zu lesen.[/edit]
Ob andere damit klar kommen ist unwichtig, solange ohnehin nur ich an dem Projekt arbeite.
Auschreiben. pffff. Ich kürze zB buffer IMMER mit buf ab. Dann hab ich keine probleme zu lesen. Okay Offset kling besser wie Off, weil Off nciht iendeutig ist. Aber bei Len weiß doch jeder, dass length gemeint ist...
-
Ein ganz kurzer schrieb:
Auschreiben. pffff. Ich kürze zB buffer IMMER mit buf ab. Dann hab ich keine probleme zu lesen. Okay Offset kling besser wie Off, weil Off nciht iendeutig ist. Aber bei Len weiß doch jeder, dass length gemeint ist...
Ich gebe zu, die Beispiele waren nicht die besten
-
Neku schrieb:
Ein ganz kurzer schrieb:
Auschreiben. pffff. Ich kürze zB buffer IMMER mit buf ab. Dann hab ich keine probleme zu lesen. Okay Offset kling besser wie Off, weil Off nciht iendeutig ist. Aber bei Len weiß doch jeder, dass length gemeint ist...
Ich gebe zu, die Beispiele waren nicht die besten
Na dann ist ja gut.
-
Neku schrieb:
Variablenbezeichner bestehen aus aus einem Präfix (Kleinbuchstaben) abhängig vom Typ und dem Namen. Die Präfixe stehen nur für den Basistyp und sind unabhängig von Indirektionen (Pointer, Referenzen) oder 'const'.
Was bringt es dir dann? du bist am ende genauso klug wie jemand der keine prefixe verwendet...
schlimmer noch:
cFoo
soll ein zeiger sein? aua aua aua.Ob andere damit klar kommen ist unwichtig, solange ohnehin nur ich an dem Projekt arbeite.
das ist imho die falsche einstellung...
PS:
naja, schon komisch was manche leute fuer vorlieben haben... da lob ich mir ehrlich gesagt typenlose sprachen, da kommen die leute nicht auf so komische ideen...
oder javafuer all seine fehler, wenigstens kommt dort keiner auf die idee ungarisch zu verwenden... immer diese C altlasten