1

Тема: AHK: Варианты записи if else

Как такой код сократить если error много?

error1 := "a"
error2 := "b"
error3 := "c"
x := "test"
if !(x ~= error1) and !(x ~= error2) and !(x ~= error3)
   msgbox

2

Re: AHK: Варианты записи if else

error26 := "z"
n := 26
Loop, %n%
{
If (x ~= error%A_Index%)
Var := 1
}
If Var != 1
     MsgBox, Условие     выполнено

3 (изменено: Malcev, 2014-06-04 13:00:35)

Re: AHK: Варианты записи if else

А такая форма записи неправильна?

If !(x ~= error%A_Index%)

Надо так?

If (x ~= error%A_Index%)
   Var := 1
If Var != 1

И пускать список ошибок через loop - это правильно?
Как принято делать у программистов?

4

Re: AHK: Варианты записи if else

Malcev пишет:

А такая форма записи неправильна?

If !(x ~= error%A_Index%)

Надо так?

If (x ~= error%A_Index%)
   Var := 1
If Var != 1

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


Malcev пишет:

И пускать список ошибок через loop - это правильно?
Как принято делать у программистов?

Я не программист.

5 (изменено: serzh82saratov, 2014-06-04 13:22:37)

Re: AHK: Варианты записи if else

В данном случае можно просто засунуть в один шаблон:


error1 := "a"
error2 := "b"
error3 := "c"
x := "test"
if !(x ~= error1 "|" error2 "|" error3)
    msgbox yes
else
    msgbox no

Если действительно много, то лучше через InStr в цикле проверять, быстрее.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

6 (изменено: Malcev, 2014-06-04 13:26:34)

Re: AHK: Варианты записи if else

А где можно прочитать про записи этих шаблонов?
Как я понял - "|" - это равносильно "and"?
И в догонку "~=" как-то можно сделать независимым от заглавных и строчных букв? То есть аналог If InStr().

7

Re: AHK: Варианты записи if else

"~=" это RegEx, про него всё написано на русише.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

8

Re: AHK: Варианты записи if else

И в догонку "~=" как-то можно сделать независимым от заглавных и строчных букв?

Это опция "i"


error1 := "a"
error2 := "b"
error3 := "c"
x := "testA"
if !(x ~= "i)" error1 "|" error2 "|" error3)
    msgbox yes
else
    msgbox no

Как я понял - "|" - это равносильно "and"?

Несовсем.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

9

Re: AHK: Варианты записи if else

Про Регекс понял. Так что же за разделитель | ?

10

Re: AHK: Варианты записи if else

Регулярные выражения (RegEx) - краткий справочник

Если понял, то что здесь не ясно.

Вертикальная черта разделяет варианты, между которыми можно выбирать. Совпадение принимается, если любой из альтернативных элементов совпадает. Например, gray|grey отвечает и gray, и grey. Аналогично шаблон gr(a|e)y делает ту же работу благодаря скобкам. Примечание переводчика: требуется добавить, что первым вариантом считается все от "(" или начала шаблона до '|', а последним - все от '|' до ")" или конца шаблона. Обычно, чтобы не запутаться, набор вариантов всегда заключают в скобки, даже если без этого можно было бы обойтись.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

11

Re: AHK: Варианты записи if else

Так такое разделение только в случае ~= возможно.
Я думал, что это альтернативеая форма записи без написания в каждом из вариантов переменной.