<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 > 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 < 10) and ($b == 5)) and ($a < $b) { print "привіт" } </screen > У цьому фрагменті &turtlescript; результат застосування трьох <link linkend="comparing-operators" >операторів порівняння</link > буде об’єднано за допомогою операторів <userinput >and</userinput >. Це означає, що для того, щоб черепашка написала «привіт», потрібно, щоб всі дії з порівняння давали результат «true».</para> <para >Приклад з <userinput >or</userinput >: <screen> $n = 1 if ($n < 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 > 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 > $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 >= $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 > </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 >Регулятори виконання надають вам змогу — як це і випливає з їх назви — керувати виконанням програми.</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 > 5 { print "$x більше за п’ять!" } </screen > У першому рядку змінній <userinput >$x</userinput > надається значення 6. У другому рядку використано <link linkend="comparing-operators" >оператор порівняння</link > для знаходження значення <userinput >$x > 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 > 5 { print "$x більше за п’ять!" } else { print "$x менше за шість!" } </screen > <link linkend="comparing-operators" >Оператор порівняння</link > обчислює значення <userinput >$x > 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 < 5 { forward 10 wait 1 $x = $x + 1 } </screen > У першому рядку змінній <userinput >$x</userinput > надано значення 1. У другому рядку виконано порівняння <userinput >$x < 5</userinput >. Оскільки відповіддю на це питання буде <quote >так</quote > регулятор виконання <userinput >while</userinput > починатиме виконання коду між фігурними дужками з початку, до того часу, коли значенням <userinput >$x < 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>