/
n-dimens
/
pascalabcnet
Обзор
Документация
Войти
/
n-dimens
/
pascalabcnet
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
PABCNetHelp/LangGuide/Types/tuples.html
116 строк
7 KB
samuraiGH
adding working-tree-encoding attribute (#3325)
07 ноя 2025, 16:12
Не верифицирован
07 ноя 2025, 16:12
cf1fd29
Код
Авторство
О чём код?
<html> <head> <object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e"> <param name="Keyword" value="Tuple"> <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>Кортеж - это тип данных, являющийся аналогом <a href="records.html"> записи</a> или <a href="../Classes/index_classes.html">класса</a>. Как запись или класс, кортеж представляет собой набор элементов разных типов, но описывается существенно проще. Кроме того, поля кортежа имеют предопределенные имена и являются неизменными: поменять поля кортежа после его создания невозможно.</p> <h2>Тип кортежа</h2> <p>Для типа кортежа используется следующая запись:</p> <blockquote> <code><b>var</b> t: (string,integer);</code> </blockquote> <p>Данная запись похожа на объявление <a href="enum_subrange.html">перечислимого типа</a>. Если в круглых скобках - новые имена, то это перечислимый тип, а если имена типов, то это - тип кортежа.</p> <p>Кортежи представляются типом System.Tuple платформы .NET:</p> <blockquote> <code><b>var</b> t: System.Tuple<string,integer>;</code> </blockquote> <p>Однако данное представление может поменяться в будущем.</p> <h2>Конструирование значений типа кортеж</h2> <p>Значения типа кортеж могут быть сконструированы в виде заключенного в круглые скобки перечисления составляющих кортеж значений через запятую. Например:</p> <blockquote> <code>t := ('Иванов',23);</code> </blockquote> <p>Для построенных таким образом значений работает автовыведение типа:</p> <blockquote> <code><strong>var</strong> t1 := ('Иванов',(5,3,4)); // кортеж, вторым элементом которого является кортеж</code> </blockquote> <h2>Вывод кортежей</h2> <p>Как и при выводе записей, при выводе кортежей значения их элементов заключаются в круглые скобки и перечисляются через запятую:</p> <blockquote> <code>writeln(t); // (Иванов,23)<br>writeln(t1); // (Иванов,(5,3,4))</code></blockquote> <h2>Доступ к элементам кортежа</h2> <p>Элементы (поля) кортежа имеют имена Item1, Item2 и т.д.:</p> <blockquote> <code>Print(t.Item1,t.Item2);</code> </blockquote> <p>К элементам кортежа можно обращаться также по индексу:</p> <blockquote> <code>Print(t[0],t[1]);</code> </blockquote> <p>Индексы должны быть константными выражениями.</p> <p>После создания кортеж неизменен: его поля нельзя менять:</p> <blockquote> <code>t[1] := 20; // ошибка </code> </blockquote> <h2>Кортежное присваивание (распаковка кортежа в переменные)</h2> <p>Значения типа кортеж можно распаковать в переменные соответствующих типов, используя кортежное присваивание:</p> <blockquote> <code><strong>var</strong> t := ('Иванов',23);<br><strong>var</strong> name: string;<br><strong>var</strong> age: integer;<br>(name,age) := t;</code> </blockquote> <p>Последнее присваивание, где в левой части оператора присваивания используется заключенное в круглые скобки перечисление переменных, называется <strong> кортежным</strong>. Кортежное присваивание компилятор заменяет на несколько подряд идущих одиночных присваиваний:</p> <blockquote> <code>name := t[0];<br>age := t[1]; </code> </blockquote> <p>С использованием кортежного присваивания меняется стиль программирования. Например, чтобы поменять местами значения двух переменных a и b, достаточно написать следующее кортежное присваивание:</p> <blockquote> <code>(a,b) := (b,a);</code></blockquote> <p>В кортежном присваивании справа допускается количество элементов большее, чем количество переменных слева:</p> <blockquote> <code>(a,b) := (1,2,3);</code></blockquote> <p>Кортежное присваивание можно совмещать с описанием переменных:</p> <blockquote> <code>(<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> <h2>Использование кортежей в функциях</h2> <p>Кортежи позволяют упаковывать несколько значений в одно. Это оказывается удобным если надо передавать несколько взаимосвязанных значений в качестве параметра или возвращать из функции несколько значений.</p> <p>Например, функция, вычисляющая площадь и периметр прямоугольника, может быть записана в виде:</p> <blockquote> <code><strong>function</strong> SP(a,b: real) := (a*b,2*(a+b)); </code> </blockquote> <p>Чтобы воспользоваться результатом такой функции, удобно использовать распаковку кортежа в переменные с описанием:</p> <blockquote> <code><strong>var</strong> (S,P) := SP(2,3); </code> </blockquote> <p> </p> </body> </html>