Best coding practices: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
Outlined in this section, is a detailed explanation of what are to be considered the best coding practices within AutoIt. | Outlined in this section, is a detailed explanation of what are to be considered the best coding practices within AutoIt. | ||
__TOC__ | |||
== Variable Naming == | |||
The Hungarian notation is adopted however it's simplified and regroup all the types of numbers in one type. | |||
{| class="wikitable" | |||
|- | |||
! prefix !! covering type !! initialization | |||
|- | |||
| i || Numbers (any type) || $i = 0 | |||
|- | |||
| a || Arrays || $a = 0 or $a[0] | |||
|- | |||
| s || Strings (chars included) || $s = "" | |||
|- | |||
| f || Booleans || $f = False or $f = True | |||
|- | |||
| b || Binaries || $b = "" | |||
|- | |||
| h || Handles (and GUI handles) || $h = 0 | |||
|- | |||
| k (not decided) || Keywords || Null (not decided) | |||
|- | |||
| fu (not decided) || Functions || Null (not decided) | |||
|- | |||
| p || Pointers || $p = 0 | |||
|- | |||
| tag || Structures definition || $tag = "" (should directy be filled) | |||
|- | |||
| t || Structures || $t = 0 | |||
|- | |||
| o || Objects || $o = 0 | |||
|} | |||
The variables are named following this schema : | |||
{| class="wikitable" | |||
|- | |||
! type (lower case) !! [optional] subtype (lower case) !! var name (first letter in upper case) | |||
|- | |||
| i || f || MyFlag | |||
|} | |||
Example : | |||
<syntaxhighlight lang="autoit"> | |||
; Assign a Local variable the number 5. | |||
Local $iSomeVar = 5 | |||
; Assign a Local variable the number 1. | |||
Local $ifMyFlag = 1 | |||
; Assign a Local variable an array of numbers. | |||
Local $aiArray = 0 | |||
; Re-declare the array to size and fill it. | |||
Local $aiArray[3] = [0, 0.25, 3 / 4] | |||
</syntaxhighlight> | |||
Always initialize a variable on it's declaration, and declare all the same type of variable on the same line. | |||
Example : | |||
<syntaxhighlight lang="autoit"> | |||
;good | |||
Local $iSomeVar1 = 0, $iSomeVar2 = 5 | |||
Local $aiArray = 0 | |||
;bad | |||
Local $iSomeVar1, $aiArray = 0 | |||
Local $iSomeVar2 = 5 | |||
</syntaxhighlight> | |||
You can still categorize your variables and declare for example the $iSomeVar2 on another line. | |||
== Scopes of variables == | |||
To make the transition, the variables are also named according to their scope. | |||
{| class="wikitable" | |||
|- | |||
! Global UDF variable !! Global variable !! Local variable | |||
|- | |||
| $__iSomeVar || $_iSomeVar || $iSomeVar | |||
|} | |||
Remark: With this method, you will avoid non wanted re-assignments. | |||
Example : | |||
<syntaxhighlight lang="autoit"> | |||
#include <Constants.au3> | |||
; Assign a Global variable the number 0. | |||
Global $iSomeVar1 = 0 | |||
; Assign a Global variable the number 5. | |||
Global $_iSomeVar2 = 5 | |||
_SomeFunc() | |||
Func _SomeFunc() | |||
; Assign Local variables respectively the numbers 3 and 4. | |||
Local $iSomeVar1 = 3, $iSomeVar2 = 4 | |||
; Note: The user inadvertently re-assigned the global variable $iSomeVar1, because this one is not named as "global". | |||
; Display the value of $iSomeVar1. | |||
MsgBox($MB_SYSTEMMODAL, "", "Value of $iSomeVar1: " & $iSomeVar1) | |||
; Display the value of $iSomeVar2. | |||
MsgBox($MB_SYSTEMMODAL, "", "Value of $iSomeVar2: " & $iSomeVar2) | |||
; Display the value of $_iSomeVar2. | |||
MsgBox($MB_SYSTEMMODAL, "", "Value of $_iSomeVar2: " & $_iSomeVar2) | |||
EndFunc | |||
</syntaxhighlight> | |||
More coming soon :) |
Revision as of 18:12, 15 August 2013
Outlined in this section, is a detailed explanation of what are to be considered the best coding practices within AutoIt.
Variable Naming
The Hungarian notation is adopted however it's simplified and regroup all the types of numbers in one type.
prefix | covering type | initialization |
---|---|---|
i | Numbers (any type) | $i = 0 |
a | Arrays | $a = 0 or $a[0] |
s | Strings (chars included) | $s = "" |
f | Booleans | $f = False or $f = True |
b | Binaries | $b = "" |
h | Handles (and GUI handles) | $h = 0 |
k (not decided) | Keywords | Null (not decided) |
fu (not decided) | Functions | Null (not decided) |
p | Pointers | $p = 0 |
tag | Structures definition | $tag = "" (should directy be filled) |
t | Structures | $t = 0 |
o | Objects | $o = 0 |
The variables are named following this schema :
type (lower case) | [optional] subtype (lower case) | var name (first letter in upper case) |
---|---|---|
i | f | MyFlag |
Example :
; Assign a Local variable the number 5.
Local $iSomeVar = 5
; Assign a Local variable the number 1.
Local $ifMyFlag = 1
; Assign a Local variable an array of numbers.
Local $aiArray = 0
; Re-declare the array to size and fill it.
Local $aiArray[3] = [0, 0.25, 3 / 4]
Always initialize a variable on it's declaration, and declare all the same type of variable on the same line.
Example :
;good
Local $iSomeVar1 = 0, $iSomeVar2 = 5
Local $aiArray = 0
;bad
Local $iSomeVar1, $aiArray = 0
Local $iSomeVar2 = 5
You can still categorize your variables and declare for example the $iSomeVar2 on another line.
Scopes of variables
To make the transition, the variables are also named according to their scope.
Global UDF variable | Global variable | Local variable |
---|---|---|
$__iSomeVar | $_iSomeVar | $iSomeVar |
Remark: With this method, you will avoid non wanted re-assignments.
Example :
#include <Constants.au3>
; Assign a Global variable the number 0.
Global $iSomeVar1 = 0
; Assign a Global variable the number 5.
Global $_iSomeVar2 = 5
_SomeFunc()
Func _SomeFunc()
; Assign Local variables respectively the numbers 3 and 4.
Local $iSomeVar1 = 3, $iSomeVar2 = 4
; Note: The user inadvertently re-assigned the global variable $iSomeVar1, because this one is not named as "global".
; Display the value of $iSomeVar1.
MsgBox($MB_SYSTEMMODAL, "", "Value of $iSomeVar1: " & $iSomeVar1)
; Display the value of $iSomeVar2.
MsgBox($MB_SYSTEMMODAL, "", "Value of $iSomeVar2: " & $iSomeVar2)
; Display the value of $_iSomeVar2.
MsgBox($MB_SYSTEMMODAL, "", "Value of $_iSomeVar2: " & $_iSomeVar2)
EndFunc
More coming soon :)