Du bist nicht angemeldet.

Werbeanzeige

311

19.10.2013, 19:21

Es ging darum eine Liste zu implementieren, bestehend aus einer Verwaltungsklasse (List), einer Interface für die Listenelemente (IListItem) und 2 von IListItem abgeleiteten Klassen: ListItem und ListEnd.

Wenn nun die Hinzufügen-Methode aufgerufen wird, wird diese von jedem ListItem rekursiv weiter aufgerufen, bis man bei ListEnd angekommen ist.
Er wollte dann, dass ListEnd sich selbst mit einer neuen Instanz von ListItem überschreibt.

312

21.10.2013, 14:14

Genau; und das war völlig in Ordnung.

Man konnte in frühen Implementierungen von C++ this als Lvalue behandeln (weil es einfach als unsichtbarer zusätzlicher Parameter implementiert war). Dann konnte man via

C-/C++-Quelltext

1
while(this = this->pNext)
durch die Liste iterieren, in der das Objekt liegt.



Je nachdem, in welcher Sprache man programmiert, geht das auch heute noch (und ist garnicht so wtf).

313

21.10.2013, 16:27

Mein Lehrer hatte aber vor, das aktuelle Objekt komplett mit einer neuen Instanz einer anderen Klasse zu überschreiben, damit auch sämtliche Pointer, die vorher noch auf dieses Objekt zeigen gültig bleiben.

314

28.10.2013, 23:20

Jetzt kann ich auch endlich mal einen Codeschnipsel anbieten :D
Woher: Heute in den Kleingruppen-Übungen zu Programmierung 1. Semester von einem HiWi aus dem 5. Semester oder so ...

Kann mich leider nicht an den kompletten Code errinnern aber so ungefähr war er:

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class ArrayList
{
...
    public ArrayList merge(ArrayList that)
    {
        ArrayList newList = new ArrayList();
        ArrayList otherThat = that;
        ArrayList otherThis = this;

        // Hier wurden veränderungen an 'otherThat' und 'otherThis' vorgenommen

        return newList;
    }
...
}


Der genial Grund für 'otherThat' und 'otherThis' war, dass er ja nicht die Originale verändern wollte ... :dash:
Tipp: Reference-Types ...

Fred

Supermoderator

Beiträge: 2 130

Beruf: Softwareentwickler

  • Private Nachricht senden

315

02.11.2013, 16:29

Java kann da aber auch wirklich hässlich sein.
Gut daran zu denken und dann die Referenzsemantik doch nicht verstanden zu haben, ist unsinnig.

Aber mich hat Java damit auch schon das ein ums andere Mal in den Wahnsinn getrieben. Gerade auch, wenn man zum Beispiel primitive Datentypen mit echter Referenzsemantik braucht(Integer etc. sind ja Immutable und daher bringen Referenzen ja auch nicht wirklich etwas).

316

15.11.2013, 17:36

Oh Mann, jetzt finde ich so was auch bei mir:

C-/C++-Quelltext

1
2
3
4
5
std::int8_t swap16n(const std::int16_t s, const char endianness)
{   
    return ((s & 0x00FF) << 8 | (s & 0xFF00) >> 8);
}
std::int16_t length = swap16n(tag.nameLength, m_order);


Zur Erläuterung: Den Fehler habe ich durch die Umstellung auf andere Datentypen erhalten. Und jetzt habe ich zusammengerechnet etwa 3 Stunden lang nach dem Fehler gesucht, weshalb length immer 0 ist (tag.nameLength ist in den Tests nie größer als 127 gewesen). Das ist ärgerlich....

PS.: Immer wenn ich seit neuester Zeit Code poste, wird dieser zusammengequetscht. Was mache ich falsch ?(
#EDIT: Danke euch, jetzt sieht´s schon deutlich besser aus ;)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »EuadeLuxe« (17.11.2013, 11:16)


317

15.11.2013, 18:06

Auf Quellcode-Modus umschalten.

Sacaldur

Community-Fossil

Beiträge: 2 326

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

318

15.11.2013, 18:08

PS.: Immer wenn ich seit neuester Zeit Code poste, wird dieser zusammengequetscht. Was mache ich falsch ?(

Du benutzt beim Schreiben des Kommentars die "Editor".Ansicht, nicht die "Quellcode"-Ansicht (kann man oberhalb der Schriftart umstellen). Es dürfte bereits reichen, den Code in der "Quellcode" Ansicht einzufügen und dann wieder zurück zu wechseln (sollte man lieber einen WYSIWYG-Editor haben, statt BB-Code zu schreiben).
Aber das wurde schon diverse Male an anderen Stellen erwähnt...
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

FSA

Community-Fossil

  • Private Nachricht senden

319

16.11.2013, 23:20

Neulich bei mir gefunden. Quellcode aus dem Jahre 2009 :thumbsup:

C-/C++-Quelltext

1
2
3
void Global::EventHandler::GetPickedObject(int iID, CCamera* camera, Matrix &mOut, Object* objectOut, Event** event)
{
}

Ich glaube das ist der ordentlichste Funktionskopf den ich je geschrieben habe! :thumbup:

Zitat

Der RCCSWU (RandomCamelCaseSomtimesWithUndersquare) Stil bricht auch mal mit den veralteten strukturierten Denkmustern und erlaubt dem Entwickler seine Kreativität zu entfalten.

BlueCobold

Community-Fossil

Beiträge: 10 859

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

320

19.11.2013, 14:47

Quellcode

1
2
if (position == null || position.direction < 0 || position.direction > 360)
    return 0; // TODO: Define an error value e.g. -1

Code von 2005
So viel zu // TODO
Am besten gar nicht nutzen und es gleich richtig machen. Mit solchen Bugs leben wir jetzt im Jahre 2013 mit Millionen falscher Bestandsdaten aus 8 Jahren.
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]

Werbeanzeige