Author Topic: Логические операторы и скобки  (Read 9533 times)

0 Members and 1 Guest are viewing this topic.

A2Dept

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Логические операторы и скобки
« on: November 29, 2013, 08:00:18 AM »
Отключена вложенность выражений в нескольких скобках?

Во внутрь ифа я не попадаю, это самый простой пример.
Code: [Select]
$a = 1
$b = 2

if ( (($a = 1) & ($b = 2)) )
print("Hello, world!")
end_if

Вот пример посложнее, снова "Хелоу..." в логах не пишут.
Code: [Select]
$a = 1
$b = 2
$c = 3

if ( (($a = 1) & ($b = 2)) | (($a = 1) & ($c = 2)) )
print("Hello, world!")
end_if

В примечаниях в мануале написано "Приоритетные скобки не поддерживаются", хз, что это для программистов и математиков означает  ;D Сори, если эта фраза относится к моим примерам, если это так, то планируется ли ввод в следующих версиях (у меня Clickermann v4.8 (build 000)) многомерная вложенность скобок? Если "нет", то почему?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Логические операторы и скобки
« Reply #1 on: November 29, 2013, 09:23:58 AM »
Отключена вложенность выражений в нескольких скобках?

Во внутрь ифа я не попадаю, это самый простой пример.
Code: [Select]
$a = 1
$b = 2

if ( (($a = 1) & ($b = 2)) )
print("Hello, world!")
end_if

Вот пример посложнее, снова "Хелоу..." в логах не пишут.
Code: [Select]
$a = 1
$b = 2
$c = 3

if ( (($a = 1) & ($b = 2)) | (($a = 1) & ($c = 2)) )
print("Hello, world!")
end_if

В примечаниях в мануале написано "Приоритетные скобки не поддерживаются", хз, что это для программистов и математиков означает  ;D Сори, если эта фраза относится к моим примерам, если это так, то планируется ли ввод в следующих версиях (у меня Clickermann v4.8 (build 000)) многомерная вложенность скобок? Если "нет", то почему?
В первом примере лишние скобки. Вот так нужно:
Code: (clickermann) [Select]
$a = 1
$b = 2

if (($a = 1) & ($b = 2))
   print("Hello, world!")
end_if

Во втором да, ограничение. Логическим операторам & (AND) , | (OR), ^ (XOR) нельзя задать приоритет (очерёдность выполнения) скобками. Они выполняются только слева направо как написаны.
                    1                2               3
if ( (($a = 1) & ($b = 2)) | (($a = 1) & ($c = 2)) )
Соответственно и скобки там стоят неправильно.
Нужно как то выкручиваться, например вложенными сравнениями
Code: (clickermann) [Select]
$a = 1
$b = 2
$c = 3

$n = 0
IF(($a = 1) & ($b = 2))
   $n = 1
ELSE
   IF(($a = 1) & ($c = 2))
      $n = 1
   END_IF
END_IF

IF($n = 1)
   print("Hello, world!")
END_IF
Не красиво, ну ладно  :) может если подумать можно проще сделать. Ну или действия 2 раза писать если небольшие (большие можно выделить в подпрограмму.
Code: (clickermann) [Select]
$a = 1
$b = 2
$c = 3

IF(($a = 1) & ($b = 2))
   print("Hello, world!")
ELSE
   IF(($a = 1) & ($c = 2))
      print("Hello, world!")
   END_IF
END_IF


A2Dept

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: Логические операторы и скобки
« Reply #2 on: November 29, 2013, 09:31:43 AM »
Жаль, что нельзя кучу скобок для логических операций. Кучу ифов городить - как-то не совсем правильно. Ну, это мое интуитивное мышление бунтует, не программист (мб программистам и норм). А кучу скобок сложно технически реализовать?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Логические операторы и скобки
« Reply #3 on: November 29, 2013, 09:46:41 AM »
Это вопрос к Джонни.
Я думаю он просто отложил на "потом" как второстепенное. Не так часто используется и можно выкрутится. Надеюсь впоследствии добавит возможность.