<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=93296&amp;view=findpost&amp;p=700740</guid>
        <pubDate>Sat, 30 Apr 2005 14:26:46 +0000</pubDate>
        <title>Логические выражения</title>
        <link>https://forum.sources.ru/index.php?showtopic=93296&amp;view=findpost&amp;p=700740</link>
        <description><![CDATA[Old Bat: <span class="tag-font" data-value="Arial" style="font-family:Arial"><br>
<strong class='tag-b'>Не увлекайтесь функциями IIF, Swich, Choose</strong><br>
<br>
При всей своей внешней привлекательности эти функции работают весьма медленно.<br>
Например, в данном случае <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">IIF(x = y,y = 2*x,y = Ln(x)/cos(y))</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
будут вычислены оба выражения, вне зависимости от результата проверки выражения &quot;x = y&quot;<br>
В VBA нет оптимизации логических выражений при компиляции, так что предпочтительней использовать if… then… end if или Select Case…End Select<br>
<br>
<span class='tag-u'>Приятное исключение</span>: в отчетах и запросах ACCESS  эти функции аналогичны if… then… end if<br>
<br>
<strong class='tag-b'>Применяйте логическое присваивание в одной строке</strong><br>
<br>
Например, данный код<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">If X = 0 then</div><div class="code_line">&nbsp;&nbsp; Y = true</div><div class="code_line">Else</div><div class="code_line">&nbsp;&nbsp; Y = false</div><div class="code_line">End if</div></ol></div></div></div></div><br>
Можно записать так<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">Y = (x = 0)</div></ol></div></div></div></div><br>
<strong class='tag-b'>Переключение между логическими выражениями</strong><br>
<br>
Если требуется поменять значение логической переменной на противоположное, можно сделать так:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">If X=true then</div><div class="code_line">&nbsp;&nbsp; X = false</div><div class="code_line">Else</div><div class="code_line">&nbsp;&nbsp; X = true</div><div class="code_line">End if</div></ol></div></div></div></div><br>
<br>
А можно так:  <br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">X = not X</div></ol></div></div></div></div><br>
<strong class='tag-b'>Помещайте код обработки наиболее вероятного случая в начало Select Case</strong><br>
</span><br>
<br>
<span class="tag-color tag-color-named" data-value="gray" style="color: gray"><span class='tag-size' data-value='8' style='font-size:8pt;'>Использованы материалы: &quot;From Access 2002 Desktop Developer&#39;s Handbook&quot;<br>
Litwin, Getz, and Gunderloy. (Sybex, 2001)</span></span>]]></description>
        <author>Old Bat</author>
        <category>Оптимизация VBA-кода</category>
      </item>
	
      </channel>
      </rss>
	