Seite 1 von 1

Prozeduraufruf in Arrayfeld erfolgt zweimal

Verfasst: 01.05.2018 14:40
von diceman
Ich weiß nicht, wie ich es anders beschreiben soll, ich lasse das Snippet einfach mal für sich sprechen ... es ist nicht von erderschütternder Relevanz, aber ich möchte einfach verstehen, warum das so ist:

Code: Alles auswählen

Procedure anyNumber()
	Debug "anyNumber"
	ProcedureReturn Random(9)
EndProcedure

Dim field(9)


field(anyNumber()) = 1
Debug ""
field(anyNumber()) +1
Ich habe ein dimensioniertes Array und eine Prozedur, welche mir eine zufällige Zahl von 0-9 zurückgibt. Diesen Prozedur rufe ich nun innerhalb eines Arraysfeldes auf, welchem ich einen einfachen Wert zuweise.
Das zweite Mal, zum Vergleich, verändere ich den Wert des Feldes mit Hilfe eines beliebigen Operators.

Bei der einfachen Zuweisung wird die Prozedur anyNumber() nur einmal aufgerufen, soweit so logisch. Bei der Variante mit Operator dagegen doppelt.
Warum ist das so? :?

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Verfasst: 01.05.2018 15:21
von matbal
a + 1 steht für a = a + 1

Entsprechend ist diese Zeile

Code: Alles auswählen

field(anyNumber()) + 1
eine Abkürzung hierfür:

Code: Alles auswählen

field(anyNumber()) = field(anyNumber()) + 1
Die Prozedur wird wirklich zweimal aufgerufen

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Verfasst: 01.05.2018 15:25
von #NULL
Der Compiler macht daraus folgendes:

Code: Alles auswählen

field(anyNumber()) = field(anyNumber()) +1
..führt somit zu 2 Funktionsaufrufen.

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Verfasst: 01.05.2018 19:06
von diceman
Danke! :)