Инструменты пользователя

Инструменты сайта


help:conditional

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

Both sides previous revision Предыдущая версия
Следущая версия
Предыдущая версия
help:conditional [2025/09/28 10:39]
aleks_versus [Условия]
help:conditional [2025/09/28 18:37] (текущий)
aleks_versus [Проблема висячего else]
Строка 5: Строка 5:
 Условия — это такие особые конструкции в **QSP**, которые позволят сделать вашу игру по настоящему интерактивной. Они позволяют разветвлять события,​ происходящие в игре в зависимости от уже сложившихся условий,​ и таким образом вносить разнообразие в игровой процесс. Операторы,​ которые используются в конструкциях условий,​ в программировании называются **операторами ветвления**. Условия — это такие особые конструкции в **QSP**, которые позволят сделать вашу игру по настоящему интерактивной. Они позволяют разветвлять события,​ происходящие в игре в зависимости от уже сложившихся условий,​ и таким образом вносить разнообразие в игровой процесс. Операторы,​ которые используются в конструкциях условий,​ в программировании называются **операторами ветвления**.
  
-Операторы ветвления часто используют с [[help:expression|операциями сравнения и с логическими операциями]].+Операторы ветвления часто используют с [[help:expressions|операциями сравнения и с логическими операциями]].
 ===== Операторы условий ===== ===== Операторы условий =====
  
Строка 265: Строка 265:
 ! эквивалентно ! эквивалентно
 *pl $iif(number mod 2 = 0,"​Число чётное","​Число не чётное"​) *pl $iif(number mod 2 = 0,"​Число чётное","​Число не чётное"​)
 +</​sxh>​
 +
 +===== Проблема висячего ELSE =====
 +
 +Если вы часто пользуетесь однострочными конструкциями условий,​ вы неизбежно столкнётесь с "​проблемой висячего ELSE". Это ситуация,​ когда невозможно однозначно трактовать,​ к какому ''​IF''​ относится ''​ELSE''​. Вот пример подобной неоднозначности:​
 +
 +<sxh qsp>
 +if first: if second: 'when true' else: 'when false'
 +</​sxh>​
 +
 +Сложно с ходу понять,​ к какому из ''​IF''​ — первому или второму — относится ''​ELSE''​.
 +
 +К счастью данная неоднозначность в QSP разрешается,​ как и во многих других языках программирования. ''​ELSE''​ всегда относится к ближайшему ''​IF''​ без ''​ELSE''​. То есть в данном случае ко второму. Вышеприведённая однострочная конструкция может быть представлена таким многострочным эквивалентом:​
 +
 +<sxh qsp>
 +if first:
 +  if second:
 +    'when true'
 +  else:
 +    'when false'
 +  end
 +end
 +</​sxh>​
 +
 +Из этого правила вытекает возможность создавать вот такие конструкции,​ где у каждого ''​IF''​ есть свой ''​ELSE'':​
 +
 +<sxh qsp>
 +if first: if second: 'when true' else: 'when false' else 'first false'
 +</​sxh>​
 +
 +А вот создать эквивалент такой многострочной конструкции в однострочной форме так просто не получится:​
 +
 +<sxh qsp>
 +if first:
 +  if second:
 +    'when true'
 +  end
 +else:
 +  'when false'
 +end
 +</​sxh>​
 +
 +Хотя, если //​очень//​ нужно...
 +
 +<sxh qsp>
 +if first: dynamic {if second:'​when true'} else: 'when false'
 +if first: if second: 'when true' else: args=args else: 'when false'
 </​sxh>​ </​sxh>​
  
 [[help:​organizing|Вперёд:​ Пользовательские функции и процедуры]] [[help:​organizing|Вперёд:​ Пользовательские функции и процедуры]]
  
help/conditional.1759055966.txt.gz · Последние изменения: 2025/09/28 10:39 — aleks_versus