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

Helpful script writing tricks and HowTo's
20170201225639
Posts: 11
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: 42
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: 1793
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
I am not afraid of many things. But I do fear fear.
iseahound
Posts: 42
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: 156
Joined: 02 Oct 2013, 19:41

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.
lexikos
Posts: 5189
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

Return to “Tutorials”

Who is online

Users browsing this forum: No registered users and 6 guests