pascalabcnet/PABCNetHelp/LangGuide/Operators/var_statement.html

87 lines
4.7 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<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>
&nbsp; var </b>a1,a2,a3: integer;<br>&nbsp; <b>var </b>n: real := 5;&nbsp; <br>
&nbsp; <b>var</b> s := ' ';<b> <br>
&nbsp; </b>...<b><br>
end</b>.</code>
</blockquote>
<p class="pabcmain">В последнем случае тип переменной автовыводится по типу
выражения в правой части. Автовыведение типа активно используется при
инициализации переменной вызовом конструктора или функции. возвращающей объект:</p>
<blockquote>
<code><b>begin<br>
&nbsp; var</b> l&nbsp;:= new List&lt;integer&gt;; <br>&nbsp; <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>&nbsp;<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&nbsp;:= x -&gt; x*x; // так нельзя!<br><strong>var</strong>
f : Func&lt;integer,integer&gt; := x -&gt; x*x; </code>
</blockquote>
<p>Внутриблочные описания используются чтобы не захламлять раздел описаний
описанием вспомогательных переменных. Кроме этого, внутриблочные описания
позволяют вводить переменные именно в тот момент когда они впервые
потребовались. Оба этих фактора существенно повышают читаемость программы.</p>
</body>
</html>