AClone(): Unterschied zwischen den Versionen

Aus Wiki des Deutschsprachige Xbaseentwickler e. V.
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
Zeile 36: Zeile 36:


== Besonderheiten ==
== Besonderheiten ==
=== Performanceschub bei grossen Arrays ===


Programmtechnisch kann es bei besonders grossen Arrays vorkommen, dass die Performance von AClone() schlecht ist. Es gibt die Möglichkeit, mit [[Var2Bin()]] und [[Bin2Var()]] AClone() zu simulieren:
Programmtechnisch kann es bei besonders grossen Arrays vorkommen, dass die Performance von AClone() schlecht ist. Es gibt die Möglichkeit, mit [[Var2Bin()]] und [[Bin2Var()]] AClone() zu simulieren:
Zeile 47: Zeile 49:


[https://www.xbaseforum.de/viewtopic.php?f=32&t=11239#p129975 Quelle]
[https://www.xbaseforum.de/viewtopic.php?f=32&t=11239#p129975 Quelle]
=== einfache und komplexe Datentypen ===
Einfache Datentypen (String, Numerisch, Logisch) in Array-Elementen werden kopiert, während bei komplexen Datentypen (Objekte) nur ein Verweis auf das Objekt kopiert wird. Ein Array-Element enthält ja nicht ein beliebiges Objekt, sondern nur einen Pointer auf das Objekt. AClone() kopiert diesen Pointer, und damit verweist auch das Array-Element im geklonten Array auf das gleiche Objekt:
aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aEins[3]:title := "was neues"
? aZwei[3]:title => "was neues"
Um unabhängige Objekte zu erhalten, müsste das entsprechende Element neu zugewiesen werden:
aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aZwei[3] := SetAppWindow()
aEins[3]:title := "was neues"
? aZwei[3]:title => (der bisherige Titel)





Aktuelle Version vom 10. Februar 2020, 20:12 Uhr

Allgemeines

AClone() erlaubt es, ein Array zu kopieren.

Ein Array existiert normalerweise nur einmal, und die Zuweisung eines Arrays an eine andere Variable erzeugt in der Zielvariablen nur eine Referenz:

aDaten := {"heute", "morgen", "übermorgen"}
aDaten2 := aDaten
aDaten2[2] := "nie"
? aDaten[2]  ==> "nie"

AClone() erzeugt eine Kopie des Arrays und weist diese einer Variablen zu.

Im Gegensatz zu ACopy() kopiert AClone() auch mehrdimensionale Arrays.


Syntax

AClone(aArray) => aGeklontesArray


Parameter

<aArray> ist ein Array, von dem eine identische Kopie erzeugt werden soll.



Rückgabewert

<aGekontesArray> ist eine identische Kopie von aArray.


Besonderheiten

Performanceschub bei grossen Arrays

Programmtechnisch kann es bei besonders grossen Arrays vorkommen, dass die Performance von AClone() schlecht ist. Es gibt die Möglichkeit, mit Var2Bin() und Bin2Var() AClone() zu simulieren:

vtemp:=var2Bin(atemp)
afilt:=bin2var(vtemp)

anstelle von

aFilt := AClone(aTemp)

Quelle

einfache und komplexe Datentypen

Einfache Datentypen (String, Numerisch, Logisch) in Array-Elementen werden kopiert, während bei komplexen Datentypen (Objekte) nur ein Verweis auf das Objekt kopiert wird. Ein Array-Element enthält ja nicht ein beliebiges Objekt, sondern nur einen Pointer auf das Objekt. AClone() kopiert diesen Pointer, und damit verweist auch das Array-Element im geklonten Array auf das gleiche Objekt:

aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aEins[3]:title := "was neues"
? aZwei[3]:title => "was neues"

Um unabhängige Objekte zu erhalten, müsste das entsprechende Element neu zugewiesen werden:

aEins := {"a", 1, SetAppWindow()}
aZwei := AClone(aEins)
aZwei[3] := SetAppWindow()
aEins[3]:title := "was neues"
? aZwei[3]:title => (der bisherige Titel)


Querverweise

ACopy()


benötigte DLLs bzw. Include-Dateien

XPPRT1.dll

Zuordnung

Arrayfunktionen


Anwendungsbeispiel