Обзор языка - типы данных

Обзор языка - типы данных

В AutoIt есть только один тип данных, называемый Variant (нетипизированный тип данных). Variant может содержать как числа, так и строки, которые интерпретируются по разному в зависимости от ситуации. К примеру, если вы попытаетесь перемножить два Variant, то они будут интерпретированы, как числа, а если вы попытаетесь их объединить (оператор &), то они будут интерпретированы, как строки.

Например:

$a = 10 * 20 ; $a = 200 - число (* используется для умножения)
$a = 10 * "20" ; $a = 200 - число
$a = "10" * "20" ; $a = 200 - число
$a = 10 & 20 ; $a = "1020" - строка (& используется для объединения строк)


Если строка используется как число, происходит скрытый вызов функции Number. Поэтому, если строка не является допустимым числом, вместо неё будет подставлен 0. К примеру,

    10 * "fgh" равно числу 0.

Если строка используется, как булев тип данных и она пуста "", она будет интерпретирована, как False (см. ниже). К примеру,

    Not "" эквивалентно булеану True.


Числа

Числа могут быть стандартными десятичными 2, 0, и -7

Экспоненциальная запись числа также поддерживается, поэтому можно написать 1.5e5 вместо 150000

Целые числа также могут быть представлены в шестнадцатеричной записи, при использовании префикса 0x, как в виде 0x409, так и в виде 0x4fff (при использовании шестнадцатеричной записи поддерживаются только 32-битные числа). 


Строки

Строки заключаются в "двойные" кавычки. Если необходимо использовать двойные кавычки в самой строке, дублируйте их:

    "Здесь есть ""двойные кавычки""!"

Строки также можно заключать в 'одинарные' кавычки.

Можно совмещать оба типа кавычек, чтобы избежать дублирования кавычек в строках. Это позволяет легче читать и редактировать код. К примеру, если в строке необходимо использовать большое количество двойных кавычек, то удобнее заключать её в одинарные кавычки:

    'Эта "строка" содержит "большое" количество "двойных кавычек" или нет?'

Это ведь проще, чем:

    "Эта ""строка"" содержит ""большое"" количество ""двойных кавычек"" или нет?"

При вычислении строки, обработка переменных окружения и переменных языка согласуется со значением, установленным функцией Opt().


Булев тип данных

Булев - это логическое значение. Для него существует только два различных значения: True (Истина) и False (Ложь).

Он может использоваться при присвоении переменных, вместе с логическими операторами and, or и not.

Примеры:

$fBoolean1 = True
$fBoolean2 = False
$fBoolean3 = $fBoolean1 And $fBoolean2
; В результате $fBoolean3 равно False


$fBoolean1 = False
$fBoolean2 = Not $fBoolean1
; В результате $fBoolean2 равно True



Если числа используются, как булевы значения, применяются следующие правила:

Только 0 соответствует значению False
Любые другие числа соответствуют значению True

Пример:

$iNumber1 = 0
$fBoolean1 = True
$fBoolean2 = $iNumber1 And $fBoolean1
; В результате $fBoolean2 равно False



Если вы используете арифметические операторы вместе с булевыми значениями (что не рекомендуется!), применяются следующие правила:

Булево значение True конвертируется в числовое значение 1
Булево значение False конвертируется в числовое значение 0

Пример:

$fBoolean1 = True
$iNumber1 = 100
$Number2 = $fBoolean1 + $iNumber1
; В результате $Number2 равно числовому значению 101



Если вы используете булево значение в качестве строки, применяются следующие правила:

Булево значение True конвертируется в строковое значение "True"
Булево значение False конвертируется в строковое значение "False"

Пример:

$fBoolean1 = True
$sString1 = "Тест: "
$sString2 = $sString1 & $fBoolean1
; В результате $sString2 равно строковому значению "Тест: True"


Если же вы используете строку в качестве булева значения, применяются другие правила:
Только пустая строка ("") соответствует булевому значению False
Любая другая строка (в том числе и "0", "False") соответствует булевому значению True

 

Бинарный тип данных

Бинарный тип может содержать двоичные данные. Значение переменной такого типа конвертируется в шестнадцатеричную запись при использовании этой переменной, как строки. Пример:

$bin = Binary("abc")
$str = String($bin)    ; "0x616263"


Указатель

Переменная типа указатель хранит в себе адрес ячейки в памяти (32-битный или 64-битный, в зависимости от используемой версии AutoIt). Значение переменной такого типа конвертируется в шестнадцатеричную запись при использовании этой переменной, как строки. Дескриптор окна (Window Handle, HWnd), возвращаемый функцией WinGetHandle, имеет тип указатель.


Типы данных и границы

Следующая таблица показывает различные типы данных и их границы.

Подтип данных Границы и примечания
Int32 32-битное знаковое число
Int64 64-битное знаковое число
Double double-precision(?) число с плавающей точкой.
String Может содержать до 2147483647 символов.
Binary Двоичные данные, может содержать до 2147483647 байтов.
Pointer Указатель на ячейку памяти. 32-битный или 64-битный, в зависимости от используемой версии AutoIt.

Некоторые функции в AutoIt могут работать только с 32-битными числами (например BitAND). Значения автоматически конвертируются в нужный тип - эти функции документированы, если необходимо.