1 (изменено: ice_cold, 2012-07-22 18:11:58)

Тема: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

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

label3:
sleep 3000

   MouseMove, 350,530
   MouseGetPos, xpos, ypos 
   PixelGetColor,color, xpos, ypos

if 0x6573da=color
    {
    Gosub, label1
    }

if 0x6122a6c=color
    {
    Gosub, label2
    }

Gosub, label3



label1:
msgbox, выполнено первое условие
label2:
msgbox, выполнено первое условие

2

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

Все спасибо разобрался была ошибка

ice_cold пишет:
label3:
sleep 3000

   MouseMove, 350,530
   MouseGetPos, xpos, ypos 
   PixelGetColor,color, xpos, ypos

if 0x6573da=color
    {
    Gosub, label1
    }
; Исправлено if 0x6122a6c=color

if 0x122a6c=color
    {
    Gosub, label2
    }

Gosub, label3



label1:
msgbox, выполнено первое условие
label2:
msgbox, выполнено первое условие

3

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

if color = 0x6573da
или
if (color = 0x6573da)

ужасный баг…

4

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

ice_cold пишет:

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

label3:
   MouseMove, 350,530
   MouseGetPos, xpos, ypos    
   PixelGetColor,color, xpos, ypos

Не вижу смысла последовательности этих 3-х комманд.
Попробуй найти 10 отличий.


label3:
sleep 3000

   PixelGetColor,color, 350, 530

if (color=0x6573DA)
    {
    Goto, label1
    }

if (color=0x6122A6C)
    {
    Goto, label2
    }

Goto, label3



label1:
msgbox, выполнено первое условие
Goto, label3
label2:
msgbox, выполнено второе условие
Goto, label3

5

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

Мпэт пишет:

Не вижу смысла...

Ну так без неведомых смыслов вообще получится


SetTimer, something, 3000
return

something:
PixelGetColor,color, 350, 530
if color=0x6573DA 
msgbox выполнено первое условие
if color=0x6122AC
msgbox выполнено второе условие

Однако, полагаю, отсутствие видимого смысла в подавляющем большинстве случаев не есть отсутствие любого смысла .

BIG BROTHER IS WATCHING YOU.

6

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

; ...
if color=0x6573DA 
msgbox выполнено первое условие
Else if color=0x6122AC
msgbox выполнено второе условие

7

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

creature.ws пишет:
; ...
if color=0x6573DA 
msgbox выполнено первое условие
Else if color=0x6122AC
msgbox выполнено второе условие

Не совсем понял, зачем тут else. Вернее, совсем не понял . Ведь color=0x6122AC и само по себе уже подразумевает, что color<>0x6573DA?

BIG BROTHER IS WATCHING YOU.

8 (изменено: creature.ws, 2012-07-23 11:10:49)

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

Совсем не понял почему здесь нет else ведь если color=0x6122AC это само по себе уже подразумевает, что color<>0x6573DA

Вы наверно уже разобрались, но всё же уточню: else нужен чтоб в случае истинности первого равенства не производить проверку второго, так как это бессмысленно.

9 (изменено: Korobkof, 2012-07-23 14:48:33)

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

creature.ws пишет:

Вы наверно уже разобрались, но всё же уточню: else нужен чтоб в случае истинности первого равенства не производить проверку второго, так как это бессмысленно.

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


if color=0x6573DA 
msgbox выполнено первое условие
else
msgbox выполнено второе условие

Или я все-таки что-то недопонимаю?

BIG BROTHER IS WATCHING YOU.

10

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

Еще раз:

if color=0x6573DA 
msgbox выполнено первое условие ; или выполнено или не выполнено
if color=0x6122AC
msgbox выполнено второе условие ; если выполняется первое равенство проверять равна ли переменная второму значению не нужно.

Два ваших последовательных If подразумевают, что переменная может быть одновременно равна как одному так и другому значению. А она не может, математику не обмануть. Чтоб не проверять второе равенство в случае если выполняется первое — нужно использовать else.
Еще раз?

11

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

creature.ws пишет:

Два ваших последовательных If подразумевают, что переменная может быть одновременно равна как одному так и другому значению. А она не может, математику не обмануть. Чтоб не проверять второе равенство в случае если выполняется первое — нужно использовать else.
Еще раз?

Точнее сказать, они игнорируют невозможность этого, упуская возможность незначительной экономии времени/ресурсов в частном случае истинности первого равенства .
Да, если доставляет, можно еще раз .

BIG BROTHER IS WATCHING YOU.

12

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

Вставлю свои пять копеек
Все же лучше что-то делать, приходя от общего к частному, чем наоборот. Потому что при попытке переделать в будушем (а так оно и бывает) частное решение в более универсальное, можно получить такие вилы, что проще переделать немаленький объем работы с нуля, чем кромсать индусско-китайское творение черезчур богатого воображения.
Пример по сабжу: ладно, в данном частном случае есть всего 2  оператора if, которые просто проверяют совпадение по цвету. А если это будет пара десятков if, да в каждом проверка на результат работы не очень маленькой функции? Поневоле задумаешься, if  или все-таки if ... else if..., или вообще использовать другую, более продуманную конструкцию. И таких примеров может быть масса.

13

Re: AHK: IF и все что с ним связано (где то баг скорее у меня в мозгах)

fenx, не надо дублировать посты в разных темах. Я удалил Ваш пост.