Коллекции (множества)
Коллекциями называют множества объектов. Вообще-то объекты, как Вы наверное помните, тоже почти являются множествами объектов,
но элементы объекта внутри него получают новые имена, а элементы коллекции вообще могут не иметь имён. Коллекция - это множество
произвольных объектов в буквальном смысле слова. Коллекции особенно важны для построения анимаций.
А сейчас давайте потренируемся создавать коллекции и посмотрим, как это работает.
Чтобы создать коллекцию, сначала надо создать пустую коллекцию, т.е. коллекцию, в которой нет ни одного объекта. Делается это при помощи команды
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(); - этот метод удаляет все объекты из коллекции и делает коллекцию пустой.
Чтобы создать коллекцию, сначала надо создать пустую коллекцию, т.е. коллекцию, в которой нет ни одного объекта. Делается это при помощи команды
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(); - этот метод удаляет все объекты из коллекции и делает коллекцию пустой.