# Руководство программиста &turtlescript;

Это руководство по языку программирования &turtlescript;, используемому в &kturtle;. В первой части рассматриваются некоторые аспекты грамматики программ на &turtlescript;. Вторая часть описывает исключительно математические операторы, логические (истина/ложь) операторы и операторы сравнения. В третьей главе перечислены все команды с их описаниями. Четвёртая глава рассматривает вопросы присвоения значений переменным. В заключение, в пятой главе рассказывается, как управлять выполнением программы при помощи управляющих операторов, и в шестой — о создании собственных команд при помощи команды выучи.

## Грамматика &turtlescript;

Как и в любом языке, в &turtlescript; есть различные типы слов и символов. В русском языке мы различаем глаголы (например, «ходить» или «петь») и существительные (например, «сестра» или «дом»). Эти слова используются для различных целей. &turtlescript; — это язык программирования, используя который вы можете сообщить &kturtle;, что необходимо сделать.

В этом разделе кратко рассказано о некоторых типах слов и символов в &turtlescript;. Мы объясняем комментарии, команды и три различных типа литералов: числа, строки и логические (истина/ложь) значения.

### Комментарии

Программа состоит из инструкций, которые выполняются при запуске программы и, так называемых, комментариев. &kturtle; не выполняет комментарии, а просто игнорирует их при выполнении программы. Комментарии нужны для других программистов, чтобы они лучше могли понять вашу программу. Всё, что следует после символа `#` считается в &turtlescript; комментарием. Вот пример маленькой программы, которая ничего не делает:

    # Это маленькая программа ничего не делает. Это всего лишь комментарий!

Это в некоторой степени бесполезный пример, но он хорошо объясняет суть комментариев.

Комментарии очень полезны в более сложных программах. Они могут дать какие-то советы другим программистам. В следующей программе вы можете видеть совместное использование комментариев и команды напиши.

    # эта программа создана Cies Breijs.
    напиши "этот текст будет написан на холсте"
    # предыдущая строка — не комментарий, а следующая — комментарий:
    # напиши "этот текст не будет написан"

Первая строка описывает программу. Вторая строка выполняется &kturtle; и печатает на холсте `этот текст будет написан на холсте`. Третья строка является комментарием. Четвёртая строка — это тоже комментарий, содержащий строку &turtlescript;. Если удалить символ `#` из четвёртой строки, команда печати будет выполнена &kturtle;. Программисты говорят: оператор печати в четвертой строке «закомментирован».

В редакторе кода комментарии выделяются светло-серым.

### Команды

С помощью команд вы говорите Черепашке или &kturtle;, что необходимо выполнить какие-то действия. Некоторым командам нужны входные данные, некоторые дают что-то на выходе.

    # команде вперёд нужны входные данные, в этом примере — число 100:
    вперёд 100

Первая строка это комментарий. Вторая строка содержит команду `вперёд` и число `100`. Число не является частью команды, он считается «входом» для команды.

Некоторым командам, например, команде `иди` требуется более чем одно входное значение. Несколько значений отделяются друг от друга символом `,` (запятая).

Подробное описание всех команд, поддерживаемых &kturtle;, находится здесь. Встроенные команды выделяются тёмно-синим

### Числа

Скорее всего, вы уже знаете немного о числах. То, как используются числа в &kturtle; не сильно отличается от разговорного языка или математики.

Существуют так называемые натуральные числа: `0`, `1`, `2`, `3`, `4`, `5` и т.д., отрицательные числа: `-1`, `-2`, `-3` и т.д. и рациональные (дробные) числа, например: `0.1`, `3.14`, `33.3333`, `-5.05`, `-1.0`. Символ `.` (точка) используется для отделения дробной части.

Числа могут использоваться с математическими операторами и с операторами сравнения. Также они могут быть сохранены в переменных. Числа выделяются тёмно-красным.

### Строки

Пример:

    напиши "Привет, я строка."

В этом примере `напиши` — команда, которой передаётся строка `"Привет, я строка."`. Строки должны начинаться и заканчиваться символом `"`, чтобы &kturtle; смог определить, что это строка.

Строки можно помещать в переменные, так же как и числа. Тем не менее, в отличие от числа, строки не могут быть использованы в математических операторах или операторах сравнения. Строки выделяются красным.

### Логические (истина/ложь) значения

Существует только два логических значения: `истина` и `ложь`. Иногда они также называются: включено и выключено, да и нет, один и ноль. Но в &turtlescript; мы всегда называем их `истина` и `ложь`. Посмотрите на этот фрагмент кода &turtlescript;:

    $a = истина

Если вы посмотрите в инспектор, то увидите, что переменная `$a` имеет значение `истина` и логический тип.

Часто логические значения появляются в результате операций сравнения, например, как в следующем фрагменте кода &turtlescript;:

    $ответ = 10 > 3

Переменная `$ответ` установлена в значение `истина` потому, что `10` больше чем `3`.

Логические значения `истина` и `ложь` выделяются тёмно-красным.

## Математические, логические операторы и операторы сравнения

Название этого раздела может показаться очень трудным, но это не так сложно, как кажется.

### Математические операторы

Вот основные математические символы: сложение (`+`), вычитание (`-`), умножение (`*`), деление (`/`) и возведение в степень (`^`).

Небольшой пример использования математических операторов в &turtlescript;:

    $сумма        = 1 + 1
    $разница      = 20 - 5
    $произведение = 15 * 2
    $частное      = 30 / 30
    $степень      = 2 ^ 2

Результаты выполнения математических операций сохранены в различных переменных. Вы можете увидеть их значения в инспекторе.

Если в программе вам нужно вычислить простое выражение, вы можете поступить следующим образом:

    напиши 2010-12

Вот пример с круглыми скобками:

    напиши ( ( 20 - 5 ) * 2 / 30 ) + 1

Выражение в скобках будет вычислено первым. В данном примере сначала будет получена разность 20 – 5, затем полученное значение будет умножено на 2, поделено на 30 и, напоследок, будет добавлена единица (результат равен 2). Скобки также могут быть использованы и в других случаях.

В &kturtle; также есть дополнительные математические функции в виде команд. Обратите внимание на следующие команды, но знайте, что речь идёт о сложных операциях: округли, случайное, sqrt , pi, sin, cos, tg, arcsin, arccos, arctg.

### Логические (истина/ложь) операторы

В то время как математические операторы используют числа, логические операторы используют логические значения (`истина` и `ложь`). Существует только три логических оператора, а именно: `и`, `или` и `не`. Следующий фрагмент кода &turtlescript; демонстрирует их использование:

    $и_1_1 = истина и истина  # -> истина
    $и_1_0 = истина и ложь    # -> ложь
    $и_0_1 = ложь и истина    # -> ложь
    $и_0_0 = ложь и ложь      # -> ложь

    $или_1_1 = истина или истина  # -> истина
    $или_1_0 = истина или ложь    # -> истина
    $или_0_1 = ложь или истина    # -> истина
    $или_0_0 = ложь или ложь      # -> ложь

    $не_1 = не истина  # -> ложь
    $не_0 = не ложь    # -> истина

С помощью инспектора можно увидеть значения, но мы также указали их в комментариях в конце каждой строки. `и` вернёт `истина`, только если обе стороны содержат `истина`. `или` вернёт `истина`, если хотя бы одна из сторон содержит `истина`, и `не` превращает `истина` в `ложь`, а `ложь` в `истина`.

Логические операторы выделяются розовым.

#### Несколько более сложных примеров

Рассмотрим следующий пример с `и`:

    $a = 1
    $b = 5
    если (($a < 10) и ($b == 5)) и ($a < $b) {
      напиши "привет"
    }

В этом фрагменте кода &turtlescript; результаты трёх операторов сравнения объединены операторами `и`. Это означает, что для печати «привет» все три сравнения должны вернуть «истина».

Пример с `или`:

    $n = 1
    если ($n < 10) или ($n == 2) {
      напиши "привет"
    }

В этом фрагменте кода &turtlescript; левая часть от `или` возвращает «истина», а правая часть — «ложь». Так как одна из сторон оператора `или` — «истина», этот оператор вернёт «истина» и будет напечатано «привет».

И, наконец, пример с `не`, меняющим «истина» на «ложь» и «ложь» на «истина»:

    $n = 1
    если не ($n == 3) {
      напиши "привет"
    } иначе {
      напиши "не привет ;-)"
    }

### Операторы сравнения

Рассмотрим простое сравнение:

    $ответ = 10 > 3

Здесь `10` сравнивается с `3` оператором «больше чем». Результатом сравнения является логическое значение `истина`, которое сохраняется в переменной `$ответ`.

Все числа и переменные (содержащие числа) можно сравнивать друг с другом при помощи операторов сравнения.

Здесь приведены все операторы сравнения:

#### Типы вопросов

`$A == $B` | равно | ответ истина если `$A` равно `$B`
`$A != $B` | не равно | ответ истина если `$A` не равно `$B`
`$A > $B` | больше чем | ответ истина если `$A` больше чем `$B`
`$A < $B` | меньше чем | ответ истина если `$A` меньше чем `$B`
`$A >= $B` | больше или равно | ответ истина если `$A` больше или равно `$B`
`$A <= $B` | меньше или равно | ответ истина если `$A` меньше или равно `$B`

Обратите внимание, что $A и $B должны быть числами или переменными с числами.

## Команды

Используя команды, вы указываете Черепашке или &kturtle; выполнить какое-то действие. Некоторым командам необходимы входные данные, некоторые выводят данные. В этом разделе мы опишем все встроенные команды &kturtle;. Используя команду выучи, вы можете создавать собственные команды. Описываемые здесь встроенные команды выделяются тёмно-синим.

### Двигаем Черепашку.

Существует несколько команд для перемещения Черепашки по экрану.

вперёд (вп)

      вперёд X

  `вперёд` перемещает Черепашку на X пикселов вперёд. Когда перо опущено Черепашка будет оставлять за собой след. `вперёд` также может записываться как `вп`.

назад (нд)

      назад X

  `назад` перемещает Черепашку назад на X пикселов. Когда перо опущено Черепашка будет оставлять за собой след. `назад` также может записываться как `нд`.

налево (лв)

      налево X

  `налево` предписывает Черепашке повернуть на X градусов налево. `налево` также может записываться как `лв`.

направо (пр)

      направо X

  `направо` предписывает Черепашке повернуть на X градусов направо. `направо` также может записываться как `пр`.

направление (нпр)

      направление X

  `направление` устанавливает направление Черепашки на X градусов относительно 0, а не относительно предыдущего направления. `направление` также может записываться как `нпр`.

получить_направление

      получить_направление

  `получить_направление` возвращает направление Черепашки в градусах относительно нуля, где нулём считает положение Черепашки смотрящей вверх.

центр

      центр

  `центр` перемещает Черепашку в центр холста.

иди

      иди X,Y

  `иди` предписывает Черепашке занять определённое место на холсте. Это место отстоит на X пикселей от левой границы и на Y пикселей от верхней границы холста.

иди_гор

      иди_гор X

  `иди_гор` используется для перемещения Черепашки на X пикселов от левой границы холста, высота остаётся неизменной.

иди_верт

      иди_верт Y

  `иди_верт` предписывает Черепашке переместиться на Y пикселей от верхней границы холста. Положение относительно левой границы остаётся неизменным.

При использовании команд `иди`, `иди_гор`, `иди_верт` и `центр` Черепашка не будет рисовать линию вне зависимости от того, поднято перо или опущено.

### Где Черепашка?

Существует две команды, возвращающие положение Черепашки на экране.

получить_гор

  `получить_гор` возвращает количество пикселей от левого края холста до текущей позиции Черепашки.

получить_верт

  `получить_верт` возвращает количество пикселей от верхнего края холста до текущей позиции Черепашки.

### У Черепашки есть перо

У Черепашки есть перо, которым она рисует линию во время перемещения. Есть несколько команд для управления пером. В данном разделе они будут описаны подробно.

перо_подними (пп)

      перо_подними

  `перо_подними` отрывает перо от холста. Пока перо оторвано, Черепашка не будет рисовать линию во время перемещений. См. также `перо_опусти`. `перо_подними` также может записываться как `пп`.

перо_опусти (по)

      перо_опусти

  `перо_опусти` опускает перо на холст. Когда перо опущено, Черепашка при перемещениях рисует линию. См. также `перо_подними`. `перо_опусти` также может записываться как `по`.

толщина_пера (тп)

      толщина_пера X

  `толщина_пера` устанавливает толщину пера (толщину линии) в X пикселов. `толщина_пера` также может записываться как `тп`.

цвет_пера (цп)

      цвет_пера R,G,B

  `цвет_пера` устанавливает цвет пера. В качестве параметров указывается RGB комбинация. `цвет_пера` также может записываться как `цп`.

### Команды для работы с холстом.

Существует несколько команд для работы с холстом.

размер_холста (рх)

      размер_холста X,Y

  `размер_холста` устанавливает размер холста. В качестве входных параметров задаются ширина X и высота Y в пикселах. `размер_холста` также может записываться как `рх`.

цвет_холста (цх)

      цвет_холста R,G,B

  `цвет_холста` устанавливает цвет холста. Входным параметром является RGB комбинация. `цвет_холста` также может записываться как `цх`.

### Команды очистки

Существуют две команды очистки холста.

очисти (очс)

      очисти

  `очисти` удаляет с холста все рисунки. Всё остальное останется по-прежнему: позиция и угол направления Черепашки, цвет холста, видимость Черепашки и размер холста.

сброс

      сброс

  `сброс` очищает больше, чем команда `очисти`. После выполнения команды `сброс` всё будет выглядеть так, как будто вы только что запустили &kturtle;. Черепашка будет расположена в центре экрана, цвет холста будет белым, и Черепашка будет рисовать чёрные линии на холсте размером 400 x 400 пикселей.

### Черепашка — это спрайт.

Большинство людей и понятия не имеют, что такое спрайты, так вот, спрайты — это маленькие картинки, которые можно перемещать по экрану. Так что Черепашка — это спрайт.

Ниже будет дано подробное описание всех команд работы со спрайтами.

[Текущая версия KTurtle пока не поддерживает использование спрайтов, отличных от Черепашки. В ближайшем будущем вы сможете заменить Черепашку на любой другой персонаж по собственному вкусу]

покажи (пж)

      покажи

  `покажи` делает Черепашку видимой после того, как она была скрыта. `покажи` также может записываться как `пж`.

спрячь (сч)

      спрячь

  `спрячь` скрывает Черепашку. Это полезно, когда Черепашка не уместна в ваших рисунках. `спрячь` также может записываться как `сч`.

### Черепашка может писать?

Черепашка может написать всё, что вы ей прикажете.

напиши

      напиши X

  `напиши` используется для указания Черепашке написать что-либо на холсте. В качестве входных параметров можно передавать строки или числа. Вы можете печатать различные числа и строки, комбинируя их вместе оператором +. Вот маленький пример:

      $год = 2003
      $автор = "Cies"
      напиши $автор + " начал проект KTurtle в " + $год + " и до сих пор получает удовольствие от работы над ним!"

размер_шрифта

      размер_шрифта X

  `размер_шрифта` устанавливает размер шрифта, используемый для печати. Входной параметр один. Он должен быть числом. Размер задаётся в пикселах.

### Математические команды

Далее перечислены дополнительные математические команды &kturtle;.

округли

      округли(x)

  `округли` заданное число до ближайшего целого.

      напиши округли(10.8)
      вперёд 20
      напиши округли(10.3)

  Выполняя этот код, Черепашка напечатает числа 11 и 10.

случайное (слч)

      случайное X,Y

  `случайное` — команда, которая имеет входные и выходные параметры. На входе требуются два числа. Первое (X) задаёт нижний порог получаемых чисел, второе (Y) задаёт верхний порог. На выходе получается псевдослучайное число, которое не меньше минимума и не больше максимума. Вот маленький пример:

      повтори 500 {
        $x = случайное 1,20
        вперёд $x
        налево 10 - $x
      }

  Используя команду `случайное`, вы можете привнести немного хаоса в вашу программу.

остаток

      остаток X,Y

  `остаток` возвращает остаток после деления первого числа на второе.

sqrt

      sqrt X

  `sqrt` используется для поиска квадратного корня от числа X.

pi

      pi

  Эта команда возвращает константу Пи, `3.14159`.

sin
, cos
, tg

      sin X
      cos X
      tg X

  Эти три команды представляют всемирно известные тригонометрические функции `sin`, `cos` и `tg`. Входной аргумент этих команд, X, является числом.

arcsin
, arccos
, arctg

      arcsin X
      arccos X
      arctg X

  Вот список обратных тригонометрические функций для sin, cos и tg. Входной аргумент этих функций, X, является числом.

### Взаимодействие через диалоги

Диалог — маленькое окно, которое обеспечивает обратную связь или запрашивает ввести что-либо. В &kturtle; есть две команды для диалога: `сообщение` и `спроси`

сообщение

      сообщение X

  Команде `сообщение` требуется передать строку, она будет показана в появившемся окне.

      сообщение "Cies начал KTurtle в 2003 сих пор получает удовольствие от работы над ним!"

спроси

      спроси X

  `спроси` принимает на вход строку. Она показывает эту строку во всплывающем диалоге (как и команда сообщение), а также она показывает поле ввода. После того, как пользователь ввёл число или строку, это значение может быть сохранено в переменной или передано как аргумент команде. Например:

      $вход = спроси "В каком гору ты родился?"
      $выход = 2003 - $вход
      напиши "В 2003 тебе было " + $выход + " лет."

  Если пользователь ничего не введёт или просто закроет диалог, то переменная будет пустой.

## Назначение переменных

Вначале рассмотрим переменные, а затем присвоение значений переменным.

Переменные — это слова, начинающиеся с символа $. В редакторе кода они выделяются фиолетовым.

Переменные могут содержать числовые, строковые или логические (истина/ложь) значения. Значение присваивается переменной с использованием символа `=`. Переменные хранят значения до завершения программы или до того момента, как в переменную будет записано новое значение.

После присвоения значения переменной, вы сможете использовать это значение. Например, в следующем фрагменте кода &turtlescript;:

    $x = 10
    $x = $x / 3
    напиши $x

Сперва переменной `$x` присваивается значение `10`. Далее переменной `$x` присваивается новое значение её самой, разделённой на `3`. Фактически это означает, что переменной `$x` будет присвоен результат `10 / 3`. В конце значение переменной `$x` распечатывается. В строках используется содержимое переменной `$x`.

Для того чтобы использовать переменную, её надо предварительно назначить. Например:

    напиши $n

Даст сообщение об ошибке.

Рассмотрим следующий фрагмент кода &turtlescript;:

    $a = 2004
    $b = 25

    # следующая команда напечатает "2029"
    напиши $a + $b
    назад 30
    # следующая команда напечатает "2004 плюс 25 равно 2029"
    напиши $a + " плюс " + $b + " равно " + ($a + $b)

В первых двух строках переменные `$a` и `$b` устанавливаются равными 2004 и 25. Далее выполняются две команды `напиши` и, между ними, команда `назад 30`. Комментарии перед `напиши` объясняют, что будет напечатано. Команда `назад 30` используется здесь для уверенности в том, что каждая новая печать на холст будет на новой строке. Как видите, переменные используются точно также, как и их содержимое — совместно с любыми операторами или как входные данные при вызове команд.

Ещё пример:

    $имя = спроси "Как тебя зовут?"
    напиши "Привет " + $имя + "! Удачи в изучении искусства программирования..."

Простой и понятный пример. Переменная `$имя` рассматривается как строка.

Инспектор очень сильно помогает при использовании переменных. Он отображает содержимое всех используемых в данный момент переменных.

## Контроль над выполнением

Управляющие операторы позволяют вам контролировать процесс выполнения (о чём говорит само их название).

Управляющие операторы выделяются тёмно-зелёным цветом и жирным начертанием шрифта. Скобки, используемые вместе с ними, выделяются чёрным.

### Может ли Черепашка ждать?

Если вы уже немного попрактиковались в программировании в &kturtle;, вы могли заметить, что Черепашка может рисовать чересчур быстро. Следующая команда позволяет избежать этого.

жди

      жди X

  Команда `жди` указывает Черепашке подождать X секунд.

      повтори 36 {
        вперёд 5
        направо 10
        жди 0.5
      }

  Данный код рисует круг, при этом после каждого шага Черепашка будет ждать пол секунды. Это создаёт впечатление неторопливого движения.

### Условное выполнение: «если»

если

      если логическое значение { ... }

  Код, расположенный между скобками, будет выполнен только `если` в результате вычисления логического значения получится истина.

      $x = 6
      если $x > 5 {
        напиши "$x больше пяти!"
      }

  В первой строке контейнеру `$x` присваивается значение 6. Во второй строке оператор сравнения используется для вычисления `$x > 5`. Если ответом на него будет истина, 6 больше чем 5, управляющий оператор `если` позволит выполнить код, расположенный между скобками.

### Если нет, другими словами: «иначе»

иначе

      если логическое значение { ... } иначе { ... }

  `иначе` может быть дополнением к оператору условного выполнения `если`. Код между скобками, расположенными после `иначе` будет выполнен тогда, когда логическое выражение будет ложь.

      сброс
      $x = 4
      если $x > 5 {
        напиши "$x больше пяти!"
      }
      иначе
      {
        напиши "$x меньше пяти!"
      }

  Оператор сравнения вычисляет выражение `$x > 5`. Так как 4 не больше, чем 5, результатом будет ложь. Это означает, что будет выполнен код между скобками после `иначе`.

### Цикл «пока»

пока

      пока логическое значение { ... }

  Управляющий оператор `пока` очень похож на `если`. Разница в том, что `пока` будет повторять код, расположенный между скобками, до тех пор, пока логическое выражение не выдаст значение ложь.

      $x = 1
      пока $x < 5 {
        вперёд 10
        жди 1
        $x = $x + 1
      }

  В первой строке `$x` присваивается 1. На второй строке выполняется сравнение `$x < 5`. Так как получаемое значение — истина, оператор `пока` начнёт выполнять код между скобками, пока не будет получена ложь. В данном случае код между скобками будет выполнен 4 раза, потому что на каждом прогоне в пятой строке `$x` будет увеличиваться на 1.

### Цикл «повтори»

повтори

      повтори число { ... }

  Управляющий оператор `повтори` похож на `пока`. Разница в том, что `повтори` повторяет код в скобках заданное число раз.

### Считающий цикл «для»

для

      для переменная = число до число { ... }

  Цикл `для` — это цикл со счётчиком, то есть он сохраняет счётчик для вас. Первое число задаёт значение для первого прохода. С каждым проходом это значение увеличивается до того момента, пока не достигнет второго числа.

      для $x = 1 до 10 {
        напиши $x * 7
        вперёд 15
      }

  Каждый раз, когда выполняется код в скобках, значение `$x` увеличивается на 1, и так до тех пор, пока `$x` не станет равным 10. Код в скобках выводит на печать произведение `$x` и 7. После завершения выполнения программы вы увидите на холсте таблицу умножения на 7.

  По умолчанию, шаг цикла равен 1. Вы можете задать другой шаг цикла с помощью

      для переменная = число до число шаг шаг { ... }

### Выход из цикла

прекрати

      прекрати

  Немедленно завершает выполнение текущего цикла и передаёт управление оператору, следующему сразу после этого цикла.

### Остановка выполнения программы

закончить

      закончить

  Заканчивает выполнение программы.

## Создавайте свои собственные команды!

Команда `выучи` — это особенная команда, потому что она предназначена для создания ваших собственных команд. Создаваемые вами команды могут принимать входные параметры и возвращать различные значения. Давайте посмотрим, как создаются собственные команды:

    выучи круг $x {
      повтори 36 {
        вперёд $x
        налево 10
      }
    }

Новая команда называется `круг`. Команда `круг` принимает один входной аргумент для задания размера круга. Команда `круг` ничего не возвращает. Теперь команду `круг` можно использовать как же, как и обычные команды:

    выучи круг $X {
      повтори 36 {
        вперёд $X
        налево 10
      }
    }

    иди 200,200
    круг 20

    иди 300,300
    круг 40

В следующем примере будет создана команда, возвращающая значение.

    выучи факториал $x {
      $r = 1
      для $i = 1 до $x {
        $r = $r * $i
      }
      верни $r
    }

    напиши факториал 5

В данном примере создана новая команда с именем `факториал`. Если на вход этой команде подать `5`, то на выходе будет произведение `5*4*3*2*1`. При использовании `верни` будет задано выходное значение и оно будет возвращено при выполнении.

У команды может быть более одного входа. В следующем примере создаётся команда, рисующая прямоугольник:

    выучи прямоугольник $x, $y {
      вперёд $y
      направо 90
      вперёд $x
      направо 90
      вперёд $y
      направо 90
      вперёд $x
      направо 90
    }

Теперь вы можете дать команду `прямоугольник 50, 100` и Черепашка нарисует на холсте прямоугольник.