Wie funktioniert's?

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Rohwedder
Posts: 1828
Joined: 04 Jun 2014, 08:33
Location: Germany

Wie funktioniert's?

14 May 2019, 01:43

Berechnet die Quersumme von 123:

Code: Select all

For ​,​ in StrSplit("123")
​​+=​
MsgBox,% ​​
User avatar
gregster
Posts: 2291
Joined: 30 Sep 2013, 06:48

Re: Wie funktioniert's?

14 May 2019, 02:09

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 228 times
(https://www.soscisurvey.de/tools/view-chars.php)
User avatar
jNizM
Posts: 2412
Joined: 30 Sep 2013, 01:33
GitHub: jNizM
Contact:

Re: Wie funktioniert's?

14 May 2019, 03:19

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
[AHK] 1.1.30.01 x64 Unicode | [WIN] 10 Pro (Version 1803) x64 | [GitHub] Profile
Donations are appreciated if I could help you
User avatar
nnnik
Posts: 4100
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Wie funktioniert's?

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.
Recommends AHK Studio
Folllast
Posts: 73
Joined: 24 Jan 2018, 04:57

Re: Wie funktioniert's?

16 May 2019, 07:47

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?
just me
Posts: 6214
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Wie funktioniert's?

16 May 2019, 10:16

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

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: Filzfrosch, WPLPHSS and 15 guests