87 lines
4.7 KiB
HTML
87 lines
4.7 KiB
HTML
<html>
|
||
|
||
<head>
|
||
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
||
<param name="Keyword" value="Внутриблочное описание переменной">
|
||
<param name="Keyword" value="Оператор описания переменной">
|
||
<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>В <b>PascalABC.NET</b> можно описывать переменные внутри
|
||
<a href="beginend.html">составного оператора</a> begin-end в
|
||
специальном операторе описания переменной. Такие описания называются внутриблочными. </p>
|
||
<p>Внутриблочное описание имеет одну из форм:</p>
|
||
<blockquote>
|
||
<b><code>var </code></b><code class="codeit"> список имен</code><code>:</code><code class="codeit">
|
||
тип</code><code>;</code></blockquote>
|
||
<p class="pabcmain">или</p>
|
||
<blockquote>
|
||
<b><code>var </code></b> <code class="codeit">имя</code><code>:</code><code class="codeit">
|
||
тип </code><code>:=</code><code class="codeit"> выражение</code><code>;</code>
|
||
</blockquote>
|
||
<p class="pabcmain">или</p>
|
||
<blockquote>
|
||
<b><code>var </code></b> <code class="codeit">имя</code><code>:</code><code class="codeit">
|
||
тип </code><code>=</code><code class="codeit"> выражение</code><code>;</code>
|
||
<code>// Для совместимости с Delphi </code>
|
||
</blockquote>
|
||
<p class="pabcmain">или</p>
|
||
<blockquote>
|
||
<b><code>var </code></b> <code class="codeit">имя </code><code>:=</code><code class="codeit">
|
||
выражение</code><code>;</code>
|
||
</blockquote>
|
||
<p class="pabcmain">Имена в списке перечисляются через запятую. Например:</p>
|
||
<blockquote>
|
||
<code><b>begin<br>
|
||
var </b>a1,a2,a3: integer;<br> <b>var </b>n: real := 5; <br>
|
||
<b>var</b> s := ' ';<b> <br>
|
||
</b>...<b><br>
|
||
end</b>.</code>
|
||
</blockquote>
|
||
<p class="pabcmain">В последнем случае тип переменной автовыводится по типу
|
||
выражения в правой части. Автовыведение типа активно используется при
|
||
инициализации переменной вызовом конструктора или функции. возвращающей объект:</p>
|
||
<blockquote>
|
||
<code><b>begin<br>
|
||
var</b> l := new List<integer>; <br> <strong>var</strong> a :=
|
||
Seq(1,3,5); // тип a выводится по типу возвращаемого значения Seq: array of
|
||
integer<br>
|
||
<b>end</b>.</code>
|
||
</blockquote>
|
||
<h2>Кортежное присваивание с описанием переменных</h2>
|
||
<p>Кортежное присваивание (распаковку кортежа в переменные) можно совмещать с описанием переменных:</p>
|
||
|
||
<blockquote>
|
||
<code>var t := (1,2);<br>(<strong>var </strong>a,<strong> var </strong>b) := (1,2);</code></blockquote>
|
||
<p>или</p>
|
||
|
||
<blockquote>
|
||
<code><strong>var</strong> (a,b) := (1,2);</code></blockquote>
|
||
<p>Распаковка кортежа в переменные часто используется при возвращении функцией
|
||
кортежа:</p>
|
||
<blockquote>
|
||
<code><strong>function</strong> SP(a,b: real) := (a*b,2*(a+b)); </code> <br>
|
||
...<br>
|
||
<code><strong>var</strong> (S,P) := SP(2,3); </code>
|
||
</blockquote>
|
||
<h2>Инициализация лямбда-выражением</h2>
|
||
<p>Автовыведение типа при описании невозможно при инициализации переменной
|
||
<a href="../FuncProgramming/lambdas.html">лямбда-выражением</a>:</p>
|
||
<blockquote>
|
||
<code>// <b>var</b> f := x -> x*x; // так нельзя!<br><strong>var</strong>
|
||
f : Func<integer,integer> := x -> x*x; </code>
|
||
</blockquote>
|
||
<p>Внутриблочные описания используются чтобы не захламлять раздел описаний
|
||
описанием вспомогательных переменных. Кроме этого, внутриблочные описания
|
||
позволяют вводить переменные именно в тот момент когда они впервые
|
||
потребовались. Оба этих фактора существенно повышают читаемость программы.</p>
|
||
</body>
|
||
|
||
</html>
|