Seite 1 von 1

DeleteElement - hat eine unsinnige Strukturfalle

Verfasst: 17.06.2006 02:19
von Cardian
*** Vorsicht beim Lesen ***
EDIT: Ich meine in Wirklichkeit DeleteElement!!!
*** Vorsicht beim Lesen ***



Wollte nur mal auf die ziemlich blöde Gestaltung von PreviousElement hinweisen.

Warum wird, wenn das aktuelle Element das Erste ist und PreviousElement() aufgerufen, wird eine Null zurückgegeben? Während sonst immer die Adresse zurückgegeben wird.
Das ist ein programmierter Sonderfall und letztlich eine nette (un)logische Falle.

Sinnvoll und richtig ist es: bei PreviousElement IMMER die Adresse zurückzuliefern und Null nur wenn keine Elemente existieren.
Wenn jmd auf dem ersten Element steht und PreviousElement(xy) aufruft, darf sich nichts ändern bzw. muß die Liste dieselbe Adresse liefern.

Wollte nur mal auf diesen unglücklichen Strukturfehler hinweisen!
Nicht sauer sein ... das übernehme ich schon ;)


PS:
Wenn man übrigens ein Flag da einfügen will, wäre es bestenfalls sinnvoll mit einem PreviousElement(XY(), 1) vom ersten rückwärts auf das letzte Element zu springen. Dann kann man Schleifen laufen lassen.

Eine weiterer Wert könnte eine Schrittweite anzeigen.

Bsp: PrevElement(Liste(), 1, 3) läuft dann eine Endlosliste in Dreier-Schritten durch ...

Verfasst: 17.06.2006 02:32
von Deeem2031
Schön das du uns auf den nicht vorhandenen Bug aufmerksam machst...

Überleg doch ma, bevor es ForEach gab (was noch nich so lange her is) hat man meist "While NextElement(LL())" geschrieben - was bedeutet er nimmt immer das nächste Element bis 0 zurückgegeben wird - also kein Element mehr existiert. Ansonsten müsste man ja kontrollieren ob der letzte Wert genauso ist wie der jetztige damit man weiß das es kein weiteres gibt - kling umständlich und ist es sicherlich auch.
Waru sollte es also bei PreviousElement() anders sein?

Verfasst: 17.06.2006 02:38
von Cardian
Shit ... ich hab zu später Stunde mich mit einem Hybrid von PreviousElement und DeleteElement angelegt. :(

PreviousElement hat die besagte Funktionalität gar nicht. Ich meine natürlich DeleteElement().

Verfasst: 17.06.2006 02:44
von Cardian
@Deeem: Ja schon klar, daß mit Next- und PrevElement. Nur beim DeleteElement frag ich mich nach dem Sinn des Flags.
Gibt es einen Grund warum DeleteElement bei fehlenden vorlaufenden oder fehlenden nachlaufenden Elementen nicht das aktuelle löscht und die Liste mit den entsprechend vorhandenen aktualisiert?
So Zeug hat man schon so oft in C/C++ programmiert ... und das ist alles kein Beinbruch.

*So! Meckerquote erfüllt für diesen Monat!* 8)

Verfasst: 17.06.2006 02:47
von ts-soft
DeleteElement wurde in PB 3.92 geändert
PureBasic Geschichte hat geschrieben:Geändert: DeleteElement() geht jetzt immer zurück zum vorherigen Element (kann damit außerhalb der Liste liegen,
wenn es das erste Element war), um voll kompatibel mit ForEach zu sein. Ein optionaler Flag wurde
hinzugefügt, um die bisherige Verhaltensweise weiterhin zu ermöglichen

Verfasst: 17.06.2006 03:08
von PMV
öh, DeleteElement() löscht doch das aktuelle Element? Nicht das
vorheriege oder das anschließende :?

Und springt dann je nach Flag zu dem davor, oder dem dannach bzw kann
es auch dann sein, das kein Element ausgewählt ist.

Ich versteh dein Problem nicht? /:->
Damit müsste doch jedem gedient sein?

MFG PMV