what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catch?

Put simple Tips and Tricks that are not entire Tutorials in this forum
20170201225639
Posts: 23
Joined: 01 Feb 2017, 22:57

what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catch?

24 Feb 2017, 13:07

a couple of my own ...


#1: putthing a whitespace between function name and left parenthesis

example:

incorrect (function will NOT be called)

Code: [Select all] [Download] GeSHi © Codebox Plus

___a_toggle_window1_Xpos_between_2_and_3 ( _title, 0, -100 )

correct:

Code: [Select all] [Download] GeSHi © Codebox Plus

___a_toggle_window1_Xpos_between_2_and_3( _title, 0, -100 )



i've made this mistake probably 4-5 times in the past month, and each time it took me some time to realize this is the root of the problem. i'm thinking i should write an ahk script to scan my scripts of " (" before i run them ...




#2: assuming pixelgetcolor outputs RGB (as opposed to BGR) color

example:


incorrect (you'll get a different color)

Code: [Select all] [Download] GeSHi © Codebox Plus

PixelGetColor, _color, %MouseX%, %MouseY%
...
Gui, Color, %_color%



correct

Code: [Select all] [Download] GeSHi © Codebox Plus

PixelGetColor, _color, %MouseX%, %MouseY%, RGB
...
Gui, Color, %_color%






#3 single line block comment

incorrect (hotkey will simply not take effect (i wonder what really happens in this case?))



correct
iseahound
Posts: 231
Joined: 13 Aug 2016, 21:04
GitHub: iseahound

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

26 Feb 2017, 16:56

Declaring variables mostly.


1a) Correct

Code: [Select all] [Download] GeSHi © Codebox Plus

x1 := y1 := x2 := y2 := 0


1b) incorrect - only x1 is static, rest are instance variables.

Code: [Select all] [Download] GeSHi © Codebox Plus

static x1 := y1 := x2 := y2 := 0


I was mistaken about this one.


3a) incorrect - the variable angelic must be global in AHK

Code: [Select all] [Download] GeSHi © Codebox Plus

static angelic := "Graphics_Subtitle_simTextSize"         
Gui, TextSizeWindow:Add, Text, % "v" angelic, % str


3b) Correct Workaround - turn a static variable into a global one on the fly.

Code: [Select all] [Download] GeSHi © Codebox Plus

static angelic := "Graphics_Subtitle_simTextSize"         
DeclareGlobal(angelic)
Gui, TextSizeWindow:Add, Text, % "v" angelic, % str


DeclareGlobal(angelic) {
global
(%angelic%)
return ; angelic is omnipresent. Deref angelic and make her a global var.
}
Last edited by iseahound on 26 Feb 2017, 17:11, edited 2 times in total.
User avatar
nnnik
Posts: 2908
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

26 Feb 2017, 17:00

iseahound wrote:2a) Incorrect - only r is static

Code: [Select all] [Download] GeSHi © Codebox Plus

static r, g, b

Code: [Select all] [Download] GeSHi © Codebox Plus

fn()
{
static x := 1, y := x++
return y
}
Msgbox % fn()
Msgbox % fn()
Msgbox % fn()
Try to explain this code please
Recommends AHK Studio
iseahound
Posts: 231
Joined: 13 Aug 2016, 21:04
GitHub: iseahound

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

26 Feb 2017, 17:09

nnnik wrote:Try to explain this code please


I was mistaken. Seems like it gave me trouble in the past and I just avoided that afterwards. Post will be edited.
TAC109
Posts: 213
Joined: 02 Oct 2013, 19:41
Location: New Zealand

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

26 Feb 2017, 19:17

boiler wrote:Typos in variable names.
#warn can help find these.
My programs:-
ReClip - a Text Reformatting and Clip Management utility
XRef - Produces Cross Reference lists for scripts

lexikos
Posts: 5939
Joined: 30 Sep 2013, 04:07
GitHub: Lexikos

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

03 Apr 2017, 03:02

iseahound wrote:1b) incorrect - only x1 is static, rest are instance variables.
No, they are either local or global variables. I think you probably know this and are just misusing the term "instance".

They could be static if the function is assume-static.
3a) incorrect - the variable angelic must be global in AHK

Code: [Select all] [Download] GeSHi © Codebox Plus

static angelic := "Graphics_Subtitle_simTextSize"         
Gui, TextSizeWindow:Add, Text, % "v" angelic, % str
No. You aren't passing the variable angelic to the Gui command. You are passing its contents. The variable angelic can be static, local or global. The variable Graphics_Subtitle_simTextSize can be static if you call the function normally, but it must be global if Gui command is within a subroutine-in-a-function called by a Gui event, timer or similar.

3b) Correct Workaround - turn a static variable into a global one on the fly.
No. It does not "turn a static variable into" anything. This creates a global variable based on the name passed to the function. It makes no difference where the name comes from, whether it is from a static variable, global variable, or not a variable at all.

Unless you sometimes change the value of angelic, there is simply no reason for that variable. You can do this instead:

Code: [Select all] [Download] GeSHi © Codebox Plus

global Graphics_Subtitle_simTextSize
Gui, TextSizeWindow:Add, Text, vGraphics_Subtitle_simTextSize, % str
Randy31416
Posts: 42
Joined: 15 Jan 2014, 19:09

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

24 Apr 2017, 20:23

Number one error for me, time after time, and very hard to find (time after time): writing a plain equals sign (not a colon-equals) for assignment. Too many other languages in my mental baggage use the equals for assignment and the habit (maybe even muscle-memory habit) is very hard to break.
20170201225639
Posts: 23
Joined: 01 Feb 2017, 22:57

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

26 Apr 2017, 08:55

i do that too, although i've come to like the fact that ahk doesn't use equality for assignment.

my biggest gotcha with '=' (or perhaps really it's with the 'if' construct?) is that for a long time i wasn't accustomed to the fact that, in the code below, only the 1st 2nd and 4rd msgbox will appear. the 3rd won't. my paranoia about the 3rd kind of case resulted in a lot of unnecessary parentheses in my code :oops:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
Exaskryz
Posts: 2861
Joined: 17 Oct 2015, 20:28

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

18 May 2017, 08:43

20170201225639 wrote:#3 single line block comment

incorrect (hotkey will simply not take effect (i wonder what really happens in this case?))



correct


It's been a few months, and I'm not sure if you've gotten an answer to your question. But the */ has to be on its own line to be recognized as a closing comment. In the incorrect code, all of this is commented out:

tab::
/* haha */
msgbox haha
return



Which may be hard to notice because the syntax highlighter on the forums and probably in your text editor don't look for a newline */ as the closer.
User avatar
nnnik
Posts: 2908
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

04 Jul 2017, 15:43

boiler wrote:Typos in variable names.

+Renaming variables and missing out on a few occurencies.
Recommends AHK Studio
User avatar
SpeedMaster
Posts: 175
Joined: 12 Nov 2016, 16:09

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

04 Jul 2017, 16:09

Object.clone() doesn't create a copy, keeps references :twisted:

explanation here:
https://autohotkey.com/board/topic/1034 ... antiation/
https://autohotkey.com/board/topic/6954 ... eferences/

solution:
use this function to create a deep copy (tnx fincs) ;)

Code: [Select all] [Download] (Untitled.ahk)GeSHi © Codebox Plus

ObjFullyClone(obj)
{
nobj := obj.Clone()
for k,v in nobj
if IsObject(v)
nobj[k] := A_ThisFunc.(v)
return nobj
}
User avatar
SpeedMaster
Posts: 175
Joined: 12 Nov 2016, 16:09

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

10 Apr 2018, 16:45

Just a small amount of recursive function call can lead to a stack overflow crash in AHK. :twisted:

explanation here:
https://autohotkey.com/board/topic/4372 ... ashes-ahk/

example:

Code: [Select all] [Expand] [Download] GeSHi © Codebox Plus

User avatar
nnnik
Posts: 2908
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

11 Apr 2018, 03:06

Well if you need 1000 layers of recursion you are doing it wrong.
Recommends AHK Studio
Helgef
Posts: 2990
Joined: 17 Jul 2016, 01:02
Contact:

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

11 Apr 2018, 06:26

Surprisingly, I never actually made this (similar) mistake until quite recently, had I still been using v1, it would have failed silently (since I didn't use try-catch-throw for every dllcall) and it might have been quite difficult to find. Example,

Code: [Select all] [Download] GeSHi © Codebox Plus

dllcall("MEssageBox", "ptr", 0, "str", "hello", "str", "world", "uint", 0x40) ; v1 fails silently, v2 gives the appropriate error message

Cheers.
guest3456
Posts: 2313
Joined: 09 Oct 2013, 10:31

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

11 Apr 2018, 08:13

SpeedMaster wrote:GUI Text and DPI Scaling in Windows - Larger Text (120 DPI) :twisted:

explanation here:
https://autohotkey.com/board/topic/9030 ... t-120-dpi/

solution here:
https://autohotkey.com/board/topic/6893 ... entry77893


looks like i was quoted years ago in those old posts

but newer versions of AHK (1.1.11+) don't need those hacks anymore:

https://autohotkey.com/docs/commands/Gui.htm#DPIScale

User avatar
tank
Posts: 2276
Joined: 28 Sep 2013, 22:15
Facebook: charlie.simmons.7334
Google: ttnnkkrr
GitHub: ttnnkkrr
Location: Louisville KY
Contact:

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

11 Apr 2018, 09:30

I had a lot of trouble with unquoted strings

Code: [Select all] [Download] GeSHi © Codebox Plus

if var = this is a string
;; execute
not at all the same as

Code: [Select all] [Download] GeSHi © Codebox Plus

if (var = this is not a string)
;; execute
or

Code: [Select all] [Download] GeSHi © Codebox Plus

if var = this is a string && var2 = not a string anymore
;; execute
Drove me absolutely bonkers
We are troubled on every side‚ yet not distressed; we are perplexed‚
but not in despair; Persecuted‚ but not forsaken; cast down‚ but not destroyed;
https://www.facebook.com/ahkscript.org
If you have forum suggestions please submit a pull request
User avatar
SpeedMaster
Posts: 175
Joined: 12 Nov 2016, 16:09

Re: what are some ahk programming mistakes that tend to 'fail silently' with no warning and took you a long time to catc

11 Apr 2018, 10:13

SpeedMaster wrote:Just a small amount of recursive function call can lead to a stack overflow crash in AHK. :twisted:

nnnik wrote:Well if you need 1000 layers of recursion you are doing it wrong.


Well i am not familiar with other programming languages but I am wondering if it is possible to reach the base case of 1000 in Java or c# (reproducing similar script) :think:

Here is a similar code in Python 2.7.14 (the script crashes after 975 recursions)

Code: [Select all] [Download] GeSHi © Codebox Plus

def countup(n):
print(n)

if n == 1000:
return

countup(n + 1)

countup(1)

Return to “Tips and Tricks”

Who is online

Users browsing this forum: No registered users and 2 guests