<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: вычисление логического выражения в операторах if, while и repeat]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме вычисление логического выражения в операторах if, while и repeat форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Tue, 14 Apr 2026 02:34:56 +0300</pubDate>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2060/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_SjONuWNb" href="/user/107/" bx-tooltip-user-id="107">Constantin Constantin</a> пишет: <br />if (p != NULL && *p == value)<br /><br />=============<br />да, вот теперь, наверно, соглашусь. <br />
			<i>13.03.2015 15:14:54, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2060/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2060/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 15:14:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2053/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><br /><a class="blog-p-user-name" id="bp_5r9Ufpdv" href="/user/137/" bx-tooltip-user-id="137">sam063rus</a> пишет:<br /><br />Я, конечно, не спорю но, если можно, приведите примеры когда это имеет большое значение?<br /><br />p.s. во многих компиляторах это работает уже по умолчанию в случае режима оптимизации по быстродействию. а разработчики компиляторов - далеко не дураки, чтоб делать так, чтоб результат работы программы (по критерию правильности) от этого зависел. <br />это лишь влияет на конечное быстродействие.<br /><br />=============<br />Ничего подобного. Это влияет на логику. Стандартный пример:<br /><br />if (p != NULL && *p == value)<br /> &nbsp; &nbsp;return true;<br /><br />и т.п.<br /><br />Поэтому такое поведение и закладывают в стандарт языка. <br />
			<i>13.03.2015 11:04:01, Constantin Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2053/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2053/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 11:04:01 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2045/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_h3vp70IC" href="/user/137/" bx-tooltip-user-id="137">sam063rus</a> пишет: <br />Я, конечно, не спорю но, если можно, приведите примеры когда это имеет большое значение?<br /><br />=============<br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_rTu4T819" href="/user/114/" bx-tooltip-user-id="114">Дмитрий</a> пишет: <br />В качестве примера можно привести такой оператор:<br />if (t_id ~= nil) and not IsWindowClosed(t_id) then ...<br /><br />=============<br />Например, я подумал, а что если в результате вызова IsWindowClosed(t_id) или какой-нибудь другой функции (в том числе самописной) в таком же условном операторе при обработке ею значения параметра, равного nil, возникнет ошибка, которая приведет к аварийной остановке работы скрипта. <br />
			<i>13.03.2015 02:48:26, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2045/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2045/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 02:48:26 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2044/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_OhPVoReK" href="/user/114/" bx-tooltip-user-id="114">Дмитрий</a> пишет: <br />В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется "complete boolean eval", поскольку иногда этот вопрос имеет большое значение.<br /><br />=============<br /><noindex><a href="http://www.freepascal.org/docs-html/prog/progsu4.html" target="_blank" rel="nofollow">http://www.freepascal.org/docs-html/prog/progsu4.html</a></noindex><br /><br />Я, конечно, не спорю но, если можно, приведите примеры когда это имеет большое значение?<br /><br />p.s. во многих компиляторах это работает уже по умолчанию в случае режима оптимизации по быстродействию. а разработчики компиляторов - далеко не дураки, чтоб делать так, чтоб результат работы программы (по критерию правильности) от этого зависел. <br />это лишь влияет на конечное быстродействие. <br />
			<i>13.03.2015 02:34:47, sam063rus.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2044/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2044/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 02:34:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2043/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			То же самое написано и в официальном описании языка.<br /><br />Lua 5.1 Reference Manual :<br />The conjunction operator <B>and</B> returns its first argument if this value is <B>false</B> or <B>nil</B>; otherwise, <B>and</B> returns its second argument. The disjunction operator <B>or</B> returns its first argument if this value is different from <B>nil</B> and <B>false</B>; otherwise, <B>or</B> returns its second argument. Both <B>and</B> and <B>or</B> use short-cut evaluation; that is, the second operand is evaluated only if necessary.<br /><noindex><a href="http://www.lua.org/manual/5.1/manual.html#2.5.3" target="_blank" rel="nofollow">http://www.lua.org/manual/5.1/manual.html#2.5.3</a></noindex><br /><br />Lua 5.3 Reference Manual :<br />The conjunction operator <B>and</B> returns its first argument if this value is <B>false</B> or <B>nil</B>; otherwise, <B>and</B> returns its second argument. The disjunction operator <B>or</B> returns its first argument if this value is different from <B>nil</B> and <B>false</B>; otherwise, <B>or</B> returns its second argument. Both <B>and</B> and <B>or</B> use short-circuit evaluation; that is, the second operand is evaluated only if necessary.<br /><noindex><a href="http://www.lua.org/manual/5.3/manual.html#3.4.5" target="_blank" rel="nofollow">http://www.lua.org/manual/5.3/manual.html#3.4.5</a></noindex> <br />
			<i>13.03.2015 01:17:16, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2043/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2043/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 01:17:16 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2042/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_fMWxOCf6" href="/user/107/" bx-tooltip-user-id="107">Constantin Constantin</a> пишет: <br />Это стандарт языка, а не оптимизация. Можно смело полагаться на такое поведение.<br /><br />=============<br />Вы правы, судя по тому, что написано в книге Programming in Lua (first edition) by Roberto Ierusalimschy:<br />The operator <B>and</B> returns its first argument if it is false; otherwise, it returns its second argument. The operator <B>or</B> returns its first argument if it is not false; otherwise, it returns its second argument.<br />Both <B>and</B> and <B>or</B> use short-cut evaluation, that is, they evaluate their second operand only when necessary.<br /><br /><noindex><a href="http://www.lua.org/pil/3.3.html" target="_blank" rel="nofollow">http://www.lua.org/pil/3.3.html</a></noindex> <br />
			<i>13.03.2015 00:58:43, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2042/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2042/topic265/</guid>
			<pubDate>Fri, 13 Mar 2015 00:58:43 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2032/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_irywKsdt" href="/user/107/" bx-tooltip-user-id="107">Constantin Constantin</a> пишет: <br />Это стандарт языка, а не оптимизация<br /><br />=============<br />А почему я не нашел ничего на эту тему в официальной документации?<br />Или я плохо искал? Если не трудно, можете дать ссылку на упоминание об этом? <br />
			<i>12.03.2015 16:54:34, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2032/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2032/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 16:54:34 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2004/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_DXy8pcZB" href="/user/21/" bx-tooltip-user-id="21">Michael Bulychev</a>, не согласен. Это стандарт языка, а не оптимизация. Можно смело полагаться на такое поведение. <br />
			<i>12.03.2015 12:34:54, Constantin Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2004/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2004/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 12:34:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2003/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_ommwmYih" href="/user/114/" bx-tooltip-user-id="114">Дмитрий</a> пишет: <br />Спасибо!<br />Я правильно понимаю, что это стандартное поведение для Lua?<br />Или все же не исключено, что в разных версиях/реализациях языка поведение в данном случае может быть различным?<br /><br />=============<br />Это всего лишь оптимизация на уровне виртуальной машины, не рекомендуется использовать подобные тонкости как часть своего алгоритма. <br />
			<i>12.03.2015 12:05:54, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2003/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2003/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 12:05:54 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2001/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Спасибо!<br />Я правильно понимаю, что это стандартное поведение для Lua?<br />Или все же не исключено, что в разных версиях/реализациях языка поведение в данном случае может быть различным? <br />
			<i>12.03.2015 11:55:30, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2001/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2001/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 11:55:30 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message2000/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_Zc3ImCAA" href="/user/114/" bx-tooltip-user-id="114">Дмитрий</a>, полностью не вычисляет. Останавливает вычисление как только понятен результат. <br />
			<i>12.03.2015 11:50:47, Constantin Constantin.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message2000/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message2000/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 11:50:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1994/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<br />====quote====<br /><a class="blog-p-user-name" id="bp_uopQzTx3" href="/user/114/" bx-tooltip-user-id="114">Дмитрий</a> пишет: <br />Здравствуйте!<br />Хотелось бы узнать, всегда ли интерпретатор Lua (и в частности QLua) вычисляет логические выражения полностью в операторах if, while и repeat, или же он прерывает их вычисление в том случае, когда результат уже заведомо известен?<br />В качестве примера можно привести такой оператор:<br />if (t_id ~= nil) and not IsWindowClosed(t_id) then ...<br />Если t_id == nil, то будет ли в данном случае осуществляться вызов функции IsWindowClosed(t_id)? Ведь и без этого ясно, что данное выражение будет равно false.<br />В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется &quot;complete boolean eval&quot;, поскольку иногда этот вопрос имеет большое значение.<br />А как с этим обстоят дела в (Q)Lua?<br /><br />=============<br />Добрый день.<br />проверить можно самому:<br /><br />
====code====
<pre>function foo1()
&nbsp;&nbsp;&nbsp;print("in foo1")
&nbsp;&nbsp;&nbsp;return false
end

function foo2()
&nbsp;&nbsp;&nbsp;print("in foo2")
&nbsp;&nbsp;&nbsp;return false
end
print("--- OR")
if (foo1() or foo2())&nbsp;&nbsp;&nbsp;then
end
print("--- AND")
if (foo1() and foo2())&nbsp;&nbsp;&nbsp;then
end
 </pre>
=============
результат:<br /><br />
====code====
<pre>--- OR
in foo1
in foo2
--- AND
in foo1
 </pre>
============= <br />
			<i>12.03.2015 05:24:47, Michael Bulychev.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1994/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1994/topic265/</guid>
			<pubDate>Thu, 12 Mar 2015 05:24:47 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>вычисление логического выражения в операторах if, while и repeat</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message1993/topic265/">вычисление логического выражения в операторах if, while и repeat</a></b> <i>вопрос разработчикам</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Здравствуйте!<br />Хотелось бы узнать, всегда ли интерпретатор Lua (и в частности QLua) вычисляет логические выражения полностью в операторах if, while и repeat, или же он прерывает их вычисление в том случае, когда результат уже заведомо известен?<br />В качестве примера можно привести такой оператор:<br />if (t_id ~= nil) and not IsWindowClosed(t_id) then ...<br />Если t_id == nil, то будет ли в данном случае осуществляться вызов функции IsWindowClosed(t_id)? Ведь и без этого ясно, что данное выражение будет равно false.<br />В компиляторах языков программирования типа Pascal или C (уже не помню точно какого из них) для управления поведением программы в таком случае была опция, которая называлась кажется "complete boolean eval", поскольку иногда этот вопрос имеет большое значение.<br />А как с этим обстоят дела в (Q)Lua? <br />
			<i>11.03.2015 23:26:49, Дмитрий.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message1993/topic265/</link>
			<guid>http://forum.quik.ru/messages/forum10/message1993/topic265/</guid>
			<pubDate>Wed, 11 Mar 2015 23:26:49 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
