54 lines
2.9 KiB
HTML
54 lines
2.9 KiB
HTML
<html><head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="Условная операция">
|
||
</object>
|
||
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
||
<title></title>
|
||
<link rel="StyleSheet" href="../../default.css">
|
||
</head>
|
||
<body><H1>Условная операция</H1>
|
||
<p>Условная операция (<strong>первая форма</strong>) имеет следующий вид:</p>
|
||
<blockquote>
|
||
<em>условие</em> <code>?</code> <em>выражение1</em> <code>:</code> <em>выражение2</em>
|
||
</blockquote>
|
||
<p>Если условие выполняется, то результатом является значение выражения1, иначе
|
||
значение выражения2.</p>
|
||
<p>Например:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> min := a < b ? a : b;</code></p>
|
||
</blockquote>
|
||
<p>Нетрудно видеть, что условная операция позволяет в простых случаях не
|
||
использовать условный оператор. Например, предыдущий код для вещественных a и b
|
||
эквивалентен следующему:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> min: real;<br><strong>if</strong> a<b <strong>then</strong><br>
|
||
min := a<br><strong>else</strong> min := b;</code></p>
|
||
</blockquote>
|
||
|
||
<p>Кроме того, имеется <strong>вторая форма условной операции</strong> в
|
||
синтаксисе Паскаля: </p>
|
||
<blockquote>
|
||
<code><strong>if</strong><em> </em> </code>
|
||
<em>условие</em> <code> <strong>then</strong></code> <em>выражение1</em> <code><strong>else</strong></code> <em>выражение2</em>
|
||
</blockquote>
|
||
<p>Например: </p>
|
||
<blockquote>
|
||
<p><code><b>var</b> min := <strong>if</strong> a < b <strong>then</strong> a
|
||
<strong>else</strong> b;</code></p>
|
||
</blockquote>
|
||
<p>Рекомендуется использовать вторую форму условной операции.</p>
|
||
<p><strong>Ограничение</strong>. Вторую форму условной операции нельзя
|
||
использовать в качестве выражения верхнего уровня в лямбдах. Следующий код
|
||
<strong><em>ошибочен</em></strong>:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> l: real -> real := x -> <strong>if</strong> x<0 <strong>
|
||
then</strong> 0 <strong>else</strong> x;</code></p>
|
||
</blockquote>
|
||
<p>Для решения указанной проблемы нужно <em><strong>взять условную операцию в скобки</strong></em>:</p>
|
||
<blockquote>
|
||
<p><code><b>var</b> l: real -> real := x -> (<strong>if</strong> x<0 <strong>
|
||
then</strong> 0 <strong>else</strong> x);</code></p>
|
||
</blockquote>
|
||
<p> </p>
|
||
|
||
</body></html> |