Author Topic: SWITCH +  (Read 8102 times)

0 Members and 1 Guest are viewing this topic.

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
SWITCH +
« on: January 19, 2014, 09:00:50 AM »
Появление инструкции SWITCH облегчило жизнь, но немногим))) Было бы лучше если добавить к части CASE область значений.
Code: (clickermann) [Select]
$var = $_xmouse
SWITCH($var)
AREA(-1, $_xmax/2)
   print("Курсор в левой половине экрана")
AREA($_xmax/2, ($_xmax + 1))
   print("Курсор в правой половине экрана")
END_SWITCH
HALT

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SWITCH +
« Reply #1 on: January 19, 2014, 05:46:17 PM »
Это пример для демонстрации или рабочий?
При двух вариантах  достаточно IF. Если курсор не слева... значит он  справа :)
А я думал там можно условия писать. Вот что значит не использовать. Сижу на 4.8 жду исправления подпрограмм. Пока не работает, нет смысла переписывать скрипты.


Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: SWITCH +
« Reply #2 on: January 19, 2014, 05:51:22 PM »
Конечно для демонстрации. Ведь не существует инструкции AREA. Сейчас у меня ситуация, когда значение переменной является одним из семи областей значений. Пока можно нагородить только IF.

Johnny

  • Создатель
  • Герой форума
  • *
  • Posts: 593
    • View Profile
Re: SWITCH +
« Reply #3 on: January 20, 2014, 07:57:44 AM »
А я думал там можно условия писать. Вот что значит не использовать. Сижу на 4.8 жду исправления подпрограмм. Пока не работает, нет смысла переписывать скрипты.

чего это они не работают. они работают кроме одного единственного узкого места - вызова подпрограммы внутри цикла

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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SWITCH +
« Reply #4 on: January 20, 2014, 10:30:26 AM »
чего это они не работают. они работают кроме одного единственного узкого места - вызова подпрограммы внутри цикла

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

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

Про Swich...  только не ругаться  :)

В Autoit есть две похожие конструкции
Switch...Case...EndSwitch http://autoit-script.ru/autoit3_docs/keywords/Switch.htm
Как раз сравнение определённой переменной с разными диапазонами (или одним значением).

И очень похожая функция выбора
Select...Case...EndSelect http://autoit-script.ru/autoit3_docs/keywords/Select.htm
После Select переменная не указывается. Здесь мы в Case пишем любые выражения, не обязательно сравнивать с одной переменной.

Второй вариант универсальней, хоть и приходится иногда чуть больше писать.
В принципе второго варианта достаточно, чтобы перекрыть все потребности и первый частный случай.
В основном я пользовался Select, очень удобно.
« Last Edit: January 20, 2014, 10:35:31 AM by Vint »


Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: SWITCH +
« Reply #5 on: January 20, 2014, 04:30:54 PM »
Куда не ткни каждый третий в цикле или другой подпрограмме.
У меня так же в старых скриптах

Крис Тинка

  • Активный участник
  • ***
  • Posts: 171
    • View Profile
Re: SWITCH +
« Reply #6 on: January 20, 2014, 06:41:10 PM »
нагромождение условий в данном случае будет не самой плохой идеей.
Нагромождение то не сложное, но на мой взгляд для дальнейшего редактирования читаемость SWITCH легче и найти в большом скрипте проще...

aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: SWITCH +
« Reply #7 on: March 14, 2014, 10:19:42 AM »
если я правильно понял то плюсую кристинку
есть такой код
Code: (clickermann) [Select]
switch($loc)
case(0)     // начало скрипта идем
$loc=8    // в стартовую локацию переменная loc=0
case(1)
$loc=2
case(3)
if($first=1)
print("первый круг идем на исходную")
$loc=8
else
$loc=4
end_if
case(5)
if($first=1)
print("первый круг идем на исходную")
$loc=8
else
$loc=6
end_if
case(7)         
$loc=8
end_switch

case(0) и case(7)  одинаковые и было бы логичным сократить код до case(0;7)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: SWITCH +
« Reply #8 on: March 14, 2014, 11:18:18 AM »
Это поможет в редких случаях. Лучше ввести Select...Case с произвольным условием.
Code: (clickermann) [Select]
Select
    Case ($а = $akkdata[2])
        //.....
    Case (($а > 3) & ($a ! b))
        //.....
end_select


aden

  • Оплот сообщества
  • ****
  • Posts: 363
    • View Profile
Re: SWITCH +
« Reply #9 on: March 14, 2014, 12:07:55 PM »
Лучше ввести Select...Case с произвольным условием.
даже более функционально получается