* Bug 15380 fixed: argn() page was unclear & uncomplete
[scilab.git] / scilab / modules / functions / help / ru_RU / argn.xml
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3  * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
4  * Copyright (C) ????-2008 - INRIA
5  * Copyright (C) 2018 - Samuel GOUGEON
6  *
7  * Copyright (C) 2012 - 2016 - Scilab Enterprises
8  *
9  * This file is hereby licensed under the terms of the GNU GPL v2.0,
10  * pursuant to article 5.3.4 of the CeCILL v.2.1.
11  * This file was originally licensed under the terms of the CeCILL v2.1,
12  * and continues to be available under such terms.
13  * For more information, see the COPYING file which you should have received
14  * along with this program.
15  *
16  -->
17 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink"
18         xmlns:svg="http://www.w3.org/2000/svg" xmlns:mml="http://www.w3.org/1998/Math/MathML"
19         xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org"
20         xml:lang="ru" xml:id="argn">
21     <refnamediv>
22         <refname>argn</refname>
23         <refpurpose>Возвращает количество входных/выходных аргументов в вызове функции</refpurpose>
24     </refnamediv>
25     <refsynopsisdiv>
26         <title>Синтаксис</title>
27         <synopsis>
28            [lhs, rhs] = argn()
29             lhs = argn(1)
30             rhs = argn(2)
31         </synopsis>
32     </refsynopsisdiv>
33     <refsection role="arguments">
34         <title>Аргументы</title>
35         <variablelist>
36             <varlistentry>
37                 <term>lhs</term>
38                 <listitem>
39                 <para>
40                   Количество ожидаемых выходных аргументов с левой стороны. Устанавливается в 1, когда
41                   выходных аргументов не ожидается.
42                 </para>
43                 </listitem>
44             </varlistentry>
45             <varlistentry>
46                 <term>rhs</term>
47                 <listitem>
48                 <para>
49                   Количество входных аргументов с правой стороны, указываемых при вызове функции.
50                 </para>
51                 </listitem>
52             </varlistentry>
53         </variablelist>
54     </refsection>
55     <refsection>
56         <title>Описание</title>
57         <para>
58             Эта функция используется внутри определения функции. Она даёт количество фактических входных
59             аргументов (<literal>rhs</literal>) и выходных аргументов (<literal>lhs</literal>),
60             переданных в функцию при её вызове. Она обычно используется в определениях функции для работы
61             с необязательными аргументами.
62         </para>
63         <warning>
64             Нет способа обнаружить вызвана ли Scilab-функция без ожидаемых выходных аргументов. В этом случае
65             <varname>lhs</varname> возвращает 1.
66         </warning>
67         <warning>
68             Проверка существования именного входного аргумента с помощью <literal>isdef(..,"l")</literal>
69             более надёжна, чем с помощью <literal>argn()</literal>. Пожалуйста, смотрите примеры.
70         </warning>
71     </refsection>
72     <refsection>
73         <title>Примеры</title>
74         <para>Простые примеры:</para>
75         <programlisting role="example"><![CDATA[
76 function [res, res2] = test(a, b)
77   [lhs, rhs] = argn()
78   [res, res2] = ("abc", %pi);
79   disp([lhs rhs])  // <<<<<<<<<<<
80 endfunction
81
82 test();
83 test(4.321);
84 test(3, -1);
85 test(3, -1, a=0);
86 test(3, -1, c=8);
87
88 out1 = test();
89 [o1, o2] = test(%pi);
90  ]]></programlisting>
91     <screen><![CDATA[
92 --> test();
93    1.   0.
94
95 --> test(4.321);
96    1.   1.
97
98 --> test(3, -1);
99    1.   2.
100
101 --> test(3, -1, a=0);
102 Неверное число аргументов.
103
104 --> test(3, -1, c=8);
105 Неверное число аргументов.
106
107 --> out1 = test();
108    1.   0.
109
110 --> [o1, o2] = test(%pi);
111    2.   1.
112 ]]></screen>
113     <para/>
114     <para>С использованием varargin и varargout:</para>
115         <programlisting role="example"><![CDATA[
116 function [res, varargout] = test(a, varargin)
117   res = "abc";
118   varargout = list(%i);
119   [lhs, rhs] = argn()
120   disp([lhs rhs])  // <<<<<<<<<<<
121 endfunction
122
123 test();
124 test(4.321);
125 test(3, -1);
126 test(3, -1, a=0);
127 test(3, -1, 8);
128
129 out1 = test();
130 [o1, o2] = test(%pi);
131 [o1, o2, o3] = test(%pi);
132  ]]></programlisting>
133     <screen><![CDATA[
134 --> test();
135    1.   0.
136
137 --> test(4.321);
138    1.   1.
139
140 --> test(3, -1);
141    1.   2.
142
143 --> test(3, -1, a=0);
144    1.   3.
145
146 --> test(3, -1, 8);
147    1.   3.
148
149 --> out1 = test();
150    1.   0.
151
152 --> [o1, o2] = test(%pi);
153    2.   1.
154
155 --> [o1, o2, o3] = test(%pi);
156    3.   1.
157 ]]></screen>
158     <para/>
159     <para>Надёжная проверка существования входных аргументов:</para>
160         <programlisting role="example"><![CDATA[
161 function res = test(a, b, varargin)
162     res = ""
163     if isdef("a","l")
164         res = "a передана."
165     end
166     if isdef("b","l")
167         res = res + " b передана."
168     end
169     if isdef("c","l")
170         res = res + " c передана."
171     end
172 endfunction
173 clc
174 test()
175 test(4.321)
176 test(4.321, %z)
177 test(b=3)
178 test(c=3)
179 test(-1, c=3)
180 test(-1, a=2, c=3)
181 test(b=-1, a=2, c=3)
182  ]]></programlisting>
183     <screen><![CDATA[
184 --> test()
185  ans  =
186
187 --> test(4.321)
188  ans  =
189  a передана.
190
191 --> test(4.321, %z)
192  ans  =
193  a передана. b передана.
194
195 --> test(b=3)
196  ans  =
197   b передана.
198
199 --> test(c=3)
200  ans  =
201   c передана.
202
203 --> test(-1, c=3)
204  ans  =
205  a передана. c передана.
206
207 --> test(-1, a=2, c=3) // входные аргументы в varargin являются/становятся всегда безымянными
208  ans  =
209  a передана.
210
211 --> test(b=-1, a=2, c=3)
212  ans  =
213  a передана. b передана.
214 ]]></screen>
215     <para/>
216     <para>Другое использование:</para>
217         <programlisting role="example"><![CDATA[
218 function concat = myOwnFunction(name,optional)
219   [lhs,rhs] = argn()
220   if rhs <= 1 then
221      optional="моё Необязательное значение"
222   end
223   if rhs == 0 then
224      error("Ожидался по меньшей мере один аргумент")
225   end
226   concat = name+" "+optional
227 endfunction
228  ]]></programlisting>
229     </refsection>
230     <refsection role="see also">
231         <title>Смотрите также</title>
232         <simplelist type="inline">
233             <member>
234                 <link linkend="isdef">isdef</link>
235             </member>
236             <member>
237                 <link linkend="varargin">varargin</link>
238             </member>
239             <member>
240                 <link linkend="varargout">varargout</link>
241             </member>
242             <member>
243                 <link linkend="macrovar">macrovar</link>
244             </member>
245             <member>
246                 <link linkend="function">function</link>
247             </member>
248         </simplelist>
249     </refsection>
250 </refentry>