<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>Форум QUIK [тема: Возврат nil из некоторых функций]</title>
		<link>http://forum.quik.ru</link>
		<description>Новое в теме Возврат nil из некоторых функций форума  на сайте Форум QUIK [forum.quik.ru]</description>
		<language>ru</language>
		<docs>http://backend.userland.com/rss2</docs>
		<pubDate>Fri, 10 Apr 2026 11:45:23 +0300</pubDate>
		<item>
			<title>Возврат nil из некоторых функций</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message28408/topic3071/">Возврат nil из некоторых функций</a></b> <i>не отличить штатную отработку от ошибки</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			<a class="blog-p-user-name" id="bp_0QlQHRR7" href="/user/7362/" bx-tooltip-user-id="7362">Enfernuz</a>, Добрый день, <br /> &nbsp; &nbsp; &nbsp; Мы рассмотрели Ваше пожелание. По итогам его анализа сообщаем Вам, &nbsp; &nbsp; &nbsp; что реализация пожелания признана потенциально целесообразной. &nbsp; &nbsp; &nbsp; Если по результатам дальнейшего анализа, включающего юридические &nbsp; &nbsp; &nbsp; аспекты, анализ на непротиворечивость с общей политикой компании, &nbsp; &nbsp; &nbsp; никаких возражений не возникнет, мы постараемся включить Ваше &nbsp; &nbsp; &nbsp; пожелание в план доработок при выпуске одной из следующих версий &nbsp; &nbsp; &nbsp; нашего ПО. <br />
			<i>25.12.2017 15:40:14, Zoya Skvorcova.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message28408/topic3071/</link>
			<guid>http://forum.quik.ru/messages/forum10/message28408/topic3071/</guid>
			<pubDate>Mon, 25 Dec 2017 15:40:14 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Возврат nil из некоторых функций</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26760/topic3071/">Возврат nil из некоторых функций</a></b> <i>не отличить штатную отработку от ошибки</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Добрый день,<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_yQ5SbjS1" href="/user/7362/" bx-tooltip-user-id="7362">Enfernuz</a> написал:<br />Т.е. на лицо некоторая непоследовательность в подходе к возвращаемым значениям-ошибкам. По науке, в Lua есть механизм error() для сигнализирования ошибок, но я осознаю, что могут быть разные причины его не применять. И если уж так, то пихать nil только в случае ошибок -- другие ситуации не должны возвращать nil.<br />Как-то так. Возможно, где-то что-то упустил, т.к. функций много, и не везде я при тестировании делал пометки, но что есть, то написал. <br />Нужно либо эти моменты получше задокументировать, либо переделать &quot;по-феншую&quot; (хотя тут, скорее всего, малой кровью не обойтись, т.к. уже написано немало кода с использованием существущего механизма).<br /><br /><br />=============<br />Ваше пожелание относительно единообразия возвращения ошибок в функциях зарегистрировано. &nbsp;Мы постараемся рассмотреть его и &nbsp;сообщить Вам результаты анализа. Впоследствии, по результатам анализа, &nbsp;будет приниматься решение о реализации пожелания в будущих версиях ПО.<br /><br /><br />====quote====<br /><a class="blog-p-user-name" id="bp_Sanp2cyV" href="/user/7362/" bx-tooltip-user-id="7362">Enfernuz</a> написал:<br />Отдельно:<br />IsWindowClosed -- функция задокументирована так, что по &nbsp;сути ожидать приходится возврата либо nil, либо true. Чем провинился &nbsp;false? Имхо, false можно было возвращать, если окно есть, но не &nbsp;закрылось (по каким угодно причинам); true -- окно закрылось; nil -- &nbsp;окно не найдено или ещё какая напасть.<br /><br /><br />=============<br />Ваше пожелание зарегистрировано. &nbsp;Мы постараемся рассмотреть его и &nbsp;сообщить Вам результаты анализа. Впоследствии, по результатам анализа, &nbsp;будет приниматься решение о реализации пожелания в будущих версиях ПО. <br />
			<i>20.09.2017 11:45:28, Stanislav Tvorogov.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26760/topic3071/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26760/topic3071/</guid>
			<pubDate>Wed, 20 Sep 2017 11:45:28 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
		<item>
			<title>Возврат nil из некоторых функций</title>
			<description><![CDATA[<b><a href="http://forum.quik.ru/messages/forum10/message26721/topic3071/">Возврат nil из некоторых функций</a></b> <i>не отличить штатную отработку от ошибки</i> в форуме <a href="http://forum.quik.ru/forum10/">Программирование на языке Lua</a>. <br />
			Многие функции библиотеки в результате своей работы возвращают nil. Но есть такие, которые возвращают nil и в случае &quot;нормального&quot; (в логическом смысле) режима работы.<br />Например, функция SearchItems. Если передать ей коллбэк &quot;function(t) return false end&quot;, то ожидая получить пустую таблицу на выходе (= пустой массив в Lua, &quot;индексов, удовлетворяющих условию, не найдено&quot;), на самом деле мы получаем nil. Тот же самый nil мы получим, если произошла ошибка в коллбэке. Тем самым, получив nil, сложно понять, не нашлось ли индексов по условию или это в коллбэке ошибка.<br /><br />Ещё функции, где возникают подобные вопросы: <br />getMoneyEx -- что в случае ошибки во входных параметрах (например, передал nil в качестве всех параметров), что в случае просто отсутствия информации (допустим, указали валюту, которой нет на лимитах -- это ведь не ошибка?) возвращается nil. Т.е. непонятно, то ли в аргументах ошибка, то ли просто информация не найдена.<br />getDepoEx -- аналогично;<br />getFuturesLimit - аналогично;<br />getFuturesLHolding -- аналогично;<br />getSecurityInfo -- тут спорно, т.к. nil можно трактовать как отсутствие информации по переданной паре аргументов. Т.е. что nil, что {} в данном случае -- в принципе, одинаково можно понять. nil даже получше будет, наверное.<br /><br />Например, есть функции, где отсутствие информации трактуется как &quot;не nil&quot;, и где ошибочные ситуации не задокументированы:<br />getClassSecurities -- возвращает пустую строку;<br />getMoney -- возвращает параметризованную таблицу со значениями по умолчанию (нули);<br />getDepo - см.getMoney;<br />getCandlesByIndex -- возвращает ({}, 0, &quot;&quot;), если запросили несуществующих тег;<br />CalcBuySell - возвращает (0, 0), если передать nil'ы в качестве аргументов;<br />getParamEx -- возвращает таблицу, если намеренно передать &quot;испорченные&quot; аргументы;<br />getParamEx2 -- см. getParamEx;<br />getPortfolioInfo -- возвращает {};<br />getPortfolioInfoEx -- см. getPortfolioInfo;<br />getBuySellInfo -- см. getPortfolioInfo;<br />getBuySellInfoEx -- см. getPortfolioInfo.<br /><br />Отдельно:<br />IsWindowClosed -- функция задокументирована так, что по &nbsp;сути ожидать приходится возврата либо nil, либо true. Чем провинился &nbsp;false? Имхо, false можно было возвращать, если окно есть, но не &nbsp;закрылось (по каким угодно причинам); true -- окно закрылось; nil -- &nbsp;окно не найдено или ещё какая напасть.<br /><br />Подводя итог, по факту имеем: <br />1) часть функций, где не задокументирован формат возвращаемых значений в случае ошибки, но всё-таки возвращающих не-nil (пустые таблицы, строки, ...);<br />2) часть функций, где формат возвращаемых значений задокументирован (&quot;возвращает nil&quot;), но его трудно отличить от ситуации, когда аргументы семантически верные, но по ним нет данных;<br />3) остальные функции, где формат возвращаемого значения в случае ошибки задокументирован и не nil (true/false, -1, ...).<br /><br />Т.е. на лицо некоторая непоследовательность в подходе к возвращаемым значениям-ошибкам. По науке, в Lua есть механизм error() для сигнализирования ошибок, но я осознаю, что могут быть разные причины его не применять. И если уж так, то пихать nil только в случае ошибок -- другие ситуации не должны возвращать nil.<br />Как-то так. Возможно, где-то что-то упустил, т.к. функций много, и не везде я при тестировании делал пометки, но что есть, то написал. <br />Нужно либо эти моменты получше задокументировать, либо переделать &quot;по-феншую&quot; (хотя тут, скорее всего, малой кровью не обойтись, т.к. уже написано немало кода с использованием существущего механизма).<br /><br />P.S.<br />Функция SearchItems, по моим впечатлениям, страдает ещё от неверной работы фичи &quot;если в коллбэке вернёте nil, то поиск индексов остановится и вернёт все подходящие индексы до этого момента + тот, на котором остановились&quot;: у меня почему-то SearchItems упорно возвращал nil, а коллбэк был что-то типа &quot;function(t) if t.sec_code == 'AFKS' then return nil else return false end&quot;, при том, что этот же слегка изменённый коллбэк &quot;function(t) if t.sec_code == 'AFKS' then return true else return false end&quot; исправно выдавал массив из трёх элементов. Но этот момент я ещё потестирую отдельно на досуге. Написать всё-таки хотел не об этом, но побудила на написание поста именно она. <br />
			<i>19.09.2017 03:54:48, Enfernuz.</i>]]></description>
			<link>http://forum.quik.ru/messages/forum10/message26721/topic3071/</link>
			<guid>http://forum.quik.ru/messages/forum10/message26721/topic3071/</guid>
			<pubDate>Tue, 19 Sep 2017 03:54:48 +0300</pubDate>
			<category>Программирование на языке Lua</category>
		</item>
	</channel>
</rss>
