1

Тема: AHK: присвоение одной переменной нескольких действий

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

a = (
WinGetText, 1, Блокнот  
WinGetText, 2, Калькулятор
WinGetText, 3, Корзина
)
;и вот здесь нужно задать чтобы он выполнял каждый раз действия присвоенные этой переменной по её указанию
a
if 1 = @...@
{
...
}
else
if 2 = @...@
{

}
return

И так далее.
Вот так через скобки пробовал писать. Ничего не получается.

2 (изменено: Lolykroly, 2021-02-08 04:54:17)

Re: AHK: присвоение одной переменной нескольких действий

Что я понял вроде чере з функцию как-то можно:

Function(GetText) {
 Loop {
 WinGetText, 1, Блокнот  
 WinGetText, 2, Калькулятор
 WinGetText, 3, Корзина
}
return
}

while 1 = "Рассказы"
{
    ...
    GetText
}
while 2 = "Сильно большие числа"
{
    ...
    GetText
}
while 3 = "Все файлы удалены"
{
    ...
    GetText
}
return

Но чёт не получается.

3

Re: AHK: присвоение одной переменной нескольких действий

Как можно через функцию возвратить истинность такого выражения переменной?

Gt() {
 WinGetText, 1, Один  
 WinGetText, 2, Два
 WinGetText, 3, Три
return (1=0 and 2=1 and 3=0)
}
return

if GT() {
...
}
return

4

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly Не совсем понятно, возможно так.


if Gt()
msgbox, True
else msgbox, False

Gt() {
 var := 1 
 var2 := 2 
 var3 := 3 
 if (var = 1 && var2 = 2 && var3 = 3)
 return True
 else return False
}
GD

5 (изменено: Lolykroly, 2021-02-13 10:51:04)

Re: AHK: присвоение одной переменной нескольких действий

Название функции возвращает пустое значение.
Вобще-то труе это обозначение истинности т.е. равенства 1. Как в ахк с этим незнаю.

6

Re: AHK: присвоение одной переменной нескольких действий

Переменная возвращает пустое значение. Название функции возвращает пустое значение. Проверка на истинность возвращает пустое значение. Что же не возвращает пустое значение?
Интересно функции в AHK вобще работают?

7

Re: AHK: присвоение одной переменной нескольких действий

В примере выше, она возвращает 1 или 0.

GD

8 (изменено: Lolykroly, 2021-02-13 11:37:49)

Re: AHK: присвоение одной переменной нескольких действий

Потому что true это зарезервированная переменная, она всегда будет 1, а фальш 0
И вобще, судя по справке значение переменной через % % выводится, а не просто так

9

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly пишет:

Интересно функции в AHK вобще работают?

Нет, конечно. Да и переменные, честно говоря, плохо работают. Всегда возвращают пустое значение.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

10

Re: AHK: присвоение одной переменной нескольких действий

teadrinker пишет:

Да и переменные, честно говоря, плохо работают.

Эх. Я знал что не в ту эру мы родились. Ну хорошо, разбудите как заработает всё.

11

Re: AHK: присвоение одной переменной нескольких действий

Было бы ясно что нужно получить и при каких проверках - был бы написан готовый код.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

12

Re: AHK: присвоение одной переменной нескольких действий

А вот так будет у вас работать?

Loop, 20
	{
	Random,var,1,3
	Sleep, 200
	If (var = 1)
		ToolTip, Переменная равна 1
	If (var = 2)
		ToolTip, Переменная равна 2
	If (var = 3)
		ToolTip, Переменная равна 3
	}

13 (изменено: Lolykroly, 2021-02-14 04:04:03)

Re: AHK: присвоение одной переменной нескольких действий

Вобщем сначала у меня было так:

a = 1
b = 1
c = 1
if (a=1 and b=1 and c=1)
{
...
}
a = 0
b = 1
c = 0
if (a=1 and b=0 and c=1)
{
...
}
a = 1
b = 0
c = 1
if (a=0 and b=1 and c=0)
{
...
}

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

a = 1
b = 1
c = 1
if (a=1 and b=1 and c=1)
while (a=1 and b=1 and c=1)
{
...
}
a = 0
b = 1
c = 0
if (a=1 and b=0 and c=1)
while (a=1 and b=0 and c=1)
{
...
}
a = 1
b = 0
c = 1
if (a=0 and b=1 and c=0)
while (a=0 and b=1 and c=0)
{
...
}

Но циклы были бесконечными, поскольку динамическое изменение переменных в них не происходило:

a = 1
b = 1
c = 1
if (a=1 and b=1 and c=1)
while (a=1 and b=1 and c=1)
{
...
a = 1
b = 1
c = 1
}
a = 0
b = 1
c = 0
if (a=1 and b=0 and c=1)
while (a=1 and b=0 and c=1)
{
...
a = 0
b = 1
c = 0
}
a = 1
b = 0
c = 1
if (a=0 and b=1 and c=0)
while (a=0 and b=1 and c=0)
{
...
a = 1
b = 0
c = 1
}

Но тогда нарушались приоритеты, поскольку на выполнение цикла могло уйти неопределённо долгое время, и необходимо было проверять и другие условия.
Тогда пришлось вписывать эти условия еще раз уже внутри циклов:

a = 1
b = 1
c = 1
if (a=1 and b=1 and c=1)
while (a=1 and b=1 and c=1)
{
...
a = 1
b = 1
c = 1
}
a = 0
b = 1
c = 0
if (a=1 and b=0 and c=1)
while (a=1 and b=0 and c=1)
{
...
a = 0
b = 1
c = 0
sleep 1
a = 1
b = 1
c = 1
if (a=1 and b=1 and c=1)
break
}
a = 1
b = 0
c = 1
if (a=0 and b=1 and c=0)
while (a=0 and b=1 and c=0)
{
...
a = 1
b = 0
c = 1
sleep 1
a = 1
b = 1
c = 1
sleep 1
a = 0
b = 1
c = 0
if ((a=1 and b=1 and c=1) or (a=1 and b=0 and c=1)) 
break
}

Самая толстая мышка должна получать удар током в приоритете над остальными, те, что поменьше - поменьше. Но это однопоток, и одновременно все действия нельзя делать.
Условие в условии, значение в значении. Ну вобщем вы поняли, это бесконечная писанина. Теперь он стал разрастаться так, что на поиски нужного участка и перебирание переменных уходит полдня.
Естественно я задумался об оптимизации и объединении значений этих переменных в группы по одному названию. В голову приходят только функции.

Самаятолстаямышка(){
признак1
признак2
признак3
return совпадение всех 3-х
}

Средняямышка(){
признак4
признак5
признак6
return совпадение всех 3-х
}

Самаямаленькаямышка(){
признак7
признак8
признак9
return совпадение всех 3-х
}
;;;;;;;;;;;;;;
if Самаятолстаямышка() 
{
Толстая:
while Самаятолстаямышка() ;Выполнять пока толстаямышь рядом
 {
 удар током её
 }
}
if Средняямышка() 
{
 while Средняямышка() ;Выполнять пока средняя мышка рядом
 {
 удар током её
 ;Но. Если появилась толстая мышка - то удар током еЁ!
 if Самаятолстаямышка() 
 gosub Толстая
 ;Или просто break цикла
 }
}
;Опять же в меньшей мышке должны проверяться большие
if Самаямаленькаямышка() 
{
 while Самаямаленькаямышка() ;Выполнять пока мелкая мышка рядом
 {
 удар током её
 ;Но. Если появилась толстая или средняя мышка - то удар током их!
 if Самаятолстаямышка() 
 gosub Толстая
 if Средняямышка() 
 gosub Средняя
 ;Или просто break цикла
 }
}

Нужно объединение групп переменных в одну, а то слишком объёмный код получается, и неудобно читаемый.

14

Re: AHK: присвоение одной переменной нескольких действий

Совершенно не понятно что нужно получить. Более кратко и ясно изложите суть.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

15

Re: AHK: присвоение одной переменной нескольких действий

Функции у меня не работают. Что тут непонятного

16 (изменено: Lolykroly, 2021-02-15 13:52:35)

Re: AHK: присвоение одной переменной нескольких действий

Я не могу понять как сюда подставить значение чтобы оно не возвращало пустоту!!!

FFF(){
a=1
b=0
c=1
FFF1 = (a=1 and b=0 and c=1)
return FFF1
}

F2:: 
{
if FFF()
{
msgbox %FFF1%
}
}
return

Пробовал и так: FFF1 := (a=1 and b=0 and c=1)
И так
FFF1 == (a=1 and b=0 and c=1)
И так
FFF1=(a=1 and b=0 and c=1)
И так
И на ушах стоял, и в поле выходил в полнолуние. Костёр жёг кровь девственниц и пшеницу через коня кидал! Всё бестолку.

17 (изменено: Lolykroly, 2021-02-15 14:00:43)

Re: AHK: присвоение одной переменной нескольких действий

Еще я бы сильно поумнел если бы кто-нибудь разъяснил что означает вся та хрень в скобках после названия функции. А то в справке об этом очень абстрактное пояснение. По всей видимости это что-то из очень базового программирования
Что вот это

Функцию можно также вызвать, не сохраняя возвращаемое значение:
Однако в этом случае любое значение, возвращаемое функцией, отбрасывается. Поэтому, если исполнение функции не приводит к какому-нибудь другому результату помимо возврата значения, в вызове этой функции нет никакого смысла.

На шаманском языке обозначает?

18 (изменено: Lolykroly, 2021-02-15 15:21:35)

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Gt() {
 var := 1 
 var2 := 2 
 var3 := 3 
 if (var = 1 && var2 = 2 && var3 = 3)
 return True
 else return False
}

Ну впринципе правильно, только вот значений которые можно проверить нехватает:

FFF(){
a=1
b=0
c=1
if (a=1 and b=0 and c=1)
return True
else 
return False
}

Возвращает не значение а истинность или ложность. И not FFF() реагирует, и на !FFF() только вот на (FFF() == nil) не реагирует.

Осталось только узнать чем вот такая конструкция:

if FFF()
msgbox Да
else
msgbox Нет

лучше вот такой

if FFF()
msgbox Да
if !FFF()
msgbox Нет

кроме удобства читабельности?

Вобщем-то могу сказать что для моего случая, такая работа с функцией не подходит, поскольку она не возвращает нормальные значения.

19

Re: AHK: присвоение одной переменной нескольких действий

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

20

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly Вы можете возвращать что угодно, не обязательно только True или False.


msgbox, % gt() ; покажет 123

Gt() {
 var := 1 
 var2 := 2 
 var3 := 3 
 if (var = 1 && var2 = 2 && var3 = 4)
 return 550
 else return 123
}

Много информации в офф. справке https://www.autohotkey.com/docs/Functions.htm

GD

21 (изменено: Lolykroly, 2021-02-15 16:15:09)

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Вы можете возвращать что угодно

Понятно, не думал что так всё буквально. Но пока что и true хватало.
Проблема пока с переменными за её областью.

т.е. стоит сделать вот так

a=1
FFF(){
b=1
c=1
if (a=1 and b=0 and c=1)
return True
else return False
}

И функция не работает. Даже объявление переменной глобальной не помогает.

22

Re: AHK: присвоение одной переменной нескольких действий

Можно передавать значения и без глобальных переменных.


var := 1

msgbox, % gt(var)

Gt(temp_var) { 
	var2 := 2 
	var3 := 3 
	if (temp_var = 1 && var2 = 2 && var3 = 4)
	return 550
	else return 123
}
GD

23 (изменено: Lolykroly, 2021-02-15 16:28:34)

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Можно передавать значения и без глобальных переменных.

Что означает temp_?

Вобщем я ничего не понял, кроме того, что если вписать названия переменных за её пределами в её параметры, они проверяются. Т.е. мне все переменные чтоли теперь в скобки вписывать?

А если у меня их 100?
Или хотя бы 3, как тут?

a=1
b=0
c=1
FFF(a, b, c){
if (a=1 and b=0 and c=1)
return 1
else return 0
}

Зачем их дублировать?

24

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly, я б на вашем месте рискнул справку почитать.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

25

Re: AHK: присвоение одной переменной нескольких действий

Тут само понятие функции нужно понимать, как всё устроено. Это сложно объяснить новичку на пальцах, поэтому все отправляют читать справку.
Попробую, но не факт что верно:

Название_функции(переменная1, переменная2, и т.д. если нужны)
{ ; Начало функции.
 <-- Тело функции, то что она выполняет при её вызове.
 Return <-- конец функции и возвращение из неё переменной / объекта и т.д.
} ; Завершение функции.

Если нужно сравнить переменные, их можно отправить в функцию, либо уже в ней объявить их глобально.

Если нужно вернуть истинность переменных (если каждая из них не равна 0):

a := 1
b := 3
c := 7
d := 0

Результат := Test(a,b,c)
MsgBox, % Результат		; Отображаем результат "1".

Результат2 := Test(a,b,d)
MsgBox, % Результат2		; Отображаем результат "0".


Test(a,b,c)
{
 Return a && b && c
}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

26

Re: AHK: присвоение одной переменной нескольких действий

__Михаил__ пишет:

но не факт что верно:

Мне не определение надо, а расшифровку с машинописного на человеческий язык. Терминологию то я и в справке прочитаю.
Но вот необходимость указания переменных в параметрах для меня стало огорчением. что она из скрипта другие переменные читать не может. Это только в ахк так? Или это распространённая практика?

teadrinker пишет:

ly, я б на вашем месте рискнул справку почитать.

Всё. То лучшее. что у меня есть - я слизал откуда-то большим куском кода, и потом разбирая по частям понимал как оно работает, или складывал из отдельных рабочих частей. От справки толку нету - смотришь в книгу а видишь фигу.

27

Re: AHK: присвоение одной переменной нескольких действий

Чтобы разбирать по частям и понимать, как оно работает, всё равно нужно читать справку. Без неё могут возникнуть всякие заблуждения и ложные догадки, которые затянут процесс. Для начала лучше прочитать про общий синтаксис AutoHotkey. Потом про синтаксис функций. Это в итоге займёт меньше времени, чем искать закономерности в чужом коде.
Может я не прав? Может быть, стоит в теме AutoHotkey для чайников! выложить простейшие примеры функций?

28

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly пишет:

понимал как оно работает

Не обольщайтесь, пока что понимания особо не заметно.

Lolykroly пишет:

От справки толку нету - смотришь в книгу а видишь фигу.

Ну а читать-то не пробовали?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

29

Re: AHK: присвоение одной переменной нескольких действий

ypppu пишет:

Может быть, стоит в теме AutoHotkey для чайников! выложить простейшие примеры функций?

Так а разве даже в текущем переводе не достаточно понятно разобрано?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

30

Re: AHK: присвоение одной переменной нескольких действий

Да, всё-таки уже разжёвано. Главное, не лениться.

31

Re: AHK: присвоение одной переменной нескольких действий

teadrinker Это не так. Вам кажется, что всё разжевано по мелочам потому, что вы в этом прекрасно разбираетесь. Это обычное явление, когда справку пишут специалисты для специалистов. Что бы новичкам было понятно, ее надо писать с новичком, тандемом. Вы были бы удивлены, какие вопросы у нас бывают всплывают при разборе какого-то материала. Вопросы, порой элементарные, о существовании которых вы даже и подумать не могли бы, но которые для нас становятся камнем преткновения.

Конечно, есть миллионы которые же разобрались и нет проблем. И столько же, кто стопорнулся и бросил. "Любой мануал по любой теме(не только скрипты) должен стремиться быть понятен, как гиперкэжуал для мобилок. И это факт, чем проще - тем легче - тем обхват аудитории больше."

GD

32

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Вы были бы удивлены, какие вопросы у нас бывают всплывают при разборе какого-то материала

А конкретный пример можете привести, касающийся простого применения функций?

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

33

Re: AHK: присвоение одной переменной нескольких действий

Вроде ясно написал:

__Михаил__ пишет:

либо уже в ней объявить их глобально.

Что тут непонятного? Переменные можно использовать без явной передачи в функцию:

a := 1
b := 3
c := 7
d := 0

Результат := Test()
MsgBox, % Результат		; Отображаем результат "1".

Результат2 := Test2()
MsgBox, % Результат2		; Отображаем результат "0".


Test()
{
 Global a,b,c
 Return a && b && c
}

Test2()
{
 Global a,b,d
 Return a && b && d
}
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

34

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Вам кажется, что всё разжевано по мелочам потому, что вы в этом прекрасно разбираетесь. Это обычное явление, когда справку пишут специалисты для специалистов. Что бы новичкам было понятно, ее надо писать с новичком, тандемом.

AutoHotkey вообще-то не для специалистов. Однако, для использование AutoHotkey требуются ненулевые знания основ информатики. Какие-то совсем простые вещи можно запилить чисто интуитивно. Но всё равно надо знать, что такое операторы, переменные, как присваивать значения переменным. Знать, что такое условия и циклы. После этого уже можно читать справку по AutoHotkey.

35

Re: AHK: присвоение одной переменной нескольких действий

teadrinker пишет:

рискнул справку почитать.

Неоправданный риск. Идёт война, учиться некогда. И от того, как умело ты используешь подручные средства - будет зависеть твоё выживание.

__Михаил__ пишет:

Что тут непонятного? Переменные можно использовать без явной передачи в функцию:

Вы, вероятно упустили, что я уже писал, по поводу того, что если переменных много, все их в функцию не запихаешь. Вот сами отправляете справку читать, а сами не вчитываетесь в то, что пишут ваши собеседники. Этакие двойные стандарты.

ypppu пишет:

После этого уже можно читать справку по AutoHotkey.

Пока вы будете читать - вас уже убьют.

teadrinker пишет:

простого применения функций?

Вот так и не ответил никто, почему казалось бы такой простой "функции" в функциях нету, как обращение к уже известным в скрипте переменным?

36

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly пишет:

Идёт война, учиться некогда

Ничего наивнее не слышал. Вероятно, вы совсем недавно вылупились из яйца, это отчасти оправдывает вашу позицию, но, если не хотите расстрелять своих же, учитесь пользоваться оружием, тем более, что речь идёт о высокотехнологичном оружии.

Lolykroly пишет:

Вот так и не ответил никто, почему казалось бы такой простой "функции" в функциях нету, как обращение к уже известным в скрипте переменным?

Ну, видимо, читать ответы вам тоже некогда. Тогда могу только пожелать удачи в бою. Убьют — тогда приходите.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

37

Re: AHK: присвоение одной переменной нескольких действий

teadrinker пишет:

Вероятно, вы совсем недавно вылупились из яйца,

Люди не вылупляются из яйца)) Вы что. Совсем недавно родились?
Моя мама учила меня использовать других людей по максимуму, потому что это их единственная возможность проявить себя - быть кому-то нужным, и не помереть от скуки.

teadrinker пишет:

если не хотите расстрелять своих же

Я дал им фору) Они уже давно научились от такого защищаться, и попрятались в окопы. Настал мой черёд) Вот навёрстываю упущенное

38

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly пишет:

Люди не вылупляются из яйца)) Вы что. Совсем недавно родились?
Моя мама учила меня

Вы просто пока не знаете, что мамы не всегда говорят правду.

Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

39

Re: AHK: присвоение одной переменной нескольких действий

teadrinker пишет:

А конкретный пример можете привести, касающийся простого применения функций?

Я не оправдываю отсутствие желания ТСа читать справку. Конкретно простого применения функции - в справке очень доходчиво расписано (включая офф. справку). Хотя когда я читал, мне было не понятно что такое "ByRef". Написано красиво и пример был, но понял только методом тыка. 

Моё сообщение было общего характера, про справку в целом (включая офф.). Грамотная речь в справке ≠ понятная речь. Возможно конечно всё зависит от твоего уровня, на котором ты читаешь конкретный урок. Если сразу пытаться понять функции, не зная что такое операторы, переменные и т.д. то наверное вообще будет ничего не понятно и начнешь винить в плохой доходчивости справки. Но это частный случай, в целом редко на просторах интернета есть действительно простые и понятные мануалы на какую-то тему. На мой взгляд нужно иметь талант, чтобы понятно и на простом языке писать обучение, которое поймет любой ищущий. Думаю каждый хоть раз встречал материал (видео, книгу или статью) который ну просто "вау", подача настолько лёгкая, что вы сразу же понимали абсолютно всё.

GD

40

Re: AHK: присвоение одной переменной нескольких действий

Botsy пишет:

Я не оправдываю отсутствие желания ТСа читать справку. Конкретно простого применения функции - в справке очень доходчиво расписано (включая офф. справку). Хотя когда я читал, мне было не понятно что такое "ByRef". Написано красиво и пример был, но понял только методом тыка.

Ну, по факту я понял что сам по себе AHK не охватывает всех моих амбиций, там как бы всё равно за пределы его влияния придётся выходить, как бы ты не вызубрил справку.

41

Re: AHK: присвоение одной переменной нескольких действий

Lolykroly пишет:

Вы, вероятно упустили, что я уже писал, по поводу того, что если переменных много, все их в функцию не запихаешь.

То есть функция должна мысленно определить какие вы там захотели переменные использовать глобально а какие нет? Хорош тупить.
Функция работает так же как и всё в этом мире - есть данные для обработки - есть результат вычислений. Само по себе ничего не сможет работать.

Ещё раз, приведите конкретную задачу: что откуда вы хотите получить (текст, цифры, название окна или другие уникальные данные), иначе можете забыть о помощи. Тут нет телепатов или экстрасенсов.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

42

Re: AHK: присвоение одной переменной нескольких действий

__Михаил__ пишет:

какие вы там захотели переменные использовать глобально а какие нет? Хорош тупить.

Вы немного не поняли: Объявление переменных глобальными не решает вопрос. Она всё равно их не видит.

43

Re: AHK: присвоение одной переменной нескольких действий

Приведите сокращённый код, в котором не работают глобальные переменные - будем разбираться.
Код должен быть рабочим, чтобы было где объявление переменных и где они должны явно выводиться, но по какой-то причине этого не происходит.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

44

Re: AHK: присвоение одной переменной нескольких действий

Очень сложно понять, что вам именно не понятно и чего вы хотите добиться.
Так все переменные объявлены из вне станут видны для функции.

a := 1
b := 2
c := 3

msgbox, % funcName()

; or

funcResult := funcName()
msgbox, % funcResult


funcName()
{
	global

	; msgbox, % "a = " a "`nb = " b "`nc = " c
	return a && b && c
}
Win10: LTSC (21H2); AHK: ANSI (v1.1.36.02)

45 (изменено: Lolykroly, 2021-02-20 21:54:17)

Re: AHK: присвоение одной переменной нескольких действий

Phoenixxx_Czar пишет:

Очень сложно понять, что вам именно не понятно и чего вы хотите добиться.
Так все переменные объявлены из вне станут видны для функции.

Но переменные не объявлены внутри функции. Это противоречит информации в справке, как минимум там неполная информация.

a=1
b=0
c=1
FFF(){
if (a=1 and b=0 and c=1)
return 1
else return 0
}

F2::
if FFF
msgbox, Да
if not FFF
msgbox, Нет
return

Вот в таком виде она их не видит.
Но стоит добавить слово global внутрь функции даже не объявляя переменные там - и вуаля:

a=1
b=0
c=1
FFF(){
global
if (a=1 and b=0 and c=1)
return true
else return false
}

F2:: 
{
if FFF()
msgbox Да
if !FFF()
msgbox Нет
;else
;msgbox Да
}
return

Совсем другой результат.
Хотя по смыслу справки переменные четко должны быть объявлены после слова global, а не просто проверяться.

46

Re: AHK: присвоение одной переменной нескольких действий

Конечно не видит, Global кто в неё добавит, сам АХК?
Откуда функции взять переменные, которые в ней не указаны и в неё не отправлены?

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

47 (изменено: Lolykroly, 2021-02-20 21:58:47)

Re: AHK: присвоение одной переменной нескольких действий

__Михаил__ пишет:

которые в ней не указаны и в неё не отправлены?

По смыслу справки
if (a=1 and b=0 and c=1)
не является присвоением переменным какого-то значения, а сравнения, однако глобал каким-то образом выполняет эту функцию, как будто дословно обозначает "присвоить каждой из сравниваемых переменных глобальную видимость для функции ххх" - этого ну никак не указано в справке.

48

Re: AHK: присвоение одной переменной нескольких действий

Вызов функции кто должен делать? Тоже АХК?

a := 1
b := 0
c := 1

FFF()
{
 Global
 if (a = 1) and (b = 0) and (c = 1)
  Return 1
 else Return 0
}


F2::
if FFF := FFF()
 msgbox, Да
if not FFF
 msgbox, Нет
Return
Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

49 (изменено: Lolykroly, 2021-02-20 22:02:11)

Re: AHK: присвоение одной переменной нескольких действий

__Михаил__ пишет:

Вызов функции кто должен делать? Тоже АХК?

Да это я описался.

F2::
if FFF()
 msgbox, Да
if !FFF()
 msgbox, Нет
Return

Неважно. Я говорю о сути

50

Re: AHK: присвоение одной переменной нескольких действий

Дважды запускать функцию? Зачем? Пустая трата ресурсов - индуский код.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

51 (изменено: Lolykroly, 2021-02-20 22:12:06)

Re: AHK: присвоение одной переменной нескольких действий

__Михаил__ пишет:

Дважды запускать функцию?

А если так?

F2::
if FFF()
 msgbox, Да
sleep 1000
if !FFF()
 msgbox, Нет
Return

Уже есть смысл?

52

Re: AHK: присвоение одной переменной нескольких действий

Нет, переменные же не менялись. По крайней мере в ЭТОМ коде.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101

53

Re: AHK: присвоение одной переменной нескольких действий

Переменные становятся видимыми глобально только на момент сравнения? Или остаются таковыми для всех остальных операций сравнивания вне функции? Просто лень проверять...

54

Re: AHK: присвоение одной переменной нескольких действий

Ссылку на справку дать? Вот тут.
Всё написано, нужно просто уметь читать.

+ открыть спойлер

Видимость переменных и их декларирование. За исключением локальных переменных в функциях, все переменные имеют глобальную видимость; это значит, что их содержимое может быть прочитано или изменено из любой точки текущего скрипта. Более того, переменные даже не декларируются; чтобы переменная возникла, ей просто надо воспользоваться (причем возникающая переменная изначально пуста).

Вот что тут непонятного? Если совсем туго - нужно больше читать форум, все простые примеры тестировать, менять в них данные и снова тестировать.
Программирование на АХК довольно простое, большинство операций можно осуществить за пару строк, не в курсе где ещё такое возможно т.к. изучал только Питон до него.

Win10x64, AHK v1.1.37.01 (Unicode 64-bit) | AHK-Wiki | Переменные и выражения | RegEx101