Что нового

Синтаксис присвоение значения переменной как правильно

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Скажите пожалуйста есть примеры такие
Код:
If GUICtrlRead ($Checkbox6) = 1 Then
$FuellF = '1'
EndIf

и
Код:
If $Dred1 = '1' Then;
Sleep(1000)
EndIf


оба работают без проблем но хотелось бы знать как правильно присваивать значение переменной в справке написано что значение должно быть между кавычками '1' или "1" в моих примерах в первом 1 после = и перед Then без кавычек взято из примера одного из Гуру а в другом в кавычках другого не менее опытного человека. и оба работают хотелось бы узнать как правильно в данных примерах поступать с кавычками или так и должно быть потому как 1ю переменную скрипт считывает из GUI формы , а вторую я объявлял в тексте скрипта :stars:
разъясните пожалуйста если не сложно.
 

running-frag

why me?
Сообщения
441
Репутация
60
http://autoit-script.ru/autoit3_docs/intro/lang_operators.htm
Обрати внимание на описания "=" и "==".
 

inververs

AutoIT Гуру
Сообщения
2,135
Репутация
465
и еще http://autoit-script.ru/autoit3_docs/intro/lang_datatypes.htm
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
running-frag [?]
Обрати внимание на описания "=" и "==".

наверное не правильно поставил вопрос , эту доку я читал дело в том что тут http://autoit-script.ru/autoit3_docs/intro/lang_variables.htm не написано заключать ли в кавычки цифровые значения а если заключать то как это значение будет интерпретироваться про знаки равенства я знаю и различаю понятия '=' равно и '==' сравнить
т. е. на что влияет заключение в кавычки цифровой переменной
 

Medic84

Омега
Команда форума
Администратор
Сообщения
1,590
Репутация
341
general66
Если функция возвращает цифровое значение переменной, то естественно лучше сравнивать ее с цифровым значением. Так интерпретатору не нужно переводить строку в число и наоборот.

Таков уж тип данных программмы. ИМХО это удобно конечно, но это не правильно.
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
general66
Строки нужно заключать в кавычки, а числа нет, иначе число будет считаться строкой.
Код:
$a = 1  ; это приравнивание
If $a = 1 Then  ; это сравнение
If $a == 1 Then  ; это абсолютное равенство. 
; Во многих языках абсолютное равенство обозначается тремя знаками равенства ===.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Garrett [?]
If $a == 1 Then ; это абсолютное равенство.
это не абсолютное равенство (кстати, это что?), а сравнение строк с учетом регистра.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
число конвертируется в строку и сравнивается как строки
Код:
If $a == 1 Then


строка конвертируется в число по правилу Number() и сравниваются как числа
Код:
If $a = 1 Then


Пример
Код:
MsgBox(0, 'Сообщение', '1f' = 1)
MsgBox(0, 'Сообщение', '1' == 1)
 
Автор
G

general66

Пришел увидел наследил
Сообщения
211
Репутация
3
Столько почтенных в хорошем смысле этого слова людей :-[
AZJIO [?]
число конвертируется в строку и сравнивается как строки

Medic84 [?]
Таков уж тип данных программмы. ИМХО это удобно конечно, но это не правильно.

Garrett [?]
Строки нужно заключать в кавычки, а числа нет, иначе число будет считаться строкой.

значит ли это, что если число не участвует в арифметике (сложение, умножение и т.д.) то ошибки не будет между 1 и '1' самое главное чтоб ранее переменная была объявлена идентичным образом т. е. если объявлено было $n = '1' то сравнивать надо скажем If $n = '1' Then , а если функция возвращает цифру то и сравнивать нужно переменную без кавычек так ведь?



Добавлено:
Сообщение автоматически объединено:

AZJIO [?]

забавно :shok: спасибо за наглядный пример
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Kaster [?]
а сравнение строк с учетом регистра.
Да, в Autoit это скорее всего так и есть. :scratch:

абсолютное равенство (кстати, это что?)
Код:
Local $x = "5"
Local $y = 5

; так не работает
If ($x = $y) Then
	ConsoleWrite("($x = $y)"& @TAB &"Opps!" & @CR)
EndIf

; и так не работает
If ($x == $y) Then
	ConsoleWrite("($x == $y)"& @TAB &"Opps!" & @CR)
EndIf

; А вот это и есть - абсолютное равенство
If (VarGetType($x) = VarGetType($y) And $x = $y) Then
	ConsoleWrite("($x === $y) абсолютное равенство ;)" & @CR)
EndIf

Запустите пример, а потом заключите значение переменной в кавычки ($y = "5"), и запустите ещё раз.


Добавлено:
Сообщение автоматически объединено:

Для Autoit`а, наверное, будет так правильнее
Код:
Local $x = "a"
Local $y = "a"

If (VarGetType($x) = VarGetType($y) And $x == $y) Then
    ConsoleWrite("($x === $y) абсолютное равенство ;)" & @CR)
EndIf
 
Верх