Prozeduraufruf in Arrayfeld erfolgt zweimal

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Prozeduraufruf in Arrayfeld erfolgt zweimal

Beitrag 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? :?
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
matbal
Beiträge: 246
Registriert: 30.03.2011 20:53

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Beitrag 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
Benutzeravatar
#NULL
Beiträge: 2235
Registriert: 20.04.2006 09:50

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Beitrag von #NULL »

Der Compiler macht daraus folgendes:

Code: Alles auswählen

field(anyNumber()) = field(anyNumber()) +1
..führt somit zu 2 Funktionsaufrufen.
my pb stuff..
Bild..jedenfalls war das mal so.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Prozeduraufruf in Arrayfeld erfolgt zweimal

Beitrag von diceman »

Danke! :)
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Antworten