Distinguishing Instance and Class/Static Variables When Using Classes

Helpful script writing tricks and HowTo's
badWithUserName
Posts: 11
Joined: 03 Feb 2022, 09:07
Contact:

Distinguishing Instance and Class/Static Variables When Using Classes

15 Feb 2022, 06:53

I was very dense on this and made the study script below. Sharing in case anyone else suffers the same affliction.

Code: Select all

#singleInstance Force
#NoEnv
;Last tested 20220215055320 with AHK v 1.1.33.10
;https://www.autohotkey.com/boards/viewtopic.php?f=7&t=100364

class classObj {
  static statVar := "statVarVal"  ; https://www.autohotkey.com/docs/Objects.htm#Custom_Classes_staticvar
  instVar := "instVarVal"         ; https://www.autohotkey.com/docs/Objects.htm#Custom_Classes_staticvar
  }

/*
rules
 r1 - classObj.instVar NOT initialized with value set in class definition
 r2 - both instVar and statVar of both classObj and instanceObj MAY be set manually (i.e., outside the class definition)
 r3 - classObj.statVar, instanceObj.instVar, & instanceObj.statVar ARE initialized with value set in class definition
 r4 - manual set of classObj.instVar affects ONLY classObj copy of instVar
 r5 - manual set of statVar of classObj or instanceObj affects ALL classOBj & instanceObj copies of statVar
 r6 - manual set of instVar or statVar of instanceObj affects only instanceObj copy 

                  | classObj.instVar | classObj.statVar | instanceObj.instVar | instanceObj.statVar 
------------------+------------------+------------------+---------------------+--------------------
 initialized with | false (r1); can  | true (r3); can   | same as <-          | same as <-         
 value set in     | be set manually  | be set manually  |                     |                    
 class definition | though (r2)      | also (r2)        |                     |                    
------------------+------------------+------------------+---------------------+--------------------
 manual set       | only classObj    | all classObj &   | only instanceObj    | same as <-         
 affects          | copy (r4)        | instanceObj      | copy (r6)           |
                  |                  | copies (r5)      |                     |
*/

;msgbox % classObj.statVar                  ; statVarVal   ; r3
;msgbox % classObj.instVar                  ; ""           ; r1
;msgbox % classObj.statVarObj.key1          ; val1         ; r3
;msgbox % classObj.instVarObj.key1          ; ""           ; r1

instanceObj1 := new classObj                ;              ; r3 (note 1)
;msgbox % instanceObj1.statvar              ; statVarVal   ; r3 (note 1 above)
;msgbox % instanceObj1.instVar              ; instVarVal   ; r3 (note 1 above)

instanceObj2 := new classObj                ;              ; r3 (note 2)

classObj.instVar := "instVarVal2"           ;              ; r2 (note 3)
;msgbox % classObj.instVar                  ; instVarVal2  ; r2 (note 3 above)
;msgbox % instanceObj1.instVar              ; instVarVal   ; r4 & r3 (note 1 above)
;msgbox % instanceObj2.instVar              ; instVarVal   ; r4 & r3 (note 2 above)

classObj.statvar := "statVarVal2"           ;              ; r2 (note 4)
;msgbox % classObj.statVar                  ; statVarVal2  ; r2 & r5
;msgbox % instanceObj1.statvar              ; statVarVal2  ; r5
;msgbox % instanceObj2.statVar              ; statVarVal2  ; r5

instanceObj1.instVar := "instVarVal3"       ;              ; r2 (note 5)
;msgbox % classObj.instVar                  ; instVarVal2  ; r6 & r2 (note 3 above)
;msgbox % instanceObj1.instVar              ; instVarVal3  ; r6 & r2 (note 5 above)
;msgbox % instanceObj2.instVar              ; instVarVal   ; r6 & r3 (note 2 above)

instanceObj1.statVar := "statVarVal3"       ;              ; r2 (note 6)
;msgbox % classObj.statVar                  ; statVarVal2  ; r6 & r2 (note 4)
;msgbox % instanceObj1.statVar              ; statVarVal3  ; r6 & r2 (note 6) 
;msgbox % instanceObj2.statvar              ; statVarVal2  ; r6 & r2 (note 4)

return

Return to “Tutorials (v1)”

Who is online

Users browsing this forum: Kodakku and 11 guests