Уроки и упражнения



Коллекции (множества)

Коллекциями называют множества объектов. Вообще-то объекты, как Вы наверное помните, тоже почти являются множествами объектов, но элементы объекта внутри него получают новые имена, а элементы коллекции вообще могут не иметь имён. Коллекция - это множество произвольных объектов в буквальном смысле слова. Коллекции особенно важны для построения анимаций. А сейчас давайте потренируемся создавать коллекции и посмотрим, как это работает.
Чтобы создать коллекцию, сначала надо создать пустую коллекцию, т.е. коллекцию, в которой нет ни одного объекта. Делается это при помощи команды

ccc = Set();

Теперь, после этой команды пустая коллекция создана и ccc - её имя. Пусть теперь obj - произвольный объект. При помощи команды

ccc.addu(obj);

мы добавляем к коллекции ccc объект с именем obj и теперь уже коллекция ccc не является пустой: в ней уже имеется один объект. Давайте перейдём в редактор, создадим пустую коллекцию и добавим к ней три примитивных объекта, а именно числа 1, 2 и 3:

ccc = Set();
ccc.addu(1);
ccc.addu(2);
ccc.addu(3);

Теперь наша коллекция содержит три объекта, а именно числа 1, 2 и 3. Но как нам это увидеть? Как нам убедиться, что множество ccc действительно состоит ровно из этих трёх элементов. Для этого имеется метод foreachu этот метод позволяет перебрать все элементы коллекции и выполнить с каждым из них любые действия. Вот как это делается:

ccc.foreachu(each){
 show(each);
};


В этом фрагменте использовано имя each как имя любого объекта из коллекции, для того, чтобы можно было написать ту команду или команды, которые нужно выполнить с каждым объектом коллекции. Вместо имени each тут можно было бы использовать любое слово. Попробуйте также сделать такое упражнение:

ccc = Set();
ccc.addu({x: 0, y: 1});
ccc.addu({x: 3, y: 33});
ccc.addu({x: 45, y: -22});
ccc.foreachu(each){
 show(each.x);
 show(each.y);
};


В этом упражнении мы добавили к пустой коллекции три уже не примитивных объекта, а именно три вектора, а затем вывели в консоль компоненты всех трёх векторов.
Как мы уже упоминали, коллекции особенно полезны и важны для анимаций, т.е. для создания меняющихся изображений, как в кино. если вы хотите динамически изменять картинку, вы должны ее полностью перерисовывать. Например, если на фоне какого-то изображения движется фигурка, то не только фигурку, но и всё изображение необходимо перерисовывать при каждом изменении положения фигурки. Для перерисовки, все элементы изображения необходимо держать в памяти программы. Для этого используются коллекции. В следующем примере мы создадим коллекцию матриц. Каждая матрица, как вы наверное помните задаёт пару точек - концы отрезка. Чтобы задать отрезок, нужно ещё задать толщину линии и цвет. Итак:

pair = {x:,y:};
sss = Set();

pic = function(){
   =sss.addu( pair(pair(0,0),pair(2,1)));
   =sss.addu(pair(pair(3,4),pair(2,1)));
   =sss.addu(pair(pair(3,4),pair(-2,5)));
   =sss.addu(pair(pair(-3,-3),pair(-2,5)));
   =sss.addu(pair(pair(-3,-3),pair(-4,2)));
   =sss.addu(pair(pair(0,0),pair(-4,2)));
   =sss.foreachu(eachline){
      draw.line(eachline, 2, 'red');
   };
};

=pic();

В этом фрагменте мы добавляем к коллекции sss пять матриц, каждая из которых фиксирует начальную и конечную точки отрезка. Затем мы запускаем процесс рисования всех этих отрезков, задав для всех одну и ту же толщину (в данном случае 2) и один и тот же цвет (в данном случае красный). Для удобства все эти операции мы объединили в одну функцию pic, запуская эту функцию мы можем воспроизвести в любой момент рисунок, который хранится в коллекции sss. Если бы на фоне этого рисунка происходила некоторая динамика, мы при каждом изменении могли бы перерисовывать рисунок, обращаясь к функции pic.
Коллекции являются встроенными объектами, как, например, слова. У коллекций имеются методы, с двумя из которых мы уже познакомились:

sss.addu();
sss.foreachu(){};
Кроме этих методов имеются ещё следующие:

sss.hasu(); - в этот метод в качестве аргумента передаётся произвольный объект, а возвращается true или false в зависимости от того, есть ли такой объект в коллекции:
sss.deleteu(); - этот метод удаляет объект из коллекции,
sss.clearu(); - этот метод удаляет все объекты из коллекции и делает коллекцию пустой.
Проектирование/Окно программирования
Your browser does not support the HTML5 canvas tag.