… und was zum Lachen mal in diesem Fall. Einen kleinen Einblick in die Vielfalt eines OpenSource-Projektes liefert folgender Schnipsel:
[code lang="csharp"]public void ResetChildPrimPhysicsPositions()
{
AbsolutePosition = AbsolutePosition; // could someone in the know please explain how this works?
// teravus: AbsolutePosition is NOT a normal property!
// the code in the getter of AbsolutePosition is significantly different then the code in the setter!
}[/code]
Schauen wir uns das mal an: Der Inhalt einer Variable wird ohne weitere Modifikation derselben zugewiesen. Und jemand schreibt dazu: Kann mir ein Wissender einmal erklären, wie das funktionieren soll? Zu Recht, glaubt man zunächst. Ich finde das „in the know“ wirklich Klasse, viel netter als im Deutschen und humorvoll. Und auch das „how“ ist nett, denn DASS es klappt ist ja eh klar, die Frage ist nur: Was soll das überhaupt?
Die Antwort dazu liefert nicht wirklich Aufschluss, ist auch ziemlich trocken, lediglich sagt sie im Prinzip: „Macht Sinn“. Sicherlich mag nicht jeder darüber schmunzeln können, ich jedoch musste herzhaft lachen als ich über diesen kleinen Ausschnitt des OpenSim-Projekts gestolpert bin.
Mein Kommentar dazu: Oh ja, es mag tatsächlich Sinn machen. Und zwar dann, wenn der Inhalt der Variable vorher nicht „sauber“ war. Wir kennen das von arithmetischen Zuweisungen im Shell-Bereich. Nehmen wir einmal folgenden Befehl:
[code lang=“bash“] zahl = “ 5″[/code]
Damit steht in der Variable „zahl“ ein String der hinten nach einer Zahl riecht. Sauber ist das natürlich nicht, und das simple Statement:
[code lang=“bash“]zahl = `expr $zahl`[/code]
bereinigt die Situation. Jetzt steht tatsächlich nur noch die Ziffer 5 in der Variable zahl. Eine Art trimmen hat stattgefunden. Jetzt mag man sagen, aber das steht doch oben nicht im Code, da fehlt doch der Aufruf eines Programms wie „expr“. Dabei vergisst man aber, dass Hochsprachen-Compiler Code generieren der das sogenannte Coercion ausführt, eine Typwandlung zum möglichst Passenden. So wird ein String „5“ der durch irgendeinen dummen Zufall in einer Integer-Variable enthalten sein mag durch eine erneute Zuweisung zu einer echten Zahl. Allerdings hätte da bei der primären Zuweisung schon dasselbe passieren sollen aber das hat möglicherweise ein Dritter gebaut 😉
Und nein, ich werde meine Gedanken dazu nicht in die Quelldateien einbauen, erstens bin ich nicht Mitglied des ehrenwerten Gremiums und zweitens – bei allem Verständnis für humorvolles Arbeiten – finde ich einen chat über die Sourcen dann doch etwas mühsam. ^^