<chapter id="reference">
<title
>Довідка з програмування на &turtlescript;</title>
<para
>Тут наведено довідник з мови &kturtle;, &turtlescript;. У першому розділі цієї глави ми поглянемо на деякі з аспектів <link linkend="grammar"
>граматики</link
> програм &turtlescript;. Другий розділ присвячено <link linkend="mathematical-operators"
>математичним операторам</link
>, <link linkend="boolean-operators"
>булевим (логічним) операторам</link
> і <link linkend="comparing-operators"
>операторам порівняння</link
>. Третій розділ є величезним списком всіх <link linkend="commands"
>команд</link
> з почерговим їх обговоренням. У четвертому розділі наведено пояснення щодо <link linkend="assignment-of-variables"
>надання</link
> значень <link linkend="assignment-of-variables"
>змінним</link
>. Нарешті, ми пояснимо як впорядкувати виконання команд за допомогою <link linkend="controlling-execution"
>інструкцій регулювання виконання</link
> у п’ятому розділі і як створювати власні команди за допомогою команди <link linkend="learn"
>learn</link
> у розділі під номером шість.</para>

<sect1 id="grammar">
<title
>Граматика &turtlescript;</title>
<para
>Як і у будь-якій мові, у &turtlescript; існують різні типи слів і символів. В українській ми відрізняємо дієслова (наприклад, «йти» або «співати») та іменники (наприклад, «сестра» або «будинок»). Ці слова використовують з різною метою. &turtlescript; — це мова програмування, за її посередництвом ви можете повідомити &kturtle; про потрібні вам дії.</para>
<para
>У цьому розділі ми коротко зупинимося на деяких з різних типів слів та символів &turtlescript;. Ми надамо пояснення щодо <link linkend="comment"
>коментарів</link
>, <link linkend="command"
>команд</link
> та трьох інших типів буквених виразів: <link linkend="number"
>чисел</link
>, <link linkend="string"
>рядків</link
> і <link linkend="boolean-value"
>булевих (так/ні) значень</link
>.</para>


<sect2 id="comment">
<title
>Коментарі</title>
<para
>Програма складається з інструкцій, які виконуються після запуску команди, і так званих коментарів. Коментарі не виконуються, &kturtle; просто ігнорує їх під час виконання програми. Коментарі призначено для програмістів: вони допомагають їм краще розуміти програму. Все, що буде вказано після символу <userinput
>#</userinput
> у &turtlescript; вважається коментарем. Ось приклад невеличкої програми, яка не виконує жодних дій: <screen>
# ця невеличка програма нічого не робить, вона складається лише з коментаря!
</screen
> Програма, хоч і зовсім непотрібна, але добре пояснює суть коментарів.</para>
<para
>Коментарі є дуже корисними, якщо програма стає трохи складнішою. Коментарі є «порадником» для інших програмістів. У наведеній нижче програмі коментарі використано разом з командою <link linkend="print"
>print</link
>. <screen>
# Цю програму було створено Cies Breijs.
print "цей текст буде написано на полотні"
# попередній рядок не є коментарем, а наступний — коментар:
# print "цей текст не буде написано!"
</screen
> У першому рядку наведено опис програми. Другий рядок буде виконано &kturtle;: черепашка намалює напис <userinput
>цей текст буде написано на полотні</userinput
> на полотні. Третій рядок є коментарем. У четвертому рядку наведено коментар з фрагментом коду &turtlescript;, якщо вилучити символ <userinput
>#</userinput
> з четвертого рядка, &kturtle; виконає інструкцію з друку. Програмісти кажуть: інструкцію «print» у четвертому рядку було «закоментовано».</para>
<para
>Закоментовані рядки <glossterm
>підсвічуються</glossterm
> світло-сірим кольором у <link linkend="the-editor"
>редакторі коду</link
>.</para>
</sect2>

<sect2 id="command">
<title
>Команди</title>
<para
>За допомогою команди ви можете повідомити черепашці або &kturtle; про те, що слід виконати певну дію. Для деяких команд потрібні вхідні дані, деякі команди самі виводять дані. <screen>
# для команди forward потрібні вхідні дані, у нашому випадку ними є число 100:
forward 100
</screen
> Перший рядок програми є <link linkend="comment"
>коментарем</link
>. У другому рядку міститься команда <userinput
>forward</userinput
> і <link linkend="number"
>число</link
> <userinput
>100</userinput
>. Число не є частиною команди, воно є «вхідними даними» команди.</para>
<para
>Щоб прочитати детальний огляд всіх команд, які підтримує &kturtle;, перейдіть за цим <link linkend="commands"
>посиланням</link
>. Вбудовані команди буде <glossterm
>підсвічено</glossterm
> темно-синім.</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="mathematical-operators"
>математичних операторах</link
> і <link linkend="comparing-operators"
>операторах порівняння</link
>. Їх також можна зберігати у <link linkend="assignment-of-variables"
>змінних</link
>. Числа буде <glossterm
>підсвічено</glossterm
> темно-червоним кольором.</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="assignment-of-variables"
>змінних</link
>, подібно до <link linkend="number"
>чисел</link
>. Але, на відміну від чисел, рядки не можна використовувати у <link linkend="mathematical-operators"
>математичних діях</link
> або <link linkend="comparing-operators"
>діях з порівняння</link
>. Рядки буде <glossterm
>підсвічено</glossterm
> червоним кольором.</para>
</sect2>

<sect2 id="boolean-value">
<title
>Булеві (так/ні) значення</title>
<para
>Існує лише два булевих значення: <userinput
>true</userinput
> (так) і <userinput
>false</userinput
> (ні). У цих значень є і інші назви: увімкнути і вимкнути, одиниця і нуль. Але у &turtlescript; ми завжди називатимемо їх <userinput
>true</userinput
> і <userinput
>false</userinput
>. Погляньте на цей фрагмент коду &turtlescript;: <screen>
$a = true
</screen
> Якщо ви зазирнете до вікна <link linkend="the-inspector"
>інспектора</link
> ви побачите, що значенням <link linkend="assignment-of-variables"
>змінної</link
> <userinput
>$a</userinput
> є <userinput
>true</userinput
>, і що ця змінна належить до булевого типу.</para>
<para
>Часто булеві значення є результатом обчислення <link linkend="comparing-operators"
>оператора порівняння</link
>, наприклад, у такому фрагменті коду &turtlescript;: <screen>
$answer = 10 &gt; 3
</screen
> Значенням <link linkend="assignment-of-variables"
>змінної</link
> <userinput
>$answer</userinput
> буде <userinput
>true</userinput
>, оскільки <userinput
>10</userinput
> більше за <userinput
>3</userinput
>.</para>
<para
>Булеві значення, <userinput
>true</userinput
> і <userinput
>false</userinput
>, буде <glossterm
>підсвічено</glossterm
> темно-червоним.</para>
</sect2>

</sect1>



<sect1 id="operators">
<title
>Математичні, булеві оператори та оператори порівняння</title>
<para
>Заголовок цього розділу наче натякає на щось складне, але все не так складно, як здається.</para>

<sect2 id="mathematical-operators">
<title
>Математичні оператори</title>
<para
>Ось основні математичні символи: додавання (<userinput
>+</userinput
>), віднімання (<userinput
>-</userinput
>), множення (<userinput
>*</userinput
>), ділення (<userinput
>/</userinput
>) і піднесення до степеня (<userinput
>^</userinput
>).</para>

<para
>Ось невеличкий приклад математичних операторів, якими ви можете скористатися у &turtlescript;: <screen>
$add      = 1 + 1
$subtract = 20 - 5
$multiply = 15 * 2
$divide   = 30 / 30
$power    = 2 ^ 2
</screen
> Результат виконання математичних операцій слід <link linkend="assignment-of-variables"
>призначати</link
> різноманітним <link linkend="assignment-of-variables"
>змінним</link
>. За допомогою <link linkend="the-inspector"
>інспектора</link
> ви зможете переглянути ці змінні.</para>
<para
>Якщо вам потрібно виконати прості обчислення, ви можете зробити щось на зразок цього: <screen
>print 2010-12
</screen
></para>
<para
>А тепер приклад з дужками: <screen>
print ( ( 20 - 5 ) * 2 / 30 ) + 1
</screen
> Спочатку буде обчислено вираз у дужках. У нашому випадку, буде обчислено 20-5, потім це значення буде помножено на 2, поділено на 30, і додано до нього 1 (у результаті отримаємо 2). Дужками можна скористатися і у інших випадках.</para>
<para
>У &kturtle; передбачено і додаткові математичні можливості у формі команд. Нижче наведено список команд, але без означення способу, у який вони працюють: <link linkend="round"
>round</link
>, <link linkend="random"
>random</link
>, <link linkend="sqrt"
>sqrt</link
>, <link linkend="pi"
>pi</link
>, <link linkend="sin"
>sin</link
>, <link linkend="cos"
>cos</link
>, <link linkend="tan"
>tan</link
>, <link linkend="arcsin"
>arcsin</link
>, <link linkend="arccos"
>arccos</link
>, <link linkend="arctan"
>arctan</link
>.</para>
</sect2>

<sect2 id="boolean-operators">
<title
>Булеві (так/ні) оператори</title>
<para
>Тоді як <link linkend="mathematical-operators"
>математичні оператори</link
> в основному призначено для <link linkend="number"
>чисел</link
>, булеві оператори призначено для <link linkend="boolean-value"
>булевих значень</link
> (<userinput
>true</userinput
> і <userinput
>false</userinput
>). Передбачено лише три булеві оператори, а саме: <userinput
>and</userinput
>, <userinput
>or</userinput
> і <userinput
>not</userinput
>. У наведеному нижче фрагменті &turtlescript; показано використання всіх цих операторів: <screen>
$and_1_1 = true and true    # -> true
$and_1_0 = true and false   # -> false
$and_0_1 = false and true   # -> false
$and_0_0 = false and false  # -> false

$or_1_1 = true or true    # -> true
$or_1_0 = true or false   # -> true
$or_0_1 = false or true   # -> true
$or_0_0 = false or false  # -> false

$not_1 = not true   # -> false
$not_0 = not false  # -> true
</screen
> За допомогою <link linkend="the-inspector"
>інспектора</link
> ви зможете переглянути значення, крім того, ми навели результати виконання дій у коментарях. Результат застосування <userinput
>and</userinput
> дорівнює <userinput
>true</userinput
>, лише якщо з обох боків від нього стоять значення <userinput
>true</userinput
>. Результатом застосування <userinput
>or</userinput
> буде <userinput
>true</userinput
>, якщо з одного з боків від оператора стоїть <userinput
>true</userinput
>. Оператор <userinput
>not</userinput
> перетворює <userinput
>true</userinput
> на <userinput
>false</userinput
>, а <userinput
>false</userinput
> на <userinput
>true</userinput
>.</para>
<para
>Булеві оператори буде <glossterm
>підсвічено</glossterm
> рожевим.</para>

<sect3 id="boolean-operators-advanced-examples">
<title
>Декілька додаткових прикладів</title>
<para
>Розглянемо наведений нижче приклад з <userinput
>and</userinput
>: <screen>
$a = 1
$b = 5
if (($a &lt; 10) and ($b == 5)) and ($a &lt; $b) {
  print "привіт"
}
</screen
> У цьому фрагменті &turtlescript; результат застосування трьох <link linkend="comparing-operators"
>операторів порівняння</link
> буде об’єднано за допомогою операторів <userinput
>and</userinput
>. Це означає, що для того, щоб черепашка написала «привіт», потрібно, щоб всі дії з порівняння давали результат «true».</para>

<para
>Приклад з <userinput
>or</userinput
>: <screen>
$n = 1
if ($n &lt; 10) or ($n == 2) {
  print "привіт"
}
</screen
> У цьому фрагменті коду &turtlescript; частина, розташована ліворуч від <userinput
>or</userinput
>, дає «true», а частина, розташована праворуч, — «false». Оскільки одна з двох частин виразу у операторі <userinput
>or</userinput
> дорівнює «true», результатом обчислення <userinput
>or</userinput
> буде «true». Це означає, що черепашка напише «привіт».</para>

<para
>І нарешті, приклад з <userinput
>not</userinput
>, у якому ми змінними «так» на «ні», а «ні» — на «так». Дивіться: <screen
>$n = 1
if not ($n == 3) {
  print "привіт"
} else {
  print "не привіт ;-)"
}
</screen
></para>
</sect3>
</sect2>

<sect2 id="comparing-operators">
<title
>Оператори порівняння</title>
<para
>Розглянемо таке елементарне порівняння: <screen>
$answer = 10 &gt; 3
</screen
> Тут ми порівнюємо <userinput
>10</userinput
> з <userinput
>3</userinput
> за допомогою оператора «більше, ніж». Результатом цього порівняння буде <link linkend="boolean-value"
>булеве значення</link
> <userinput
>true</userinput
>, яке буде збережено у <link linkend="assignment-of-variables"
>змінній</link
> <userinput
>$answer</userinput
>.</para>
<para
>Всі <link linkend="number"
>числа</link
> і <link linkend="assignment-of-variables"
>змінні</link
> (які містять числа) можна порівнювати за допомогою операторів порівняння.</para>
<para
>Ось список можливих операторів порівняння: <table
> <title
>Типи питань</title
> <tgroup cols="3"
> <tbody
> <row
> <entry
><userinput
>$A == $B</userinput
></entry
> <entry
>дорівнює</entry
> <entry
>відповіддю буде <quote
>true</quote
>, як <userinput
>$A</userinput
> рівне <userinput
>$B</userinput
></entry
> </row
> <row
> <entry
><userinput
>$A != $B</userinput
></entry
> <entry
>не дорівнює</entry
> <entry
>відповіддю буде <quote
>true</quote
>, якщо <userinput
>$A</userinput
> не дорівнює <userinput
>$B</userinput
></entry
> </row
> <row
> <entry
><userinput
>$A &gt; $B</userinput
></entry
> <entry
>більше, ніж</entry
> <entry
>відповіддю буде <quote
>true</quote
>, якщо <userinput
>$A</userinput
> більше, ніж <userinput
>$B</userinput
></entry
> </row
> <row
> <entry
><userinput
>$A &lt; $B</userinput
></entry
> <entry
>менше, ніж</entry
> <entry
>відповіддю буде <quote
>true</quote
>, якщо <userinput
>$A</userinput
> менше, ніж <userinput
>$B</userinput
></entry
> </row
> <row
> <entry
><userinput
>$A &gt;= $B</userinput
></entry
> <entry
>більше або дорівнює</entry
> <entry
>відповіддю буде <quote
>true</quote
>, якщо <userinput
>$A</userinput
> більше або дорівнює <userinput
>$B</userinput
></entry
> </row
> <row
> <entry
><userinput
>$A &lt;= $B</userinput
></entry
> <entry
>менше або дорівнює</entry
> <entry
>відповіддю буде <quote
>true</quote
>, якщо <userinput
>$A</userinput
> менше або дорівнює <userinput
>$B</userinput
></entry
> </row
> </tbody
> </tgroup
> </table
> Будь ласка, зауважте, що $A і $B мають бути <link linkend="number"
>числами</link
> або <link linkend="assignment-of-variables"
>змінними</link
>, які містять числа.</para>
</sect2>


</sect1>



<sect1 id="commands">
<title
>Команди</title>
<para
>За допомогою команд ви наказуєте черепашці або програмі &kturtle; виконати якусь дію. Деяким з команд потрібні вхідні дані, деякі — самі виводять дані. У цьому розділі буде пояснено всі вбудовані команди, які можна використовувати у &kturtle;. Крім того, ви можете скористатися командою <link linkend="learn"
>learn</link
>, щоб створити власні команди. Вбудовані команди, які ми тут обговорюємо, <glossterm
>підсвічуються</glossterm
> темно-синім кольором.</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>
</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="math-commands">
<title
>Математичні команди</title>
<para
>Наведені нижче команди є додатковими математичними командами &kturtle;.</para>
  <variablelist>
    <anchor id="round"/>
    <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)
</screen
> Виконуючи цей код, черепашка напише числа 11 і 10.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="random"/>
    <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>
  <variablelist>
    <anchor id="sqrt"/>
    <varlistentry
> 
      <term
>sqrt<indexterm
><primary
>sqrt</primary
></indexterm
></term>
      <listitem
><para
><screen
>sqrt X</screen>
Команду <userinput
>sqrt</userinput
> призначено для пошуку квадратного кореня з числа, X.</para
></listitem>
    </varlistentry>
  </variablelist>
<!--
  <variablelist>
    <anchor id="exp"/>
    <varlistentry
> 
      <term
>exp<indexterm
><primary
>exp</primary
></indexterm
></term>
      <listitem
><para
><screen
>sqrt X</screen>
      </para
></listitem>
    </varlistentry>
  </variablelist>
-->
  <variablelist>
    <anchor id="pi"/>
    <varlistentry
> 
      <term
>pi<indexterm
><primary
>pi</primary
></indexterm
></term>
      <listitem
><para
><screen
>pi</screen>
Ця команда повертає сталу Pi, <userinput
>3.14159</userinput
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="sin"/>
    <anchor id="cos"/>
    <anchor id="tan"/>
    <varlistentry>
      <term
>sin<indexterm
><primary
>sin</primary
></indexterm
>, cos<indexterm
><primary
>cos</primary
></indexterm
>, tan<indexterm
><primary
>tan</primary
></indexterm
></term>
      <listitem
><para>
<screen
>sin X
cos X
tan X
</screen>
За допомогою цих команд задаються три відомі тригонометричні функції <userinput
>sin</userinput
>, <userinput
>cos</userinput
> і <userinput
>tan</userinput
> (tg). Вхідним параметром для всіх цих команд, X, є <link linkend="number"
>число</link
>.</para
></listitem>
    </varlistentry>
  </variablelist>
  <variablelist>
    <anchor id="arcsin"/>
    <anchor id="arccos"/>
    <anchor id="arctan"/>
    <varlistentry>
      <term
>arcsin<indexterm
><primary
>arcsin</primary
></indexterm
>, arccos<indexterm
><primary
>arccos</primary
></indexterm
>, arctan<indexterm
><primary
>arctan</primary
></indexterm
></term>
      <listitem
><para>
<screen
>arcsin X
arccos X
arctan X
</screen>
Ці команди є оберненими функціями <link linkend="sin"
>sin</link
>, <link linkend="cos"
>cos</link
> і <link linkend="tan"
>tan</link
>. Вхідним параметром для всіх цих команд, X, є <link linkend="number"
>число</link
>.</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="assignment-of-variables"
>змінній</link
> або передано, як параметр, <link linkend="commands"
>команді</link
>. Приклад: <screen>
$in = ask "Скільки вам років?"
$out = 2003 - $in
print "У 2003 році вам було " + $out + " років."
</screen
> Якщо користувач закриває діалогове вікно введення або нічого не вводить у поле для введення, <link linkend="assignment-of-variables"
>змінній</link
> надається порожнє значення.</para
></listitem>
    </varlistentry>
  </variablelist>
</sect2>

</sect1>



<sect1 id="assignment-of-variables">
<title
>Присвоювання змінним значень</title>
<para
>Спочатку ми розглянемо змінні, а потім поговоримо про те, як надати цим змінним значень. </para>

<para
>Змінними є слова, що починаються на <quote
>$</quote
>, у <link linkend="the-editor"
>редакторі</link
> ці слова <glossterm
>підсвічуються</glossterm
> пурпуровим кольором.</para>

<para
>Змінні можуть містити будь-які <link linkend="number"
>числа</link
>, <link linkend="string"
>рядки</link
> або <link linkend="boolean-value"
>булеві значення</link
>. За допомогою оператора присвоювання, <userinput
>=</userinput
>, ви можете надати змінній її значення. Змінна зберігатиме свій вміст до завершення виконання програми або до зміни значення змінної на якесь інше.</para>

<para
>Після надання значень ви можете використовувати змінні так, неначебто вони збігаються з власним вмістом. Ось приклад з фрагментом коду &turtlescript;: <screen>
$x = 10
$x = $x / 3
print $x
</screen
> Спочатку змінній <userinput
>$x</userinput
> надано значення <userinput
>10</userinput
>. Потім <userinput
>$x</userinput
> надано значення цієї ж змінної, поділеної на <userinput
>3</userinput
> — тобто <userinput
>$x</userinput
> надано значення частки <userinput
>10 / 3</userinput
>. Нарешті, <userinput
>$x</userinput
> буде намальовано черепашкою. Ви можете бачити, що у рядках два і три <userinput
>$x</userinput
> використано замість вмісту змінної.</para>

<para
>Для того, щоб змінними можна було користуватися, цим змінним слід надати значення. Приклад: <screen>
print $n
</screen
> Результатом виконання буде повідомлення про помилку.</para>

<para
>Будь ласка, погляньте на цей приклад &turtlescript;: <screen>
$a = 2004
$b = 25

# наступна команда намалює рядок "2029"
print $a + $b
backward 30
# а ця команда надрукує "2004 плюс 25 дорівнює 2029":
print $a + " плюс " + $b + " дорівнює " + ($a + $b)
</screen
> У перших двох рядках встановлено значення змінних <userinput
>$a</userinput
> і <userinput
>$b</userinput
> 2004 і 25. Далі йдуть дві команди <userinput
>print</userinput
> з командою <userinput
>backward 30</userinput
> між ними. Коментарі перед командами <userinput
>print</userinput
> пояснюють призначення цих команд. Команду <userinput
>backward 30</userinput
> додано для того, щоб забезпечити вивід кожної з порцій даних у окремому рядку. Як бачите змінними можна користуватися як замінниками їх вмісту, ви можете використовувати змінні з будь-якими <link linkend="operators"
>операторами</link
> або передавати їх як вхідні дані під час виклику<link linkend="commands"
>команд</link
>.</para>

<para
>Ще один приклад: <screen>
$name = ask "Як вас звати?"
print "Привіт, " + $name + "! Успіхів у вивченні мистецтва програмування..."
</screen
> Досить зрозуміло. Знову ж таки, змінну <userinput
>$name</userinput
> використано як рядок.</para>

<para
><link linkend="the-inspector"
>Інспектор</link
> буде дуже корисним під час роботи зі змінними. Цей інструмент покаже вам значення всіх використаних у програмі змінних.</para>
</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="boolean-value"
>булеве значення</link
> { ... }</screen>
Код між двома фігурними дужками буде виконано, лише <userinput
>if</userinput
> (якщо) результат обчислення <link linkend="boolean-value"
>булевого значення</link
> дорівнюватиме <quote
>так</quote
>. <screen>
$x = 6
if $x &gt; 5 {
  print "$x більше за п’ять!"
}
</screen
> У першому рядку змінній <userinput
>$x</userinput
> надається значення 6. У другому рядку використано <link linkend="comparing-operators"
>оператор порівняння</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 <link linkend="boolean-value"
>булеве значення</link
> { ... } else { ... }</screen>
Команду <userinput
>else</userinput
> можна використовувати як додаток до регулятора виконання <link linkend="if"
><userinput
>if</userinput
></link
>. код між фігурними дужками після <userinput
>else</userinput
> виконуватиметься, лише якщо <link linkend="boolean-value"
>булеве значення</link
> дорівнюватиме <quote
>ні</quote
>. <screen>
reset
$x = 4
if $x &gt; 5 {
  print "$x більше за п’ять!"
} else {
  print "$x менше за шість!"
}
</screen
> <link linkend="comparing-operators"
>Оператор порівняння</link
> обчислює значення <userinput
>$x &gt; 5</userinput
>. Оскільки 4 не перевищує 5 значенням буде <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="boolean-value"
>булеве значення</link
> { ... }</screen>
Регулятор виконання <userinput
>while</userinput
> багато у чому схожий на <link linkend="if"
><userinput
>if</userinput
></link
>. Різниця між ними полягає у тому, що <userinput
>while</userinput
> продовжує виконання коду між фігурними дужками (цикл), аж доки <link linkend="boolean-value"
>булевий вираз</link
> не дорівнюватиме <quote
>ні</quote
>. <screen>
$x = 1
while $x &lt; 5 {
  forward 10
  wait 1
  $x = $x + 1
}
</screen
> У першому рядку змінній <userinput
>$x</userinput
> надано значення 1. У другому рядку виконано порівняння <userinput
>$x &lt; 5</userinput
>. Оскільки відповіддю на це питання буде <quote
>так</quote
> регулятор виконання <userinput
>while</userinput
> починатиме виконання коду між фігурними дужками з початку, до того часу, коли значенням <userinput
>$x &lt; 5</userinput
> не стане <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 <link linkend="number"
>число</link
> { ... }</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 <link linkend="assignment-of-variables"
>змінна</link
> = <link linkend="number"
>число</link
> to <link linkend="number"
>число</link
> { ... }</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 <link linkend="assignment-of-variables"
>змінна</link
> = <link linkend="number"
>число</link
> to <link linkend="number"
>число</link
> step <link linkend="number"
>число</link
> { ... }</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">


<!--<sect2 id="name">
<title
>Names</title>
<para
>When using the &turtlescript; programming language you create new things. If you write a program you will often need <link linkend="containers"
>containers</link
> and in some cases you need <link linkend="learn"
>learn</link
> to create new commands. When making a new command with <link linkend="learn"
>learn</link
> you will have to specify a name.</para>
<para
>You can choose any name, as long as it does not already have a meaning. For instance you cannot name a function <link linkend="forward"
>forward</link
>, since that name is already used for an internal command.
<screen
>
# here forward is used as a new command, 
# but it already has a meaning so 
# this will produce an error:
learn forward {
  print "this is invalid"
}

# this works:
learn myforward {
  print "this is ok"
}
</screen>
Names can contain only letters, numbers and underscores (_). Yet they have to start with a letter. Container names have to start with the container prefix ($).
<screen
>
# here forward is used as a container, 
# starting with the $ prefix, so it does
# not conflict with the forward command
$forward = 20
print $forward
</screen>
</para>
<para
>Containers are <glossterm
>highlighted</glossterm
> with bolded purple in the <link linkend="the-editor"
>code editor</link
>.</para>
<para>
Please read the documentation on <link linkend="containers"
>containers</link
> and the <link linkend="learn"
>learn</link
> command for a better explanation and more examples.
</para>
</sect2
>-->





<title
>Створення власних команд за допомогою <quote
>learn</quote
></title>
<para
><userinput
>learn</userinput
> є дуже особливою командою, оскільки цю команду використовують для створення нових команд. Команда, яку ви створюєте за її допомогою може отримувати <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>
learn faculty $x {
  $r = 1
  for $i = 1 to $x {
    $r = $r * $i
  }
  return $r
}

print faculty 5
</screen
> У цьому прикладі створено нову команду з назвою <userinput
>faculty</userinput
>. Якщо вхідними даними цієї команди буде число <userinput
>5</userinput
>, буде повернуто <userinput
>5*4*3*2*1</userinput
>. З допомогою команди <userinput
>return</userinput
> можна вказати <glossterm linkend="input-output"
>вихідне значення</glossterm
> і повернути його програмі.</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>
