principle of least privilige, const und call by value
-
Es gibt hin und wieder methoden, die nur für konstante Objekte aufgerufen werden können, bzw. Methoden, die für konstante und nicht-konstante Objekte überladen sind und bei denen die const-version ungleich schneller ist. Wenn du die Methoden von deiner Kopie verwenden willst, muss sie const sein.
-
ThaRealMatix schrieb:
hm mir ist immer noch nicht ganz klar, wozu ich const im Kontext mit call-by-value benutzen sollte
Außerhalb der Funktion nutzt es nichts. Innerhalb der Funktion schon, weil man dadurch Fehler vermeidet, wenn man z.B. aus Versehen der Variablen einen Wert zuweist, was man gar nicht machen wollte, dann meldet der Compiler einen Fehler.
Es gibt Sprachen (z.B. Nemerle), da ist *jeder* Wert 'const', wenn man ihn nicht explizit als 'mutable' deklariert. Finde ich sehr sympatisch, diesen Ansatz, denn normalerweise ändert sich eine Variable nicht mehr, nachdem man ihr einmal einen Wert verpasst hat.
-
Konrad Rudolph schrieb:
normalerweise ändert sich eine Variable nicht mehr, nachdem man ihr einmal einen Wert verpasst hat.
Das ist aber ein bisschen wiedersprüchlich, nicht?

-
drakon schrieb:
Konrad Rudolph schrieb:
normalerweise ändert sich eine Variable nicht mehr, nachdem man ihr einmal einen Wert verpasst hat.
Das ist aber ein bisschen wiedersprüchlich, nicht?

Häng Dich nicht an den Vokabeln auf, es sollte doch klar sein, was ich meinte. Nenn es halt „Wert“ statt „Variable“.
-
Konrad Rudolph schrieb:
drakon schrieb:
Konrad Rudolph schrieb:
normalerweise ändert sich eine Variable nicht mehr, nachdem man ihr einmal einen Wert verpasst hat.Das ist aber ein bisschen wiedersprüchlich, nicht?

Häng Dich nicht an den Vokabeln auf, es sollte doch klar sein, was ich meinte. Nenn es halt „Wert“ statt „Variable“.
Hab ich nicht vor, aber ich meinte eher, dass wenn ich Variabeln/Werte habe, dann
brauche ich die auch und ändere die entsprechend auch und das eigentlich nicht gerade wenig, im Allgemeinen. Vor allem das "Normalerweise", finde ich, weckt ein
wenig falsche Vorstellungen.
-
drakon schrieb:
Konrad Rudolph schrieb:
normalerweise ändert sich eine Variable nicht mehr, nachdem man ihr einmal einen Wert verpasst hat.
… wenn ich Variabeln/Werte habe, dann
brauche ich die auch und ändere die entsprechend auch und das eigentlich nicht gerade wenig, im Allgemeinen. Vor allem das "Normalerweise", finde ich, weckt ein
wenig falsche Vorstellungen.Hmm. Dann solltest Du Dir mal Deinen Code genau anschauen. Bedenke, dass jede Variable genau *einen* Zweck erfüllen sollte und nicht recycled wird. Unter diesen Voraussetzungen gibt es eigentlich nur drei Arten von Variablen, die man überhaupt ändert (normalerweise, Ausnahmen gibt's immer):
– Zählvariablen in Schleifen,
– Aggregatoren (also Variablen, die Zwischenergebnisse speichern), und
– Container.Alle anderen Variablen sind temporäre Werte, die man häufig nur ein einziges Mal schreibt und auch oft nicht häufiger liest, die also nur der Übersichtlichkeit (oder Effizient) in Variablen wegen zwischengespeichert werden.
Mengenmäßig machen diese Variablen in sauberem Code einen großen Teil aus (vor allem in Sprachen, in denen man mehr Rekursion als Iteration verwendet, aber auch in anderen). Und all diese Variablen könnten Konstanten sein.
Du magst recht haben, in C++ ist das „normalerweise“ evtl. nicht ganz richtig, da man in C++ überdurchschnittlich häufig Variablen der oben aufgezählten Arten benötigt. Trotzdem sind es in meinen Codes schätzungsweise 60%. Und je mehr man kapselt, desto mehr werden es, weil dadurch immer mehr Aggregatoren und Zählvariablen wegfallen.
-
Also ich beziehe mich jetzt auf Spieleprogrammierung.
Und dort gibt es relativ viele Variabeln, die ihren Wert im Laufe der Zeit
ändern. (Zeit, Punkte, Geschwindigkeit, Namen, Zustandswerte...)Und da soo viele Zeilen in C++ für Games geschrieben werden, wird hier
die "Normalität" wohl eher bei variablen Variabeln liegen.
Aber ich denke mal, du hast in sonstigen Programmen schon recht.
-
Also ich beziehe mich jetzt auf Spieleprogrammierung.
Also das spielt jetzt nun doch ganz und gar keine Rolle.
Nein, wirklich nicht!
Simon
-
drakon schrieb:
Also ich beziehe mich jetzt auf Spieleprogrammierung.
Und dort gibt es relativ viele Variabeln, die ihren Wert im Laufe der Zeit
ändern. (Zeit, Punkte, Geschwindigkeit, Namen, Zustandswerte...)Und da soo viele Zeilen in C++ für Games geschrieben werden, wird hier
die "Normalität" wohl eher bei variablen Variabeln liegen.
Aber ich denke mal, du hast in sonstigen Programmen schon recht.
Diese Werte hat man aber normalerweise (*g*) auch in Membervariablen vorliegen und nicht in lokalen Variablen. Und wenn ich ihn richtig verstehe dann hat Konrad schon lokale Variablen gemeint.
-
Also wenn er wirklich lokale gemeint habe, dann gebe ich ihm Recht.
Aber er hat das im Zusammenhang einer anderen Programmiersprache gesagt und
ich habe es so im allgemeinen verstanden.