1

Тема: AHK: Тернарный условный оператор

Высмотрел в справке этот самый оператор.
Использовать его с присвоениями конечно хорошо , вот только как его использовать с другими командами?


1:: ff == 10 ? MsgBox 1 : Msgbox 2

Не работает. Что я сделал неправильно?

2 (изменено: svoboden, 2017-06-17 17:52:23)

Re: AHK: Тернарный условный оператор

Как-нибудь так:

zx = 10

1:: zx < 11 and zx > 9 ? s() : b()

s() {
MsgBox правда
}

b() {
MsgBox ложь
}
return

3

Re: AHK: Тернарный условный оператор

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

x := 10
; ++x
y := (x <= 10) ? (s(), b()) : (b(), s())
MsgBox % y
ExitApp

s() {
	MsgBox 1
	Return "One"
}

b() {
	MsgBox 2
	Return "Two"
}

4 (изменено: svoboden, 2017-07-24 18:58:34)

Re: AHK: Тернарный условный оператор

stealzy, это тоже ни то: "y := (x <= 10)", ведь пользователь не указывал переменную "y" перед сравнением. Я думаю, надо так:

zx = 10

zx != 10 ? s() : b()

s() {
MsgBox правда
}

b() {
MsgBox ложь
}

, но в этом случае срабатывает один раз ложь.

5 (изменено: teadrinker, 2017-06-17 18:47:24)

Re: AHK: Тернарный условный оператор

ff := 10
1:: (ff = 10) ? Message("правда") : Message("ложь")

Message(text)  {
   MsgBox, % text
}

Или так:

ff := 10
1:: Message(ff = 10 ? "правда" : "ложь")

Message(text)  {
   MsgBox, % text
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

6

Re: AHK: Тернарный условный оператор

Если коротко , то мне нужно прописать send для всех возможных комбинаций 8 направлений крестовины и n-го количества кнопок джойстика (для начала возьмем 1 кнопку , думаю для остальных сам допишу), желательно не на уровне дилетанта ибо этот скрипт я улучшаю. Все таки хочется что бы мой прогресс обучения не стоял на месте!

В моем случае переменная %ff% может принимать 9 разных значений , 1 из которых обрабатывать не нужно.

А как же быть с другими восьми?
Стоит их задавать через этот тернарный условный оператор или банальное if будет лучше?
А может лучше сравнять часть %имени переменной с текстом% с выше указанной переменной %ff% и задать текст для печати через команду присвоения предварительно засунув все это в функцию???


Func(Text:=a1_%ff%) ; кстати поддерживают ли обращения к функциям выражения?

Или может есть чудо способ назначить хоткей на joyX и joyY , либо провернуть это дело без использования таймера на GetKeyState? (меня бесят бесконечные циклы)

7

Re: AHK: Тернарный условный оператор

shahlik002, довольно сумбурно объясняете, мало что понятно. Отвечу на то, что понял.

shahlik002 пишет:

В моем случае переменная %ff% может принимать 9 разных значений , 1 из которых обрабатывать не нужно.

А как же быть с другими восьми?

Приведу пример для трёх. Предположим, ваша переменная ff может принимать значения one, two и three, из которых должны обрабатываться первые два. Допустим, нам нужно, в зависимости от значения, посылать разный текст. Тогда значения и соответствующий текст можно перечислить в массиве:

values := { one: "текст для значения ""one""", two: "текст для значения ""two""" }

ff := "one", Message(values[ff])
ff := "two", Message(values[ff])
ff := "three", Message(values[ff])  ; в этом случае текст пустой

Message(text)  {
   if (text = "")   ; если текст пустой, ничего не делаем
      Return
   MsgBox, % text
}

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

values := { one: Func("FirstFunc"), two: Func("SecondFunc") }

ff := "one", values[ff].Call()
ff := "two", values[ff].Call()
ff := "three", values[ff].Call()  ; такого нет, не будет обрабатываться

FirstFunc()  {
   MsgBox, % A_ThisFunc
}

SecondFunc()  {
   MsgBox, % A_ThisFunc
}
Разработка AHK-скриптов:
e-mail dfiveg@mail.ru
Telegram jollycoder

8

Re: AHK: Тернарный условный оператор

Или можно сделать оочень длинный тернарный оператор.

f:=9

Message(f=1 ? "текст1" : f=2 ? "текст2" : f=3 ? "текст3" : f=4 ? "текст4" : f=5 ? "текст5" : f=6 ? "текст6" : f=7 ? "текст7" : f=8 ? "текст8" : f=9 ? "текст9" : "")


Message(text)  {
   MsgBox, % text
}
Win 10 x64
AHK v1.1.33.02
                       Справка тебе в помощь.

9

Re: AHK: Тернарный условный оператор

Спасибо всем большое , получилось на ура .
Уже подумываю в новую тему полностью скрипт залить и попросить вас потыкать пальцами на мои ошибки.

10

Re: AHK: Тернарный условный оператор

Alectric пишет:

Или можно сделать

Если из массива данные по ключу извлекаются наподобии:

a := 111
b := 222

c = a
MsgBox % %c%
c = b
MsgBox % %c%

а не перебором массива, то оптимальнее с массивом.

shahlik002 пишет:

Или может есть чудо способ назначить хоткей на joyX и joyY , либо провернуть это дело без использования таймера на GetKeyState? (меня бесят бесконечные циклы)

Есть такой способ - HID. Как то постил наброски.

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

11

Re: AHK: Тернарный условный оператор

Назначать кнопки на джойстик можно вот этим, хотя сам не проверял, и не знаю, что это такое.