Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update goto.xml #958

Merged
merged 9 commits into from
Mar 12, 2024
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 36 additions & 23 deletions language/control-structures/goto.xml
Original file line number Diff line number Diff line change
@@ -1,41 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: e55a1ca9507ab7c6493cca34110fd17656308e51 Maintainer: mch Status: ready -->
<!-- EN-Revision: 890a03076b2708f65ff15fec9968ad6580131b36 Maintainer: mch Status: ready -->
<!-- Reviewed: no -->
<sect1 xml:id="control-structures.goto" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<title>goto</title>
<?phpdoc print-version-for="goto"?>
<para>
<mediaobject>
<alt>Что наихудшее может случиться, если используется goto?</alt>
<alt>Что наихудшее случится, если пользоваться оператором goto?</alt>
<imageobject>
<imagedata fileref="en/language/figures/xkcd-goto.png" format="PNG"/>
</imageobject>
<caption>
<para>
Изображение любезно предоставил сайт веб-комиксов <link xlink:href="&url.xkcd;292">xkcd</link>
</para>
</caption>
</mediaobject>
Изображение предоставлено <link xlink:href="&url.xkcd;292">xkcd</link>
</para>
<para>
Оператор <literal>goto</literal> используется для перехода в
другую часть программы. Место, куда необходимо перейти указывается с помощью <emphasis>чувствительный к регистру</emphasis> метки,
за которой ставится двоеточие, после оператора <literal>goto</literal>
указывается желаемая метка для перехода. Оператор не
является неограниченным "<literal>goto</literal>". Целевая
метка должна находиться в том же файле, в том же контексте. Имеется в виду, что вы не можете ни перейти за
границы функции или метода, ни перейти внутрь одной из них. Вы также не можете
перейти внутрь любой циклической структуры или оператора switch. Но вы можете выйти
из них, и обычным применением оператора <literal>goto</literal> является
использование его вместо многоуровневых <literal>break</literal>.
Оператором <literal>goto</literal> пользуются для перехода к другой
части программы. Место для перехода обозначают
<emphasis>чувствительной к регистру</emphasis> меткой, за которой
ставят двоеточие, а инструкцию задают словом <literal>goto</literal>,
за которым идёт целевая метка. У перехода <literal>goto</literal> есть
ряд ограничений. Целевая метка будет работать, только если метку указали
в том же файле и контексте. То есть нельзя ни выйти из функции или метода,
ни перейти в них. Нельзя также перейти внутрь цикла или структуры switch,
но выйти получится. Оператор <literal>goto</literal>, например,
указывают вместо управляющей конструкци <literal>break</literal> с указателем
уровня прерывания.
</para>
<para>
<example>
<title>Пример использования <literal>goto</literal></title>
<title>Пример использования оператора <literal>goto</literal></title>
<programlisting role="php">
<![CDATA[
<?php

goto a;
echo 'Foo';

a:
echo 'Bar';

?>
]]>
</programlisting>
Expand All @@ -49,18 +56,22 @@ Bar
</para>
<para>
<example>
<title>Пример использования <literal>goto</literal> в цикле</title>
<title>Пример использования оператора <literal>goto</literal> в цикле</title>
<programlisting role="php">
<![CDATA[
<?php
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
if($j==17) goto end;
}

for ($i = 0, $j = 50; $i < 100; $i++) {
while ($j--) {
if ($j == 17) {
goto end;
}
}
}
echo "i = $i";
end:
echo 'j hit 17';

?>
]]>
</programlisting>
Expand All @@ -78,13 +89,15 @@ j hit 17
<programlisting role="php">
<![CDATA[
<?php

goto loop;
for($i=0,$j=50; $i<100; $i++) {
while($j--) {
loop:
}
for ($i = 0, $j = 50; $i < 100; $i++) {
while ($j--) {
loop:
}
}
echo "$i = $i";

?>
]]>
</programlisting>
Expand Down
Loading