Посмотрите на фигуры справа. На первый взгляд кажется, нарисовать их в Лого легко мы уже умеем писать процедуры для любых правильных многоугольников, умеем собирать сложную конструкцию из простых модулей, знаем команду повтори. Но наши процедуры описывают один конкретный объект например, квадрат с длиной стороны 60 шагов или окружность радиуса 70. В этих же фигурах повторяются не совсем одинаковые элементы. В первом случае повторяющиеся элементы квадраты, но они различаются длиной стороны. Во втором случае это 6-угольники, но они также различаются длиной стороны.
Можем ли мы одной процедурой описать множество объектов?
Лого не был бы популярным языком программирования, если бы в этих случаях заставлял нас опять и опять описывать процедуру, отличающуюся только тем, что команда перемещения (forward) имеет разные значения параметра.
Действительно, для перемещения Черепашки на разные расстояния мы используем одну команду forward, но меняем значения ее параметра. Мы можем дать команду forward 100 или forward 40. Также для поворота на разные углы Черепашки мы используем команды rt, lt или seth, меняя значения параметров. Описывая какую-либо процедуру, мы тем самым расширяем словарь Черепашки, которым она владеет от рождения (слова этого словаря называются примитивами); имя процедуры становится новой командой, известной Черепашке. Точно также эта новая команда может иметь параметр. В качестве параметра выбирают то, что может меняться, оставляя объект тем, чем он является. Для квадрата это длина стороны. Число вершин или значение угла при вершине менять нельзя, иначе квадрат перестанет быть квадратом. Если же в качестве объекта рассматривать правильный многоугольник с длиной стороны, например, 20, то изменяемой характеристикой является число вершин (сторон). У окружностей это радиус, у цветных 6-угольников с длиной стороны 30 шагов цвет. Какую характеристику объекта выбрать в качестве параметра, зависит от конкретной решаемой задачи. И вы, наверное, уже догадались, что объект может иметь несколько изменяемых характеристик и, соответственно, процедура несколько параметров. Но об этом позже.
Как и для любой процедуры, работа с процедурой с параметром проходит два этапа описание процедуры и ее вызов на выполнение. При описании процедуры с параметром параметр обязательно указывается в строке заголовка после имени процедуры. (Не забывайте про пробел!) Параметр можно обозначать любым набором символов, перед которым ставится : (без пробела!). При вызове процедуры с параметром надо обязательно указать конкретное значение параметра. Значение можно указать в виде числа или арифметического выражения, также как мы делали это раньше для команд-примитивов. Если же при вызове процедуры параметр не будет указан, то появится сообщение об ошибке… Если не догадались, какое именно, полистайте странички назад.
Рассмотрим, как работает процедура с параметром на примере квадрата.
Описание: to square :side |
Вызов/результат square 60 |
Вызов/результат square 20
|
Вызов/результат square 40 |