Merge remote-tracking branch 'origin/6.1'
[scilab.git] / scilab / modules / core / help / ru_RU / 2_control_flow / try.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  *
6  * Copyright (C) 2012 - 2016 - Scilab Enterprises
7  *
8  * This file is hereby licensed under the terms of the GNU GPL v2.0,
9  * pursuant to article 5.3.4 of the CeCILL v.2.1.
10  * This file was originally licensed under the terms of the CeCILL v2.1,
11  * and continues to be available under such terms.
12  * For more information, see the COPYING file which you should have received
13  * along with this program.
14  *
15  -->
16 <refentry xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:svg="http://www.w3.org/2000/svg" xmlns:ns5="http://www.w3.org/1999/xhtml" xmlns:mml="http://www.w3.org/1998/Math/MathML" xmlns:db="http://docbook.org/ns/docbook" xmlns:scilab="http://www.scilab.org" xml:id="try" xml:lang="ru">
17     <refnamediv>
18         <refname>try</refname>
19         <refpurpose>начало блока try в управляющей структуре try-catch
20         </refpurpose>
21     </refnamediv>
22     <refnamediv xml:id="catch">
23         <refname>catch</refname>
24         <refpurpose>
25             начало блока catch в управляющей структуре try-catch
26         </refpurpose>
27     </refnamediv>
28     <refsynopsisdiv>
29         <title>Синтаксис</title>
30         <synopsis>
31             try
32                 statements
33             catch
34                 statements
35             end
36         </synopsis>
37     </refsynopsisdiv>
38     <refsection>
39         <title>Описание</title>
40         <para>
41             Управляющая структура <literal>try</literal>-<literal>catch</literal> может быть использована для управления кодом программы, который может формировать ошибки.
42         </para>
43         <para>
44             Когда исполняется управляющая структура <literal>try</literal>-<literal>catch</literal>, то
45             обычно исполняются только инструкции между ключевыми словами <literal>try</literal> и
46             <literal>catch</literal>. Однако, если возникает ошибка во время выполнения любой из этих
47             инструкций, то ошибка записывается, оставшиеся инструкции вплоть до ключевого слова
48             <literal>catch</literal> пропускаются, и исполняются инструкции между ключевыми словами
49             <literal>catch</literal> и <literal>end</literal>, используя  режим обработки ошибок по
50             умолчанию.
51         </para>
52         <para>
53             Записанная ошибка может быть извлечена с помощью функции
54             <link linkend="lasterror">lasterror</link>.
55         </para>
56         <para>
57             Инструкции блока <literal>catch</literal>, как и само ключевое слово <literal>catch</literal>,
58             могут быть опущены, если нет альтернативных инструкций.
59         </para>
60         <para>
61             Заметьте, что можно также использовать функцию <link linkend="execstr">execstr</link>
62             с аргументом <literal>'errcatch'</literal> для обработки ошибок. Это может быть особенно полезным для обработки синтаксических ошибок.
63         </para>
64         <para>
65             Заметьте также, что управляющая структура <literal>try-catch</literal> в некотором роде похожа на:
66         </para>
67         <programlisting><![CDATA[
68 if execstr("<try instructions>","errcatch")<>0 then
69   <catch instructions>
70 end
71  ]]></programlisting>
72         <para>
73             Она использует тот же внутренний механизм, что и.
74             Именно по этой причине или
75             <emphasis>execstr(...,"errcatch")</emphasis> не могут быть включены в управляющую структуру
76             <literal>try</literal>-<literal>catch</literal>. Этот контекст обнаруживается и формируется
77             особое сообщение об ошибке (эта ошибка отлавливается и хранится как и любая другая ошибка, если на неё поставлена ловушка в блоке <literal>try</literal>).
78         </para>
79         <para>
80             Тем не менее управляющие структуры <literal>try</literal>-<literal>catch</literal> могут быть вложены друг в друга (см. пример 2 ниже).
81         </para>
82     </refsection>
83     <refsection>
84         <title>Примеры</title>
85         <programlisting role="example"><![CDATA[
86 // Пример 1
87 file_path=TMPDIR+'/wrong'
88 try
89   u=mopen(file_path,'r')
90   x=mget(10,'c',u)
91 catch
92   disp(['файл '+file_path+ ' нельзя прочитать используя значения по умолчанию для x'])
93   x=1:10
94 end
95  [error_message,error_number]=lasterror(%t)
96  ]]></programlisting>
97         <programlisting role="example"><![CDATA[
98
99 // Пример 2 (вложенные структуры try/catch)
100 function nestedtry(a,b)
101 disp("СТАРТ")
102 mprintf("\ta имеет значение: %s\t\tb имеет значение: %s\n",string(a),string(b))
103 try
104   disp("try 1")
105   try
106     disp("try 2")
107     z=a+1;  // ошибка, если значение строковое
108   catch
109     disp("catch 2")
110     t=b+1;  // ошибка, если значение строковое
111   end
112   disp("после try 2")
113 catch
114   disp("catch 1")
115 end
116 disp("после try 1 - КОНЕЦ")
117 endfunction
118 nestedtry(1,1)
119 nestedtry("строка",1)
120 nestedtry(1,"строка")
121 nestedtry("строка","строка")
122  ]]></programlisting>
123     </refsection>
124     <refsection role="see also">
125         <title>Смотрите также</title>
126         <simplelist type="inline">
127             <member>
128                 <link linkend="error">error</link>
129             </member>
130             <member>
131                 <link linkend="execstr">execstr</link>
132             </member>
133             <member>
134                 <link linkend="if">if</link>
135             </member>
136             <member>
137                 <link linkend="lasterror">lasterror</link>
138             </member>
139         </simplelist>
140     </refsection>
141     <refsection role="history">
142         <title>История</title>
143         <revhistory>
144             <revision>
145                 <revnumber>6.0.0</revnumber>
146                 <revdescription>
147                   <literal>try</literal> and <literal>catch</literal> are now protected:
148                   Assignments like <literal>try=1</literal> or <literal>catch=2</literal> are no
149                   longer possible.
150                 </revdescription>
151             </revision>
152         </revhistory>
153     </refsection>
154 </refentry>