DeleteElement - hat eine unsinnige Strukturfalle

Fragen und Bugreports zur PureBasic 4.0-Beta.
Cardian
Beiträge: 40
Registriert: 15.11.2004 01:24

DeleteElement - hat eine unsinnige Strukturfalle

Beitrag 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 ...
Zuletzt geändert von Cardian am 17.06.2006 02:46, insgesamt 2-mal geändert.
Benutzeravatar
Deeem2031
Beiträge: 1232
Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Kontaktdaten:

Beitrag 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?
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]
Cardian
Beiträge: 40
Registriert: 15.11.2004 01:24

Beitrag 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().
Cardian
Beiträge: 40
Registriert: 15.11.2004 01:24

Beitrag 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)
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
PMV
Beiträge: 2765
Registriert: 29.08.2004 13:59
Wohnort: Baden-Württemberg

Beitrag 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
alte Projekte:
TSE, CWL, Chatsystem, GameMaker, AI-Game DLL, Fileparser, usw. -.-
Gesperrt