PGroup.empty представляет пустой набор.Вы можете использовать PGroup.empty в качестве отправной точки для создания большего числа наборов.
Что делает эту конкретную реализацию PGroup интересной, так это то, что методы add
и delete
не изменяют существующий экземпляр PGroup, который вы 'работает на.Вместо этого add
и delete
возвращают совершенно новые экземпляры PGroup.Это означает, что каждый раз, когда вы добавляете или удаляете элемент из уже имеющейся у вас PGroup, вы создаете совершенно новый экземпляр PGroup, а не изменяете существующий экземпляр PGroup.
Использование этого шаблона означает, что задан пустой набор (в нашем случае PGroup.empty), мы можем создать целую кучу других PGroups, даже не используя явно ключевое слово new
.В частности, если бы мы хотели получить набор ['a', 'b', 'c']
, мы могли бы сделать следующее:
let abc = PGroup.empty.add('a').add('b').add('c');
Более того, поскольку сам экземпляр PGroup.empty
не изменяется при вызове для него метода add
, вы можете использовать повторно один и тот же экземпляр PGroup.empty
сколько угодно раз.
let xyz = PGroup.empty.add('x').add('y').add('z');
let efg = PGroup.empty.add('e').add('f').add('g');
Этот аспект неизменности позволяет нам выполнить следующее требование:
Конструктор долженне является частью интерфейса класса
Вместо этого мы можем использовать add
и delete
для создания большего количества экземпляров PGroup.
Технический термин, обозначающий add
и delete
создание нового экземпляра PGroup вместо изменения существующего экземпляра PGroup называется неизменность .