Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

51

01.09.2010, 16:06

Hallo

Tippen ist beim Programmieren in der Regel nicht der begrenzende Faktor.

chrische

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

52

01.09.2010, 18:40

Ich benutze die Ungarische Natation auch nicht.
Warum auch....

MfG Stazer

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

53

02.09.2010, 09:39

Zitat

Wenn aus einem Namen und seinem Kontext nicht klar ersichtlich ist was es sein muss dann ist der Name ein schlechter Name und/oder der Kontext ein schlechter Kontext.

In gutem Code mit gut gewählten Bezeichnern sind Semantik und Typ eines Objektes aus seinem Namen und Kontext offensichtlich.

Kannst Du mal ein Beispiel machen, bei dem ersichtlich wird, ob es sich um eine lokale Variable, einen Parameter oder um ein Attribut handelt? Das sehe ich nämlich irgendwie nicht, wenn ich z.B. an einen Login-Handler denke, der ein Passwort-Attribut hat, das gleiche aber auch als lokale Variable existieren könnte. Ohne differenzierte Schreibweise sehe ich nicht, wie man da einen Bezeichner so wählen kann, dass der Scope ersichtlich wird. Oder habe ich dich da eventuell falsch verstanden? (über Scope hast Du ja in diesem Quote nicht direkt gesprochen, das war in einem älteren)
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

54

02.09.2010, 10:35

Es fällt mir auch immer schwer mir vorzustellen, dass man aus jeder Variable den Typ auf Anhieb herauslesen kann.
Sei es nur ein player->speed. Ist das jetzt ein int, ein float oder ein Vector? Wenn ich es player->speedVector nenne, dann kann ich auch gleich player->vSpeed nehmen. ;)
IntelliSense ist fein, aber wenn ich auf einen Code mit vielen Variablen schaue, kann es nervig sein jede Variable zu überprüfen.
Das man für Zählvariablen wie 'i', 'j' keine Ungarische Notation braucht ist (fast) klar. (Wobei 'i' ansich ja schon für Index steht ;) )

Es ist ja jedem selbst überlassen, ich persönlich bevorzuge es jedoch. Für eigene Projekte habe ich immer einen Code Style Guide der laufend ergänzt wird und wo beschrieben wird wie Variablen. und Funktionsnamen aufgebaut sein sollen. Egal wie man notiert, ein Style Guide ist immer sinnvoll, besonders wenn man mit mehreren Leuten zusammen arbeitet.

55

02.09.2010, 11:08

Hallo

Warum ist es denn wichtig, ob es sich um ein float, int oder double handelt? Was ist mit den oben genannten Kritikpunkten, dass es einfach nicht konsequent eingesetzt werden kann, wenn man eigene Klasse verwendet. Wenn man übrigens nur vSpeed schreibt, weißt du überhaupt nicht welchen typ die Variablen in deinem vector haben. War das schon einmal ein Problem? Eher nicht. Es spielt praktisch keine Rolle.

chrische

MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

56

02.09.2010, 12:34

Hallo

Warum ist es denn wichtig, ob es sich um ein float, int oder double handelt? Was ist mit den oben genannten Kritikpunkten, dass es einfach nicht konsequent eingesetzt werden kann, wenn man eigene Klasse verwendet. Wenn man übrigens nur vSpeed schreibt, weißt du überhaupt nicht welchen typ die Variablen in deinem vector haben. War das schon einmal ein Problem? Eher nicht. Es spielt praktisch keine Rolle.

chrische

Nun, dazu muss ich sagen, bei den eigenen Projekten haben wir wie gesagt unseren eigenen Code Style Guide. Da ist genau beschrieben was wie benannt werden soll.
Vectoren für Geschwindigkeit sind bei uns in der Regel immer float, ansonsten wird das entsprechend durch einen Präfix gekennzeichnet. Natürlich ist es bei Zuweisungen wichtig zu wissen was für ein Typ es ist.
Objekte werden Allgemein mit o bezeichnen (oPlayer). Das liefert genug Informationen für solche Fälle. Unsere Notation ist auch nur an die Ungarische angelehnt.

Hier an der Arbeit haben wir hunderte Programmodule, mit der entsprechenden Notation ist es viel einfacher an diesen Anpassungen vorzunehmen, da man den Code viel schneller versteht. Wenn ich eine Klasse benutze, muss ich mich mit dieser sowieso auseinander setzen. Aber bei den atomaren Datentypen will ich nicht jedesmal zur Definition. Die Module in denen keine Notation benutzt wurde werden von allen gemieden.

Letztendlich ist es wie gesagt Geschmackssache. Ich bevorzuge es so, und das gilt auch für alle Mitarbeiter. Nichts ist schlimmer als Code, der nicht einheitlich ist.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

57

02.09.2010, 13:45

Kannst Du mal ein Beispiel machen, bei dem ersichtlich wird, ob es sich um eine lokale Variable, einen Parameter oder um ein Attribut handelt? Das sehe ich nämlich irgendwie nicht, wenn ich z.B. an einen Login-Handler denke, der ein Passwort-Attribut hat, das gleiche aber auch als lokale Variable existieren könnte. Ohne differenzierte Schreibweise sehe ich nicht, wie man da einen Bezeichner so wählen kann, dass der Scope ersichtlich wird. Oder habe ich dich da eventuell falsch verstanden? (über Scope hast Du ja in diesem Quote nicht direkt gesprochen, das war in einem älteren)

Wenn deine Funktionen so lang und unübersichtlich sind dass man den Überblick über die lokalen Objekte verliert dann ist das wiederum ein Indikator für ein Designproblem (die Klasse tut zuviel => schlechter Kontext). Anstatt alles mit ungarischer Notation zu pflasten sollte man dann lieber versuchen den Code so umzustrukturieren dass er übersichtlich wird.

Es fällt mir auch immer schwer mir vorzustellen, dass man aus jeder Variable den Typ auf Anhieb herauslesen kann. Sei es nur ein player->speed. Ist das jetzt ein int, ein float oder ein Vector?

Etwas mit dem Namen speed ist eindeutig eine skalare Größe. Wenn es sich um einen Geschwindigkeitsvektor handeln würde, dann würde man es velocity nennen. Abgesehen davon zeigt praktisch jede IDE die ich kenne den genauen Typ an wenn ich mit der Maus drauf stehen bleibe und unterstützt Dinge wie "Go to Declaration". Und wenn man es wirklich nötig hat dann gibts in Visual C++ z.B. das Code Definition Window.

Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von »dot« (02.09.2010, 13:55)


MCP

Alter Hase

Beiträge: 513

Wohnort: Paderborn

Beruf: Software-Entwickler

  • Private Nachricht senden

58

02.09.2010, 14:28

Etwas mit dem Namen speed ist eindeutig eine skalare Größe. Wenn es sich um einen Geschwindigkeitsvektor handeln würde, dann würde man es velocity nennen. Abgesehen davon zeigt praktisch jede IDE die ich kenne den genauen Typ an wenn ich mit der Maus drauf stehen bleibe und unterstützt Dinge wie "Go to Declaration". Und wenn man es wirklich nötig hat dann gibts in Visual C++ z.B. das Code Definition Window.
Nun, auf so Dinge wie IntelliSense bin ich in meinem Post ja schon eingegangen. Das ist ein tolles Feature das es leichter macht, aber wie gesagt: Ich mag es lieber wenn ich alles im Blick habe und nicht jede Variable einzeln checken muss.
In dem Fall magst Du mit dem Namen Recht haben, aber es gibt Situationen wo es nicht so eindeutig ist. Ich muss auch zugeben, dass ich nicht auf velocity gekommen wäre. ;)

hanse

Alter Hase

Beiträge: 472

Wohnort: Wien

  • Private Nachricht senden

59

02.09.2010, 14:37

1. Wenn du nicht jedes mal zur Definition gehen willst, merk dir doch einfach wie das Interface der Klasse aufgebaut ist.
2. ein weiteren Nachteil (neben der Tatsache das sie komplett obsolet ist) der UN ist, dass sie nicht strikt definiert ist. Jedes Team oder soger jeder Coder hat eine eigene Version davon, dadurch stiftet man nur Verwirrung.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

60

02.09.2010, 14:44

Nun, auf so Dinge wie IntelliSense bin ich in meinem Post ja schon eingegangen. Das ist ein tolles Feature das es leichter macht, aber wie gesagt: Ich mag es lieber wenn ich alles im Blick habe und nicht jede Variable einzeln checken muss.
In dem Fall magst Du mit dem Namen Recht haben, aber es gibt Situationen wo es nicht so eindeutig ist. Ich muss auch zugeben, dass ich nicht auf velocity gekommen wäre. ;)

Natürlich ist IntelliSense nur ein tolles aber nicht immer verfügbares Feature und es gibt sicherlich Sitationen wo ein Name nicht so eindeutig sein mag. Ich habe aber in all den Jahren in denen ich mich jetzt mit Programmieren beschäftige noch nie eine Situation erlebt in der Ungarische Notation irgendetwas lesbarer gemacht hätte. Eigentlich war imo durchgehend das Gegenteil der Fall. Meiner Erfahrung nach ist, wie gesagt, wenn ein Name nicht eindeutig ist, praktisch immer entweder der Name schlecht oder der Kontext in dem er verwendet wird schlecht gewählt (d.h. das Problem mit dem uneindeutigen Name wäre in einem anderen, besseren Programmdesign nicht vorhanden).

Werbeanzeige