Jump to content

Recommended Posts

Posted

💡 Did You Know AutoIt Has No Boolean Type?

Or that empty strings are False but "0" (as a string) is True?

Or that Not $variable doesn’t work the way you might think?


🔍 Understanding Logical Expression Evaluation in AutoIt

When working with AutoIt, one of the subtle but important differences compared to languages like C, JavaScript, or Python is how logical expressions are evaluated.

👉 AutoIt does not have a dedicated Boolean type. Instead, it uses other values (strings, numbers, etc.) and interprets them as True or False.

This article breaks down AutoIt’s “truthiness rules” and explains what Not $variable really means.


1️⃣ No Boolean Type in AutoIt

Unlike many languages, AutoIt does not define a bool type. Instead:

  • Strings and numbers are interpreted as logical values.

  • A function or expression that “returns True/False” is really returning an integer (1 or 0).


2️⃣ Truthiness Rules

When AutoIt evaluates a value in a conditional (If, While, etc.):

  • "" (empty string) → False

  • 0 (number) → False

  • Any non-empty stringTrue

  • Any non-zero numberTrue

Examples:

If "" Then MsgBox(0, "Test", "This will NOT show") ; False
If "hello" Then MsgBox(0, "Test", "This WILL show") ; True

If 0 Then MsgBox(0, "Test", "This will NOT show") ; False
If -1 Then MsgBox(0, "Test", "This WILL show") ; True

3️⃣ What Does Not $variable Do?

The Not operator simply inverts the truthiness of a value.

ConsoleWrite(Not "" & @CRLF)      ; 1 (True)
ConsoleWrite(Not "abc" & @CRLF)   ; 0 (False)
ConsoleWrite(Not 0 & @CRLF)       ; 1 (True)
ConsoleWrite(Not 123 & @CRLF)     ; 0 (False)

👉 In plain:
Not $variable is like asking “is this variable empty or zero?”


4️⃣ Real Example: _PathFull UDF

In the standard UDF File.au3, the function _PathFull has this line:

If Not $sRelativePath Or $sRelativePath = "." Then Return $sBasePath

This handles two cases:

  • $sRelativePath is "" → return the base path.

  • $sRelativePath is "." → return the base path (current directory).

💡 This works because AutoIt treats an empty string as False.


5️⃣ Common Pitfalls

Pitfall 1: Expecting False to exist

Local $x = False
If $x Then MsgBox(0, "Result", "Will this show?")
; False is just 0, there’s no real Boolean type.

Pitfall 2: Forgetting that "0" (string) is True

If "0" Then MsgBox(0, "Result", "This WILL show!")
; Non-empty string = True
; But numeric 0 would be False.

Pitfall 3: Misunderstanding Not

Local $val = "hello"
If Not $val Then
    MsgBox(0, "Result", "Will this show?")
    ; Never runs because "hello" = True
EndIf

Key Takeaways

  • AutoIt has no Boolean type — just numbers and strings used as truth values.

  • "" (empty string) and 0 (numeric) = False.

  • Everything else = True.

  • "0" (string) = True, but 0 (number) = False.

  • Not $var = “is this variable empty or zero?”.


📝 Conclusion

Understanding AutoIt’s truthiness rules is essential for writing reliable conditions.

They make scripts concise, but can be surprising if you expect strict Boolean behavior.

👉 Pro Tip:
Use AutoIt’s implicit truthiness for quick checks, but when clarity matters, be explicit:

  • Use StringLen() to check if a string is empty.

  • Use IsNumber() to verify numeric values.

  • Use comparisons (=, <>) for precise logic.

That way, your intent is clear, and you avoid bugs caused by AutoIt’s flexible but tricky truth rules.


💬 Final Note:
If I’ve misunderstood or explained something incorrectly, please share your thoughts — I’d be happy to update and improve this article!

Regards,
 

Posted

This article has so much value to it and you've summarized everything in a well organized way. Thank you for sharing.

I recently found out some of this stuff the hard way. Lots of trial and error until I understood what was going on. You've shared some great stuff here that will benefit me and many others.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...