Page 1 of 1

Wie funktioniert's?

Posted: 14 May 2019, 01:43
by Rohwedder
Berechnet die Quersumme von 123:

Code: Select all

For ​,​ in StrSplit("123")
​​+=​
MsgBox,% ​​

Re: Wie funktioniert's?

Posted: 14 May 2019, 02:09
by gregster
Verwendet offenbar das Unicode-Zeichen "Zero-Width Space" als Variablennamen (mal eins, mal zwei hintereinander):
AHK ist halt syntaxmäßig recht großzügig :D

zero width space.png
zero width space.png (4 KiB) Viewed 1683 times
(https://www.soscisurvey.de/tools/view-chars.php)

Re: Wie funktioniert's?

Posted: 14 May 2019, 03:19
by jNizM
Interessant zu sehen mit "unsichtbarem" Ascii-Zeichen
Image

Code: Select all

For ​,​ in StrSplit("123")
​​+=​
MsgBox,% ​​

oder z.B. in leserlich :D

Code: Select all

MeineZahl := 1337
MeinArray := StrSplit(MeineZahl)

for Index, Zahl in MeinArray
	Quersumme += Zahl

MsgBox % Quersumme
oder:

Code: Select all

MeineZahl := 1337
MeinArray := StrSplit(MeineZahl)

loop % MeinArray.MaxIndex()
	Quersumme += MeinArray[A_Index]

MsgBox % Quersumme

Re: Wie funktioniert's?

Posted: 15 May 2019, 05:44
by nnnik
jNizM wrote:
14 May 2019, 03:19
oder:

Code: Select all

MeineZahl := 1337
MeinArray := StrSplit(MeineZahl)

loop % MeinArray.MaxIndex()
	Quersumme += MeinArray[A_Index]

MsgBox % Quersumme
Normale loops sollte man besser niemals verwenden um über die arrays zu iterieren.

Re: Wie funktioniert's?

Posted: 16 May 2019, 07:47
by Folllast
nnnik wrote:
15 May 2019, 05:44
jNizM wrote:
14 May 2019, 03:19
oder:

Code: Select all

MeineZahl := 1337
MeinArray := StrSplit(MeineZahl)

loop % MeinArray.MaxIndex()
	Quersumme += MeinArray[A_Index]

MsgBox % Quersumme
Normale loops sollte man besser niemals verwenden um über die arrays zu iterieren.
warum?

Re: Wie funktioniert's?

Posted: 16 May 2019, 10:16
by just me
Moin,

die For-Schleife arbeitet intern mit einem Enumerator-Objekt, das darauf spezialisiert ist, alle Schlüssel/Wert-Paare nacheinander in aufsteigender Reihenfolge zurückzugeben.

Bei Loop % MeinArray.MaxIndex() weiß MeinArray nichts davon, dass die Schleife immer den nächsten Schlüssel erwartet. So muss für jeden Schlüssel erst einmal geprüft werden, ob er existiert, d.h. die interne Tabelle mit den Schlüsseln wird jedes Mal neu durchsucht.

Soll sagen: Wenn Du die Wahl zwischen einem 'Spezialisten' (For) und einem 'Universalisten' (Loop) hast, nimm lieber den Spezi.

Grüße,
just me