<!--Dear translator: please NEVER translate the id or anything inside the tags as they are needed in english by the application
     Thanks a lot in advance.-->
<chapter id="reference">
<title
>Довідка з програмування на &turtlelang;</title>
<para
>Це довідкова інформація щодо мови &kturtle;, &turtlelang;. У цьому розділі спочатку буде коротенько обговорено всі <link linkend="different-instructions"
>типи інструкцій</link
>. Потім буде одна за одною пояснено значення <link linkend="commands"
>команд</link
>. Далі, ви зможете ознайомитися з <link linkend="containers"
>контейнерами</link
>, <link linkend="math"
>математичними символами</link
>, <link linkend="questions"
>питаннями</link
> і <link linkend="controlling-execution"
>регуляторами виконання</link
>. Наприкінці буде показано як створювати власні команди за допомогою команди <link linkend="learn"
>learn</link
>.</para>

<sect1 id="different-instructions">
<title
>Типи інструкцій</title>
<para
>Як і у будь-якій мові програмування, у &turtlelang; існують різні типи слів і символів. Тут коротко пояснено різницю між цими типами.</para>

<sect2 id="command">
<title
>Команди</title>
<para
>За допомогою команд ви наказуєте черепашці або програмі &kturtle; виконати якусь дію. Деяким з команд потрібні вхідні дані, деякі — самі виводять дані. <screen
># forward — команда, які потрібні вхідні дані, у нашому випадку — число 100:
forward 100
</screen>
</para>
<para
>Щоб прочитати детальний огляд всіх команд, які підтримує &kturtle;, перейдіть за цим <link linkend="commands"
>посиланням</link
>.</para>
</sect2>

<sect2 id="number">
<title
>Числа</title>
<para
>Скоріше за все, ви вже знаєте дещо про числа. Спосіб, у який числа використовуються у &kturtle;, не дуже відрізняється від розмовної мови або математики. </para>
<para
>Існують так звані натуральні числа: <userinput
>0</userinput
>, <userinput
>1</userinput
>, <userinput
>2</userinput
>, <userinput
>3</userinput
>, <userinput
>4</userinput
>, <userinput
>5</userinput
> тощо. Від’ємні числа: <userinput
>-1</userinput
>, <userinput
>-2</userinput
>, <userinput
>-3</userinput
> тощо. Крім того, існують десяткові дроби або числа з крапкою: <userinput
>0.1</userinput
>, <userinput
>3.14</userinput
>, <userinput
>33.3333</userinput
>, <userinput
>-5.05</userinput
>, <userinput
>-1.0</userinput
>. </para>
<para
>Числа можна використовувати у <link linkend="math"
>математичних розрахунках</link
> і <link linkend="questions"
>питаннях</link
>. Їх також можна покласти у <link linkend="containers"
>контейнери</link
>.</para>
<para
>Числа <glossterm
>підсвічуються</glossterm
> темно-червоним кольором у <link linkend="the-code-editor"
>редакторі коду</link
>.</para>
</sect2>

<!-- constants like pi? -->

<sect2 id="string">
<title
>Рядки</title>
<para
>Спочатку наведемо приклад: <screen>
print "Привіт, я — рядок."
</screen
> У цьому прикладі <userinput
>print</userinput
> — команда, а <userinput
>"Привіт, я — рядок."</userinput
> — рядок. Рядки починаються і закінчуються позначкою лапок, <userinput
>"</userinput
>, за цими позначками і розпізнає рядки програма &kturtle;.</para>
<para
>Рядки можна вкладати у <link linkend="containers"
>контейнери</link
>. Їх не можна використовувати у <link linkend="math"
>математичних обчисленнях</link
> і <link linkend="questions"
>питаннях</link
>.</para>
<para
>Рядки <glossterm
>підсвічуються</glossterm
> червоним кольором у <link linkend="the-code-editor"
>редакторі коду</link
>.</para>
</sect2>


<sect2 id="name">
<title
>Назви</title>
<para
>За допомогою мови програмування &turtlelang; ви можете створювати нові об’єкти. Під час написання програми вам часто будуть потрібні <link linkend="containers"
>контейнери</link
>, а у деяких випадках вам може знадобитися <link linkend="learn"
>навчити</link
> черепашку нової команди. Коли ви створюватимете нову команду за допомогою команди <link linkend="learn"
>learn</link
>, вам слід буде вказати назву нової команди.</para>
<para
>Ви можете обрати будь-яку назву, але не ту, яка вже має для черепашки якесь значення. Наприклад, вам не можна називати функцію <link linkend="forward"
>forward</link
>, оскільки цю назву вже використано для внутрішньої команди. <screen>
# у цьому прикладі назву forward використано для 
# нової команди, але команда з такою назвою вже 
# існує, отже виконання програми призведе до помилки:
learn forward {
  print "це не правильно"
}

# а така частина програми працюватиме:
learn myforward {
  print "а так можна"
}
</screen
> У назвам мають міститися лише літери, числа і знаки підкреслення (_). Крім того, вони мають починатися з літери. Назви контейнерів повинні починатися з префікса контейнера ($). <screen
># у цьому прикладі назву forward використано як контейнер, 
# що починається з префікса $ prefix, отже, така назва
# не буде конфліктувати з командою forward
$forward = 20
print $forward
</screen>
</para>
<para
>Контейнери <glossterm
>підсвічуються</glossterm
> у <link linkend="the-code-editor"
>редакторі коду</link
> у вигляді жирного тексту пурпурового кольору.</para>
<para
>Щоб отримати докладніше пояснення і більше прикладів, будь ласка, прочитайте документацію, що стосується <link linkend="containers"
>контейнерів</link
> і команди <link linkend="learn"
>learn</link
>. </para>
</sect2>

<sect2 id="assignment">
<title
>Присвоювання</title>
<para
>Присвоювання значення відбувається за допомогою символу <userinput
>=</userinput
>. У мовах програмування краще читати одинарний символ <userinput
>=</userinput
> не як «дорівнює», а як «приймає значення». Слово «дорівнює» краще пасує до символів <userinput
>==</userinput
>, які відповідають за <link linkend="questions"
>питання</link
>.</para>
<para
>Присвоювання, загалом кажучи, використовують для двох цілей: (1) вкласти вміст у <link linkend="containers"
>контейнер</link
>, і (2) змінити вміст контейнера. Наприклад: <screen
>$x = 10
# контейнер x тепер містить число 10
$W = "Мені "
# тепер у контейнері W міститься рядок "Мені "
# наступна команда надрукує вміст контейнерів «W» і «x» на полотні
print $W + $x
</screen>
</para>
<para
>Якщо ви бажаєте поглянути на додаткові приклади, зверніться до розділу, у якому пояснюються дії, пов’язані з <link linkend="containers"
>контейнерами</link
>.</para>
</sect2>

<sect2 id="math-symbols">
<title
>Математичні символи</title>
<para
>&kturtle; підтримує всі базові математичні символи: додавання (<userinput
>+</userinput
>), віднімання (<userinput
>-</userinput
>), множення (<userinput
>*</userinput
>), ділення (<userinput
>/</userinput
>) і дужки <userinput
>(</userinput
> та <userinput
>)</userinput
>.</para>
<para
>Докладне пояснення і додаткові приклади ви можете знайти у розділі, присвяченому <link linkend="math"
>математиці</link
>.</para>
</sect2>

<sect2 id="question">
<title
>Питання</title>
<para
>Під час програмування можна задавати черепашці прості питання, у відповідь на які вона може повідомити правдиве деяке твердження чи ні.</para>
<para
>Дуже докладне пояснення щодо використання питань ви можете знайти у розділі, присвяченому <link linkend="questions"
>питанням</link
>.</para>
</sect2>

<sect2 id="questions-glue">
<title
>Слова-клей питань</title>
<para
>Питання можна об’єднувати за допомогою так званих «слів-клею». Слова-клей — це <userinput
>and</userinput
>, <userinput
>or</userinput
> і особливе слово-клей — <userinput
>not</userinput
>.</para>
<para
>Особливості використання слів-клею пояснено у розділі щодо <link linkend="question-glue"
>слів-клею</link
>.</para>
</sect2>


<sect2 id="comment">
<title
>Коментарі</title>
<para
>Коментарі — це рядки, які починаються з символу <userinput
>#</userinput
>. Приклад: <screen>
# це коментар!
print "а це вже не коментар"
# попередній рядок не є коментарем, але наступний — також коментар:
# print "а це вже не коментар"
</screen
> Коментарі можна додавати до коду для власної зручності, або щоб їх могли прочитати інші люди. Коментарі використовують для: (1) додавання невеликих описів програми, (2) пояснення способу у який працює шматок коду, якщо цей спосіб не є очевидним, і (3) для «коментування» рядків коду, які слід (тимчасово) ігнорувати (погляньте на останній рядок попереднього прикладу).</para>
<para
>Закоментовані рядки <glossterm
>підсвічуються</glossterm
> світло-сірим кольором у <link linkend="the-code-editor"
>редакторі коду</link
>.</para>
</sect2>

</sect1>


<sect1 id="commands">
<title
>Команди</title>
<para
>За допомогою команд ви наказуєте черепашці або програмі &kturtle; виконати якусь дію. Деяким з команд потрібні вхідні дані, деякі — самі виводять дані. У цьому розділі буде пояснено всі команди, які можна використовувати у &kturtle;. Будь ласка, зауважте, що всі вбудовані команди, які буде обговорено, <glossterm
>підсвічуються</glossterm
> синім кольором у <link linkend="the-code-editor"
>редакторі коду</link
>, ця можливість допоможе вам відрізнити їх від іншого тексту програми.</para>

<sect2 id="moving-the-turtle">
<title
>Пересування черепашки</title>
<para
>Існує декілька команд для пересування черепашки екраном.</para>

  <variablelist>
    <anchor id="forward"/>
    <varlistentry
> 
      <term
>forward (fw)<indexterm
><primary
>forward (fw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>forward X</screen>
<userinput
>forward</userinput
> наказує черепашці просунутися вперед на X пікселів. Якщо перо опущено, черепашка залишатиме по собі слід у вигляді лінії. Команду <userinput
>forward</userinput
> можна скоротити до <userinput
>fw</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="backward"/>
    <varlistentry
>  
      <term
>backward (bw)<indexterm
><primary
>backward (bw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>backward X</screen>
Команда <userinput
>backward</userinput
> наказує черепашці просунутися назад на X пікселів. Якщо перо опущено, черепашка залишатиме по собі слід у вигляді лінії. Команду <userinput
>backward</userinput
> можна скоротити до <userinput
>bw</userinput
></para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnleft"/>
    <varlistentry
> 
      <term
>turnleft (tl)<indexterm
><primary
>turnleft (tl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>turnleft X</screen>
Команда <userinput
>turnleft</userinput
> наказує черепашці повернутися на X градусів ліворуч. Команду <userinput
>turnleft</userinput
> можна скоротити до <userinput
>tl</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="turnright"/>
    <varlistentry
> 
      <term
>turnright (tr)<indexterm
><primary
>turnright (tr)</primary
></indexterm
></term>
      <listitem
><para
><screen
>turnright X</screen>
Команда <userinput
>turnright</userinput
> наказує черепашці повернутися на X градусів праворуч. Команду <userinput
>turnright</userinput
> можна скоротити до <userinput
>tr</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="direction"/>
    <varlistentry
> 
      <term
>direction (dir)<indexterm
><primary
>direction (dir)</primary
></indexterm
></term>
      <listitem
><para
><screen
>direction X</screen>
Команда <userinput
>direction</userinput
> спрямовує черепашку у напрямку X градусів, відрахованих від нульового напрямку, безвідносно від попереднього напрямку, куди її було спрямовано. Команду <userinput
>direction</userinput
> можна скоротити до <userinput
>dir</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="center"/>
    <varlistentry
> 
      <term
>center<indexterm
><primary
>center</primary
></indexterm
></term>
      <listitem
><para
><screen
>center</screen>
Команда <userinput
>center</userinput
> пересуває черепашку у центр полотна.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="go"/>
    <varlistentry
> 
      <term
>go<indexterm
><primary
>go</primary
></indexterm
></term>
      <listitem
><para
><screen
>go X,Y</screen>
Команда <userinput
>go</userinput
> наказує черепашці перейти до вказаного місця на полотні. Це місце знаходиться у X <glossterm linkend="pixels"
>пікселях</glossterm
> від лівого краю полотна, і у Y <glossterm linkend="pixels"
>пікселях</glossterm
> від верхнього краю полотна. </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gox"/>
    <varlistentry
> 
      <term
>gox<indexterm
><primary
>gox</primary
></indexterm
></term>
      <listitem
><para
><screen
>gox X</screen>
Команда <userinput
>gox</userinput
> наказує черепашці перейти до точки, розміщеної за X <glossterm linkend="pixels"
>пікселів</glossterm
> від лівого краю полотна, залишаючись на тій самій висоті.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="goy"/>
    <varlistentry
> 
      <term
>goy<indexterm
><primary
>goy</primary
></indexterm
></term>
      <listitem
><para
><screen
>goy Y</screen>
Команда <userinput
>goy</userinput
> наказує черепашці перейти до точки, розміщеної за Y <glossterm linkend="pixels"
>пікселів</glossterm
> від верхнього краю полотна, залишаючись на тій же відстані від його лівого краю.</para
></listitem>
    </varlistentry>
  </variablelist>
  <note
><para
>Під час виконання команд <userinput
>go</userinput
>, <userinput
>gox</userinput
>, <userinput
>goy</userinput
> і <userinput
>center</userinput
> черепашка не малюватиме лінії, незалежно від того чи піднято, чи опущено перо.</para>
  </note>
</sect2>

<sect2 id="locate-the-turtle">
<title
>Де знаходиться черепашка?</title>
<para
>Існує дві команди, які повертають позицію черепашки на екрані.</para>

  <variablelist>
    <anchor id="getx"/>
    <varlistentry
> 
      <term
>getx<indexterm
><primary
>getx</primary
></indexterm
></term>
      <listitem
><para
><userinput
>getx</userinput
> повертає кількість пікселів від лівого краю полотна до поточної позиції черепашки.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="gety"/>
    <varlistentry
> 
      <term
>gety<indexterm
><primary
>gety</primary
></indexterm
></term>
      <listitem
><para
><userinput
>gety</userinput
> повертає кількість пікселів від верхнього краю полотна до поточної позиції черепашки.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="pen">
<title
>У черепашки є перо</title>
<para
>У черепашки є перо, яке малює лінію під час руху черепашки. Існує декілька команд, які керують цим пером. У цьому розділі пояснено зміст цих команд.</para>
  <variablelist>
    <anchor id="penup"/>
    <varlistentry
> 
      <term
>penup (pu)<indexterm
><primary
>penup (pu)</primary
></indexterm
></term>
      <listitem
><para
><screen
>penup</screen>
Команда <userinput
>penup</userinput
> піднімає перо над полотном. Якщо перо <quote
>піднято</quote
> під час руху черепашки лінії не малюватиметься. Прочитайте також інформацію щодо команди <userinput
>pendown</userinput
>. Команду <userinput
>penup</userinput
> можна скоротити до <userinput
>pu</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="pendown"/>
    <varlistentry
> 
      <term
>pendown (pd)<indexterm
><primary
>pendown (pd)</primary
></indexterm
></term>
      <listitem
><para
><screen
>pendown</screen>
Команда <userinput
>pendown</userinput
> опускає перо на полотно. Якщо перо <quote
>опущено</quote
> на полотно, під час рухів, черепашка лишатиме по собі слід. Прочитайте також інформацію щодо команди <userinput
>penup</userinput
>. Команду <userinput
>pendown</userinput
> можна скоротити до <userinput
>pd</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setpenwidth"/>
    <varlistentry
> 
      <term
>penwidth (pw)<indexterm
><primary
>penwidth (pw)</primary
></indexterm
></term>
      <listitem
><para
><screen
>penwidth X</screen>
Команда <userinput
>penwidth</userinput
> встановлює товщину лінії, яку лишає перо, у значення X <glossterm linkend="pixels"
>пікселів</glossterm
>. Команду <userinput
>penwidth</userinput
> можна скоротити до <userinput
>pw</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setfgcolor"/>
    <varlistentry
> 
      <term
>pencolor (pc)<indexterm
><primary
>pencolor (pc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>pencolor R,G,B</screen>
Команда <userinput
>pencolor</userinput
> встановлює колір лінії, яку лишає по собі перо. Команда <userinput
>pencolor</userinput
> отримує дані для кольору у вигляді <glossterm linkend="rgb"
>RGB-комбінації</glossterm
>. Команду <userinput
>pencolor</userinput
> можна скоротити до <userinput
>pc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="canvas">
<title
>Команди керування полотном</title>
<para
>Існує декілька команд, які надають можливість керувати полотном.</para>
  <variablelist>
    <anchor id="resizecanvas"/>
    <varlistentry>
      <term
>canvassize (cs)<indexterm
><primary
>canvassize (cs)</primary
></indexterm
></term>
      <listitem
><para
><screen
>canvassize X,Y</screen>
За допомогою команди <userinput
>canvassize</userinput
> ви можете встановити розмір полотна. Ця команда отримує вхідні значення X і Y, де X — нова ширина полотна у <glossterm linkend="pixels"
>пікселях</glossterm
>, а Y — нова висота полотна у <glossterm linkend="pixels"
>пікселях</glossterm
>. Команду <userinput
>canvassize</userinput
> можна скоротити до <userinput
>cs</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="setbgcolor"/>
    <varlistentry
> 
      <term
>canvascolor (cc)<indexterm
><primary
>canvascolor (cc)</primary
></indexterm
></term>
      <listitem
><para
><screen
>canvascolor R,G,B</screen>
Команда <userinput
>canvascolor</userinput
> встановлює колір тла полотна. Команда <userinput
>canvascolor</userinput
> отримує вхідні дані у вигляді <glossterm linkend="rgb"
>RGB-комбінації</glossterm
>. Команду <userinput
>canvascolor</userinput
> можна скоротити до <userinput
>cc</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
<!-- <sect3 id="wrapon">
  <title
>wrapon</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapon</term>
      <listitem
><para
><screen
>wrapon</screen>
      With the <userinput
>wrapon</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>on</quote
> for the canvas. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3>
<sect3 id="wrapoff">
  <title
>wrapoff</title>
  <variablelist>
    <varlistentry
> 
      <term
>wrapoff</term>
      <listitem
><para
><screen
>wrapoff</screen>
      With the <userinput
>wrapoff</userinput
> command you can set <glossterm linkend="wrapping"
>wrapping</glossterm
> <quote
>off</quote
> for the canvas: this means the turtle can move off the canvas and can get <quote
>lost</quote
>. Please see the glossary if you want to know what <glossterm linkend="wrapping"
>wrapping</glossterm
> is.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect3
>  -->
</sect2>

<sect2 id="clean">
<title
>Команди для очищення</title>
<para
>Існує дві команди для очищення полотна, у разі якщо ви зробили помилку.</para>
  <variablelist>
    <anchor id="clear"/>
    <varlistentry
> 
      <term
>clear (ccl)<indexterm
><primary
>clear (ccl)</primary
></indexterm
></term>
      <listitem
><para
><screen
>clear</screen>
За допомогою команди <userinput
>clear</userinput
> ви можете витерти всі малюнки з полотна. При цьому всі інші параметри, позиція і напрямок черепашки, колір тла полотна, видимість черепашки і розмір полотна, залишаться незмінними:</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="reset"/>
    <varlistentry
> 
      <term
>reset<indexterm
><primary
>reset</primary
></indexterm
></term>
      <listitem
><para
><screen
>reset</screen>
Команда <userinput
>reset</userinput
> очищує все набагато ґрунтовніше за команду <userinput
>clear</userinput
>. Після виконання команди <userinput
>reset</userinput
> все виглядатиме так, неначе ви тільки-но запустили &kturtle;. Черепашку буде розташовано по центру екрана, колір тла стане білим, черепашка малюватиме чорну лінію на полотні, а саме полотно матиме розмір 400 на 400 пікселів.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="sprites">
<title
>Черепашка — це спрайт</title>
<para
>Спочатку, коротеньке пояснення того, що таке спрайти: спрайти — це маленькі зображення, які можна пересувати екраном, які ми часто бачимо у комп’ютерних іграх. Наша черепашка — також спрайт. Докладнішу інформацію ви зможете отримати з розділу глосарія, присвяченого <glossterm linkend="sprites"
>спрайтам</glossterm
>. </para>
<para
>Далі, ви зможете ознайомитися з повним списком всіх команд для роботи зі спрайтами.</para>
<para
>[Поточна версія &kturtle; ще не підтримує використання спрайтів, які відмінні від черепашки. У майбутніх версіях ви зможете змінити черепашку на щось інше, що вам сподобається]</para>
  <variablelist>
    <anchor id="spriteshow"/>
    <varlistentry
> 
      <term
>spriteshow (ss)<indexterm
><primary
>spriteshow (ss)</primary
></indexterm
></term>
      <listitem
><para
><screen
>spriteshow</screen>
Команда <userinput
>spriteshow</userinput
> робить черепашку знову видимою після того, як її було сховано. Команду <userinput
>spriteshow</userinput
> можна скоротити до <userinput
>ss</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="spritehide"/>
    <varlistentry
> 
      <term
>spritehide (sh)<indexterm
><primary
>spritehide (sh)</primary
></indexterm
></term>
      <listitem
><para
><screen
>spritehide</screen>
Команда <userinput
>spritehide</userinput
> ховає черепашку. Цією командою можна скористатися, якщо черепашка не вписується у ваш малюнок. Команду <userinput
>spritehide</userinput
> можна скоротити до <userinput
>sh</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="writing">
<title
>Чи може черепашка писати?</title>
<para
>Відповідь: <quote
>так</quote
>. Черепашка може писати: вона напише для вас все, що ви їй накажете написати.</para>
  <variablelist>
    <anchor id="print"/>
    <varlistentry
> 
      <term
>print<indexterm
><primary
>print</primary
></indexterm
></term>
      <listitem
><para
><screen
>print X</screen>
Команда <userinput
>print</userinput
> використовується для того, щоб наказати черепашці написати щось на полотні. Команда <userinput
>print</userinput
> отримує числа і рядки у якості вхідної інформації. Ви можете <userinput
>писати</userinput
> комбінації з чисел і рядків за допомогою символу <quote
>+</quote
>. Ось подивіться на цей приклад: <screen
>$year = 2003
$author = "Cies"
print $author + " почав роботу над проектом KTurtle у " + $year + "році, і все ще отримує задоволення від роботи над ним!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="fontsize"/>
    <varlistentry
> 
      <term
>fontsize<indexterm
><primary
>fontsize</primary
></indexterm
></term>
      <listitem
><para
><screen
>fontsize X</screen>
Команда <userinput
>fontsize</userinput
> встановлює розмір шрифту, який використовуватиме команда <userinput
>print</userinput
>. Команда <userinput
>fontsize</userinput
> отримує одне вхідне значення, ним має бути число. Розмір встановлюється у <glossterm linkend="pixels"
>пікселях</glossterm
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="random">
<title
>Команди, які створюють для вас випадкові числа</title>
<para
>Існує одна команда, яка створює для вас випадкові числа, її назва — <userinput
>random</userinput
>, вона дуже корисна для отримання деяких результатів, які не можна заздалегідь передбачити.</para>
  <variablelist>
    <varlistentry
> 
      <term
>random (rnd)<indexterm
><primary
>random (rnd)</primary
></indexterm
></term>
      <listitem
><para
><screen
>random X,Y</screen>
Команда <userinput
>random</userinput
> отримує вхідні дані і виводить вихідні. У якості вхідних даних їй потрібні два числа, перше (X) вказує на мінімальне значення числа, яке можна вивести, а друге (Y) — встановлює максимальне значення цього числа. У результаті дії команди буде виведено випадково обране число, яке буде більше або рівне за мінімальне значення і менше або рівне за максимальне значення. Ось невеликий приклад: <screen>
repeat 500 {
  $x = random 1,20
  forward $x
  turnleft 10 - $x
}
</screen
> За допомогою команди <userinput
>random</userinput
> ви можете ввести елемент випадковості у вашу програму.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="dialogs">
<title
>Введення і отримання інформації за допомогою діалогових вікон</title>
<para
>Діалогове вікно – це невеличке виринаюче вікно, у якому розміщено деяку інформацію від програми, або у яке слід ввести деяку інформацію, потрібну програмі. У &kturtle; є дві команди для виклику діалогових вікон, а саме: <userinput
>message</userinput
> і <userinput
>ask</userinput
></para>
  <variablelist>
    <anchor id="message"/>
    <varlistentry
> 
      <term
>message<indexterm
><primary
>message</primary
></indexterm
></term>
      <listitem
><para
><screen
>message X</screen>
Команда <userinput
>message</userinput
> отримує у якості вхідної інформації <link linkend="string"
>рядок</link
>. У результаті виконання команди буде показано виринаюче вікно з текстом, який визначає вхідний <link linkend="string"
>рядок</link
>. <screen
>message "Cies почав роботу над проектом KTurtle у 2003 році, і все ще отримує задоволення від роботи над ним!"
</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="ask"/>
    <varlistentry
> 
      <term
>ask<indexterm
><primary
>ask</primary
></indexterm
></term>
      <listitem
><para
><screen
>ask X</screen>
Команда <userinput
>ask</userinput
> отримує вхідні дані у вигляді <link linkend="string"
>рядка</link
>. У результаті виконання команди буде показано діалогове вікно, у якому міститиметься текст з рядка, точно так само як і у команді <link linkend="message"
>message</link
>. Але, окрім цього, у вікні буде і поле для введенні інформації. У це поле введення користувач може ввести <link linkend="number"
>число</link
> або <link linkend="string"
>рядок</link
>, який можна зберегти у <link linkend="containers"
>контейнері</link
>. Приклад: <screen>
$in = ask "Скільки вам років?"
$out = 2003 - $in
print "У 2003 році вам було " + $out + " років."
</screen
> Якщо користувач закриває діалогове вікно введення або нічого не вводить у поле для введення, <link linkend="containers"
>контейнеру</link
> надається порожнє значення.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>



<sect1 id="containers">
<title
>Контейнери</title>
<para
>Контейнери — це літери або слова, які програміст може використовувати для зберігання чисел або тексту. Контейнери, у яких містяться числа, називають <link linkend="variables"
>змінними</link
>, а контейнери, у яких містяться рядки, називають <link linkend="string"
>рядками</link
>. Контейнери можна визначити за наявністю символу контейнера, <quote
>$</quote
>, який передує їх використанню.</para>

<para
>У контейнерах, які ще не використовувалися, нічого не міститься. Приклад: <screen>
print $N
</screen
> Ця команда не надрукує нічого, крім того, у результаті її виконання ви отримаєте повідомлення про помилку. </para>

<sect2 id="variables">
<title
>Змінні: числові контейнери</title>
<para
>Почнімо з прикладу: <screen>
$x = 3
print $x
</screen
> У першому рядку літера <userinput
>x</userinput
> стає змінною (числовим контейнером). Як ви можете бачити, значення змінної <userinput
>x</userinput
> рівне 3. У другому рядку прикладу це значення буде намальовано на полотні.</para>
<para
>Зауважте, що якщо потрібно намалювати просто <quote
>x</quote
>, слід написати <screen
>print "x"
</screen>
</para>
<para
>Це було просто, тепер трохи складніший приклад: <screen>
$A = 2004
$B = 25
$C = $A + $B

# наступна команда намалює рядок "2029"
print $C
backward 30
# а ця команда надрукує "2004 plus 25":
print $A + " plus " + $B
backward 30
# команда, яка друкує "1979":
print $A - $B
</screen
> У перших двох рядках встановлено значення змінних <userinput
>A</userinput
> і <userinput
>B</userinput
> 2004 і 25. У третьому рядку змінній <userinput
>C</userinput
> надано значення <userinput
>A + B</userinput
>, тобто число рівне 2029. Решта прикладу складається з 3 команд <userinput
>print</userinput
> з командою <userinput
>backward 30</userinput
> між ними. Команду <userinput
>backward 30</userinput
> додано для того, щоб вивід кожної з команд знаходився у новому рядку. У цьому прикладі ви також можете побачити, що змінні можна використовувати у <link linkend="math"
>математичних обчисленнях</link
>.</para>
</sect2>

<sect2 id="strings">
<title
>Контейнери, що містять текст (рядки)</title>
<para
>У коді програми звичайний текст, зазвичай, починається і закінчується лапками. Приклад, з яким ми вже мали справу: <screen>
print "Привіт, програмісте!"
</screen
> Звичайний текст взято у лапки. Ці шматочки звичайного тексту ми будемо називати <link linkend="strings"
>рядками</link
>.</para>
<para
>Рядки можна зберігати у <link linkend="containers"
>контейнерах</link
>, так само, як і <link linkend="number"
>числа</link
> Рядки дуже схожі на змінні. Найбільшою відмінністю між ними є те, що у них міститься текст, а не числа. З цієї причини рядки не можна використовувати у <link linkend="math"
>математичних обчисленнях</link
> і <link linkend="questions"
>питаннях</link
>. Приклад використання рядків: <screen>
$x = "Привіт, "
$name = ask "Будь ласка, введіть ваше ім’я..."
print $x + $name + ", як справи?"
</screen
> У першому рядку <userinput
>x</userinput
> надається значення <quote
>Привіт, </quote
>. У другому рядку <userinput
>name</userinput
> надається значення отримане в результаті дії команди <userinput
>ask</userinput
>. У третьому рядку програма малює сполучення трьох рядків на полотні.</para>
<para
>Ця програма запитає вас про ваше ім’я. Якщо ви, наприклад, введете ім’я <quote
>Павло</quote
>, програма напише <quote
>Привіт, Павло, як справи?</quote
>. Будь ласка, зауважте, що символ плюса (+) — це єдиний математичний символ, який ви можете використовувати для дій з рядками.</para>
</sect2>
</sect1>

<sect1 id="math">
<title
>Чи може черепашка обчислювати?</title>
<para
>Так, &kturtle; може виконувати математичні дії. Ви можете додавати (+), віднімати (-), множити (*) і ділити (/). Ось приклад, де можна побачити принципи використання всіх цих дій: <screen>
$a = 20 - 5
$b = 15 * 2
$c = 30 / 30
$d = 1 + 1
print "a: "+$a+", b: "+$b+", c: "+$c+", d: "+$d 
</screen
> Вам зрозуміло, які значення надано змінним a, b, c і d? Будь ласка, зауважте, що використано символ <link linkend="assignment"
>присвоювання</link
> <userinput
>=</userinput
>.</para>
<para
>Якщо вам потрібно виконати прості обчислення, ви можете зробити щось на зразок цього: <screen
>print 2004-12
</screen
></para>
<para
>А тепер приклад з дужками: <screen>
print ( ( 20 - 5 ) * 2 / 30 ) + 1
</screen
> Спочатку буде обчислено вираз у дужках. У нашому випадку, буде обчислено 20-5, потім це значення буде помножено на 2, поділено на 30, і додано до нього 1 (у результаті отримаємо 2).</para>
<para
>&kturtle; має і додаткові математичні можливості. Програмі відомі число <userinput
>pi</userinput
>, тригонометричні функції на зразок <userinput
>sin</userinput
>, <userinput
>cos</userinput
>, <userinput
>tan</userinput
>, <userinput
>arcsin</userinput
>, <userinput
>arccos</userinput
>, <userinput
>arctan</userinput
> і функції <userinput
>sqrt</userinput
> і <userinput
>exp</userinput
>. <indexterm
><primary
>pi</primary
></indexterm>
<indexterm
><primary
>sin, cos, tan</primary
></indexterm>
<indexterm
><primary
>arcsin, arccos, arctan</primary
></indexterm>
<indexterm
><primary
>sqrt, exp</primary
></indexterm>
</para>

<sect2 id="round">
<title
>Дозвольте черепашці округлити ваші числа</title>
<para
>Якщо для обчислень вам потрібні цілі числа, вам слід скористатися цією функцією.</para>
  <variablelist>
    <varlistentry>
      <term
>round<indexterm
><primary
>round</primary
></indexterm
></term>
      <listitem
><para
><screen
>round(x)</screen>
округлює задане число до найближчого цілого. <screen>
print round(10.8)
forward 20
print round(10.3)
forward 20
</screen
> Виконуючи цей код, черепашка напише числа 11 і 10.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>

<sect1 id="questions">
<title
>Задаємо питання, отримуємо відповіді...</title>
<para
><link linkend="if"
><userinput
>if</userinput
></link
> і <link linkend="while"
><userinput
>while</userinput
></link
> є <link linkend="controlling-execution"
>регуляторами виконання</link
>, які обговорюватимуться у наступному розділі. У цьому розділі для пояснення способів використання питань буде використано команду the <link linkend="if"
><userinput
>if</userinput
></link
>.</para>
<sect2 id="q">
<title
>Питання</title>
<para
>Простий випадок питання: <screen>
$x = 6
if $x &gt; 5 {
  print "привіт"
}
</screen
> У цьому прикладі питанням є частина, що складається з <userinput
>x &gt; 5</userinput
>. Якщо відповіддю на це питання буде "так", буде виконано код між дужками. Питання є важливою частиною програмування і часто використовуються разом з <link linkend="controlling-execution"
>регуляторами виконання</link
>, на зразок <link linkend="if"
><userinput
>if</userinput
></link
>. За допомогою питань можна порівнювати між собою всі числа і <link linkend="variables"
>змінні</link
> (контейнери з числами).</para>
<para
>Ось всі можливі варіанти питань: <table>
<title
>Типи питань</title>
<tgroup cols="3">
<tbody>
<row>
<entry
><userinput
>a == b</userinput
></entry>
<entry
>дорівнює</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> рівне <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a != b</userinput
></entry>
<entry
>нерівності</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> не рівне <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt; b</userinput
></entry>
<entry
>більше, ніж</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> більше за <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt; b</userinput
></entry>
<entry
>менше, ніж</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> менше за <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &gt;= b</userinput
></entry>
<entry
>більше або дорівнює</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> більше або дорівнює <userinput
>b</userinput
></entry>
</row>
<row>
<entry
><userinput
>a &lt;= b</userinput
></entry>
<entry
>менше або дорівнює</entry>
<entry
>відповіддю буде <quote
>так</quote
>, якщо <userinput
>a</userinput
> менше або дорівнює <userinput
>b</userinput
></entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</sect2>

<sect2 id="question-glue">
<title
>Клей питань</title>
<para
>Слова-клей питань надають змогу склеювати питання у одне велике питання. <screen>
$a = 1
$b = 5
if ($a &lt; $b) and ($b == 5) {
  print "привіт"
}
</screen
> У цьому прикладі слово-клей <userinput
>and</userinput
> використано для того, щоб об’єднати два питання (<userinput
>a &lt; 5</userinput
>, <userinput
>b == 5</userinput
>). Якщо відповіддю на одну з частинок, об’єднаних за допомогою <userinput
>and</userinput
>, буде <quote
>ні</quote
>, відповіддю на склеєне питання також буде <quote
>ні</quote
>, оскільки, якщо використано слово-клей <userinput
>and</userinput
>, відповідь на склеєне питання буде <quote
>так</quote
>, лише якщо відповіді на його частинки також <quote
>так</quote
>. Будь ласка, не забудьте ставити дужки навколо кожного з питань!</para>

<para
>Ось схематичний огляд, докладні пояснення розміщено за ним: <table>
<title
>Слова-клей питань</title>
<tgroup cols="2">
<tbody>
<row>
<entry
><userinput
>and</userinput
></entry>
<entry
>Щоб відповіддю було "так", обидві частини повинні мати відповідь "так"</entry>
</row>
<row>
<entry
><userinput
>or</userinput
></entry>
<entry
>Якщо відповідь на одну з частин — "так", відповіддю на склеєне питання також буде "так"</entry>
</row>
<row>
<entry
><userinput
>not</userinput
></entry>
<entry
>Особливий випадок: працює лише для одинарних питань! Змінює відповідь "так" на "ні", а відповідь "ні" — на "так".</entry>
</row>
</tbody>
</tgroup>
</table>
</para>

<sect3 id="and">
<title
>and</title>
<indexterm
><primary
>and</primary
></indexterm>
<para
>Якщо два питання склеюються разом за допомогою  <userinput
>and</userinput
>, для того, щоб відповідь на загальне питання була "так", питання по обидві частини від <userinput
>and</userinput
> повинні мати відповідь "так". Приклад: <screen>
$a = 1
$b = 5
if (($a &lt; 10) and ($b == 5)) and ($a &lt; $b) {
  print "привіт"
}
</screen
> У цьому прикладі ви можете бачити одне склеєне питання, яке склеєно з іншим питанням.</para>
</sect3>

<sect3 id="or">
<title
>or</title>
<indexterm
><primary
>or</primary
></indexterm>
<para
>Якщо одне або обидва з питань, склеєних за допомогою <userinput
>or</userinput
>, має відповідь "так", відповіддю на склеєне питання буде "так". Приклад: <screen>
$a = 1
$b = 5
if (($a &lt; 10) or ($b == 10)) or ($a == 0) {
  print "привіт"
}
</screen
> У цьому прикладі ви можете бачити одне склеєне питання, яке склеєно з іншим питанням.</para>
</sect3>

<sect3 id="not">
<title
>not</title>
<indexterm
><primary
>not</primary
></indexterm>
<para
><userinput
>not</userinput
> є особливим словом-клеєм питань, оскільки воно працює лише з одинарним питанням. <userinput
>not</userinput
> змінює відповідь з "так" на "ні", а з "ні" на "так". Приклад: <screen>
$a = 1
$b = 5
if not (($a &lt; 10) and ($b == 5)) {
  print "привіт"
}
else
{
  print "не привіт ;-)"
}
</screen
> У цьому прикладі питання, що склеюється, має відповідь "так" але слово-клей <userinput
>not</userinput
> змінює цю відповідь на "ні". Отже, в результаті на <link linkend="the-canvas"
>полотні</link
> буде написано <userinput
>"не привіт ;-)"</userinput
>.</para>
</sect3>

</sect2>

</sect1>

<sect1 id="controlling-execution">
<title
>Контроль над виконанням</title>
<para
>Регулятори виконання надають вам змогу &mdash; як це і випливає з їх назви &mdash; керувати виконанням програми.</para>
<para
>Команди керування виконанням <glossterm
>підсвічуються</glossterm
> темно-зеленим кольором і виокремлюються жирним шрифтом. З регуляторами виконання використовують і фігурні дужки, які <glossterm
>підсвічуються</glossterm
> чорним кольором і виокремлюються жирним шрифтом.</para>

<sect2 id="wait">
<title
>Черепашко, зачекай!</title>
<para
>Якщо ви вже повправлялися у програмуванні у &kturtle;, ви, мабуть зауважили, що черепашка малює дуже швидко. Ця команда примушує черепашку почекати деякий проміжок часу.</para>
  <variablelist>
    <varlistentry>
      <term
>wait<indexterm
><primary
>wait</primary
></indexterm
></term>
      <listitem
><para
><screen
>wait X</screen>
Команда <userinput
>wait</userinput
> наказує черепашці чекати X секунд. <screen>
repeat 36 {
  forward 5
  turnright 10
  wait 0.5
}
</screen
> За допомогою цього коду малюється коло, але черепашка чекатиме по пів секунди перш ніж перейти до наступного кроку. Це створює враження черепашки, що рухається повільно.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="if">
<title
>Умовне виконання</title>
  <variablelist>
    <varlistentry>
      <term
>if<indexterm
><primary
>if</primary
></indexterm
></term>
      <listitem
><para
><screen
>if <link linkend="questions"
>питання</link
> { ... }</screen>
Код між двома фігурними дужками буде виконано, лише <userinput
>якщо</userinput
> відповідь на <link linkend="questions"
>питання</link
> буде <quote
>так</quote
>. Будь ласка, прочитайте інформацію про <link linkend="questions"
>питання</link
> у <link linkend="questions"
>розділі про питання</link
>. <screen>
$x = 6
if $x &gt; 5 {
  print "x більше за п’ять!"
}
</screen
> У першому рядку змінній <userinput
>x</userinput
> надається значення 6. У другому рядку знаходиться <link linkend="questions"
>запитання</link
> <userinput
>x &gt; 5</userinput
>. Оскільки відповіддю на це питання є <quote
>так</quote
> регулятор виконання <userinput
>if</userinput
> дозволить виконання коду між фігурними дужками.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="else">
<title
>Якщо "ні", це означає "інакше"</title>
  <variablelist>
    <varlistentry>
      <term
>else<indexterm
><primary
>else</primary
></indexterm
></term>
      <listitem
><para
><screen
>if питання { ... } else { ... }</screen>
Команду <userinput
>else</userinput
> можна використовувати як додаток до регулятора виконання <link linkend="if"
><userinput
>if</userinput
></link
>. кож між фігурними дужками після <userinput
>else</userinput
> виконуватиметься, лише якщо відповідь на задане <link linkend="questions"
>питання</link
> буде <quote
>ні</quote
>. <screen>
reset
$x = 4
if $x &gt; 5 {
  print "x більше за п’ять!"
}
else
{
  print "x менше за шість!"
}
</screen
> Суть <link linkend="questions"
>питання</link
> зводиться до того, чи більше <userinput
>x</userinput
> за 5. Оскільки значенням наданим у першому рядку <userinput
>x</userinput
> є 4, відповіддю на питання буде <quote
>ні</quote
>. Це означає, що буде виконано код між фігурними дужками, що стоять за командою <userinput
>else</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="while">
<title
>Цикл "while"</title>
  <variablelist>
    <varlistentry>
      <term
>while<indexterm
><primary
>while</primary
></indexterm
></term>
      <listitem
><para
><screen
>while <link linkend="questions"
>питання</link
> { ... }</screen>
Регулятор виконання <userinput
>while</userinput
> багато у чому схожий на <link linkend="if"
><userinput
>if</userinput
></link
>. Різниця між ними полягає у тому, що <userinput
>while</userinput
> продовжує виконання коду між фігурними дужками (цикл), аж доки відповіддю на <link linkend="questions"
>питання</link
> не стане <quote
>ні</quote
>. <screen>
$x = 1
while $x &lt; 5 {
  forward 10
  wait 1
  $x = $x + 1
}
</screen
> У першому рядку змінній <userinput
>x</userinput
> надано значення 1. У другому рядку задано <link linkend="questions"
>питання</link
> про те, чи <userinput
>x &lt; 5</userinput
>. Оскільки відповіддю на це питання буде <quote
>так</quote
> регулятор виконання <userinput
>while</userinput
> починатиме виконання коду між фігурними дужками з початку, до того часу, коли відповіддю на <link linkend="questions"
>питання</link
> стане <quote
>ні</quote
>. У нашому випадку, код між фігурними дужками буде виконано чотири рази, оскільки кожного разу, коли виконується п’ятий рядок <userinput
>x</userinput
> збільшується на 1.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="repeat">
<title
>Цикл "repeat"</title>
  <variablelist>
    <varlistentry>
      <term
>repeat<indexterm
><primary
>repeat</primary
></indexterm
></term>
      <listitem
><para
><screen
>repeat число { ... }</screen>
Регулятор виконання <userinput
>repeat</userinput
> дуже схожий на <link linkend="while"
><userinput
>while</userinput
></link
>. Різниця полягає у тому, що <userinput
>repeat</userinput
> повторює виконання команд (цикл) до заданого числа.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="for">
<title
>Цикл з лічильником, "for"</title>
  <variablelist>
    <varlistentry>
      <term
>for<indexterm
><primary
>for</primary
></indexterm
><indexterm
><primary
>step</primary
></indexterm
></term>
      <listitem
><para
><screen
>for <userinput
>точка початку</userinput
> to <userinput
>точка кінця</userinput
> { ... }</screen>
Цикл <userinput
>for</userinput
> — це <quote
>цикл з лічильником</quote
>, тобто він лічить повтори за вас. <screen>
for $x = 1 to 10 {
  print $x * 7
  forward 15
}
</screen
> Кожне виконання коду між фігурними дужками збільшує значення <userinput
>x</userinput
> на 1, до того часу, коли <userinput
>x</userinput
> досягне значення 10. Код між фігурними дужками пише на полотні значення <userinput
>x</userinput
> помноженого на 7. Після виконання програми ви побачите на полотні таблицю множення на 7. </para>
     <para
>Типовим розміром кроку циклу є 1, але ви можете використовувати інше значення за допомогою команди на зразок <screen
>for <userinput
>точка початку</userinput
> to <userinput
>точка кінця</userinput
> step <userinput
>розмір кроку</userinput
> { ... }</screen
></para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="break">
<title
>Полишити цикл</title>
  <variablelist>
    <varlistentry>
      <term
>break<indexterm
><primary
>break</primary
></indexterm
></term>
      <listitem
><para
><screen
>break</screen>
Негайно припиняє виконання програми у рамках циклу і передає керування команді, яку розташовано одразу за поточним циклом</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

<sect2 id="exit">
<title
>Зупинити черепашку</title>
  <variablelist>
    <varlistentry>
      <term
>exit<indexterm
><primary
>exit</primary
></indexterm
></term>
      <listitem
><para
><screen
>exit</screen>
Завершує виконання коду.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>
</sect1>


<sect1 id="learn">
<title
>Створення власних команд за допомогою <quote
>learn</quote
></title>
<para
><userinput
>learn</userinput
><indexterm
><primary
>learn</primary
></indexterm
> є дуже особливою командою, оскільки цю команду використовують для створення нових команд. Команда, яку ви створюєте за її допомогою може отримувати <glossterm linkend="input-output"
>вхідні дані</glossterm
> і повертати <glossterm linkend="input-output"
>вихідні дані</glossterm
>. Давайте поглянемо як створюється нова команда: <screen>
learn circle $x {
  repeat 36 {
    forward $x
    turnleft 10
  }
}
</screen
> Нова команда називається <userinput
>circle</userinput
>. Команда <userinput
>circle</userinput
> отримує одне <glossterm linkend="input-output"
>вхідне значення</glossterm
>, число, яке задає розмір кола. <userinput
>circle</userinput
> не повертає ніяких <glossterm linkend="input-output"
>вихідних даних</glossterm
>. Тепер у решті коду можна використовувати команду <userinput
>circle</userinput
> як звичайну команду. Ось приклад: <screen
>learn circle $X {
  repeat 36 {
    forward $X 
    turnleft 10 
  }
}

go 200,200 
circle 20

go 300,200 
circle 40  
</screen>
</para>
<para
>У наступному прикладі буде створено команду, яка повертає значення. <screen>
reset

learn multiplyBySelf $n {
  $r = $n * $n
  return $r
}
$i = ask "Будь ласка, введіть число і натисніть кнопку Гаразд"
print $i + ", помножене на себе, дає: " + multiplyBySelf $i
</screen
> У цьому випадку було створено нову команду з назвою <userinput
>multiplyBySelf</userinput
>. Вхідне число цієї команди множиться на себе і повертається іншій команді за допомогою команди <anchor id="return"/><userinput
>return</userinput
>. Команда <userinput
>return</userinput
> — це спосіб вивести значення функції, яку ви створили. </para>
<para
>Команди можуть приймати і по декілька <glossterm linkend="input-output"
>вхідних значень</glossterm
>. У наступному прикладі буде створено команду, яка малює прямокутник. <screen>
learn box $X, $Y {
  forward $Y
  turnright 90
  forward $X
  turnright 90
  forward $Y
  turnright 90
  forward $X
  turnright 90
}
</screen
> Тепер ви можете виконати команду <userinput
>box 50, 100</userinput
>, і черепашка намалює на полотні прямокутник. </para>
  
</sect1>

</chapter>
