1 (изменено: Clannad5, 2022-08-27 16:31:08)

Тема: AHK: Исходя из условия If выставлять определенное значение.

Здравствуйте!
Есть код:


color := "Red"
if (color = "Red" or "Blue" or "Black")

Как можно одной строкой понять, какое значение нашел If и сопоставить его с нужным числом?
Если писать так, как я знаю, это будет примерно так:


color := "Red"
if (color = "Red")
color := "14822187"
if (color = "Blue")
color := "другое значение"
if (color = "Black")
color := "другое значение"

но это слишком длинно и громозко.
Можно ли как-то укоротить условие? Например:


color := "Red"
if (color = "Red" or "Blue" or "Black")
color := значение подходящее под найденный цвет RED "14822187"

Можно конечно изначально прописать

Red := "1 цвет", Blue := "2 цвет", Black := "3 цвет"

но не хотелось бы создавать лишние переменные и строчки кода.

2 (изменено: ypppu, 2022-08-27 17:33:34)

Re: AHK: Исходя из условия If выставлять определенное значение.

Такое делается с использованием ассоциативного массива (то есть массива, содержащего пары ключ: значение). В английской справке есть. Я как-то начал делать перевод, но дело зависло. Вот фрагмент.

Post's attachments

asm.png 80.82 kb, file has never been downloaded. 

You don't have the permssions to download the attachments of this post.

3

Re: AHK: Исходя из условия If выставлять определенное значение.

ypppu
Так, к примеру у меня есть этот массив, а как его в условии If то добавить?Вот чего я не понимаю всё еще.

4

Re: AHK: Исходя из условия If выставлять определенное значение.

Massiv := {}
Massiv := {"Red": "14822187", "Blue": "другое значение", "Black": "третье значение"}

MsgBox,  % Massiv["Red"] 
Return

5 (изменено: Clannad5, 2022-08-27 19:17:32)

Re: AHK: Исходя из условия If выставлять определенное значение.

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

Color := "Red"

Т.к у меня есть условие на конвертацию.
В Color я могу указать либо код decimal значение, либо цвет целиком: Red, Black, Blue и т.д.

И нужно чтобы  в условии если он находил Red, blue или другие наименования, то сразу выдавал нужный код цвета в Color, например:

Color := "Red"
if (color = "Red" or "Blue" or "Black")
color := "тут код цвета в 0xFFFFFF вариации, исходя из того, что нашло условие"
Else 
; если условие не найдено, то проверяет уже условие на Decimal значение цвета и конвертирует его в hex 0xFFFFFF 

То есть я хочу укоротить условие if одной, двумя строками, который мне вернёт нужный hex, в зависимости от того, что найдёт.
AHK позволяет подобное или же нет?

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

6

Re: AHK: Исходя из условия If выставлять определенное значение.

Не понимаю, что тут не ясно.
Я показал, как создать массив данных типа "ключ-значение". Я продемонстрировал, как можно одним действием, указав ключ, получить соответствующее ему значение.

Так может понятнее?

Massiv := {}
Massiv := {"Red": "14822187", "Blue": "другое значение", "Black": "третье значение"}
color := Massiv["Red"]
MsgBox, %color%
Return

7

Re: AHK: Исходя из условия If выставлять определенное значение.

ypppu
Ладно, спрошу иначе тогда.
Можно как-то указать в Color только имя ключа, без имени массива?

Color := Red

8

Re: AHK: Исходя из условия If выставлять определенное значение.

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

9 (изменено: serzh82saratov, 2022-08-27 20:26:40)

Re: AHK: Исходя из условия If выставлять определенное значение.

Про это речь:

Massiv := {"Red": "14822187", "Blue": "другое значение", "Black": "третье значение"}

color = Red
color := Massiv[color]  ; это вместо if
MsgBox, %color%
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru
Win10x64 v20H2, AutoHotkey_L v1.1.34.01 (Unicode 32-bit). AhkSpy, Hotkey, ClockGui

10 (изменено: Clannad5, 2022-08-27 20:34:32)

Re: AHK: Исходя из условия If выставлять определенное значение.

serzh82saratov
Да, как раз это я и искал.
Спасибо!
Примерно то, как будет работать по итогу, что решает мою проблему в несколько строчек как и хотелось.



Massiv := {"Red": "14822187", "Blue": "другое значение", "Black": "третье значение"}

color = 0xe22b2b
Precolor := Massiv[color]
if Precolor = ; если на выходе получим пустой Precolor, то значение не будет изменяться в Color
return
color =: Precolor ; если на выходе получим значение из массива, то присвоим переменной color значение из массива.

11

Re: AHK: Исходя из условия If выставлять определенное значение.

Телепаты из отпуска вернулись, повезло!

12

Re: AHK: Исходя из условия If выставлять определенное значение.

ypppu
Почему телепаты?Я вроде отчётливо объяснил в примере, что хотелось сделать упрощенный код, чтобы не прописывать на каждый цвет условие, а сделать всё в одну-две строчки .

13

Re: AHK: Исходя из условия If выставлять определенное значение.

Значит неотчётливо.

14

Re: AHK: Исходя из условия If выставлять определенное значение.

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


Если(if) переменная(Color) равняется(=) Red или Blue или Black
Значит нам нужно присвоить переменной Color соответствующий цвет.
конец кода

Ну то есть это равносильно этому:


Massiv := {"Red": "14822187", "Blue": "другое значение", "Black": "третье значение"}
color = Red
Precolor := Massiv[color]

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

15

Re: AHK: Исходя из условия If выставлять определенное значение.

Clannad5 пишет:

Если(if) переменная(Color) равняется(=) Red или Blue или Black
Значит нам нужно присвоить переменной Color соответствующий цвет.
конец кода

Это звучит как:


if (color == "Red" || color == "Blue" || color == "Black")
color := "цвет"

Что явно не соответствует результату,  который вы получили в ответах.

Win10: LTSC (v1809); AHK: ANSI (v1.1.34.03)

16 (изменено: ypppu, 2022-08-27 22:06:47)

Re: AHK: Исходя из условия If выставлять определенное значение.

В 7 посте Вы спросили:

Можно как-то указать в Color только имя ключа, без имени массива?

В 8 посте я ответил, что нет.
В 9 посте serzh82saratov взял строчку из моего кода и представил её в виде двух отдельных строчек. Это не противоречит тому, что нужно указывать и имя ключа, и имя массива.

17 (изменено: Clannad5, 2022-08-27 22:52:21)

Re: AHK: Исходя из условия If выставлять определенное значение.

ypppu
Так я же написал:

Clannad5 пишет:

ypppu
Ладно, спрошу иначе тогда.
Можно как-то указать в Color только имя ключа, без имени массива?

Color := Red

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