136 Глава 7. Наборы на любой вкус
Словари
Класс Dictionary представляет ассоциативные массивы (словари), храня-
щие значения в связи с некоторым уникальным (в пределах словаря) объ-
ектом — ключом. Доступ к значениям словаря осуществляется по ключам.
По традиции, восходящей к Smalltalk-80, Dictionary реализуется как
множество, элементы которого — ассоциативные пары (экземпляры клас-
са Association)
1
. Природа ассоциативного массива находит отражение и
в протоколе сообщений этого класса. Сообщения includes:, do:, select:,
occurencesOf: переопределяются так, чтобы иметь дело со значениями сло-
варей, а не с ключами или самими парами. Напротив, сообщения at:, at:put:
переопределяются так, чтобы обращаться к ключам ассоциативных пар.
А сообщение add: переопределяется так, чтобы работать с самими ассо-
циативными парами. Так как при обращении к элементам словаря обяза-
тельна ссылка на ключ, основной метод remove:ifAbsent: определяется как
недопустимый и его функции передаются методам removeKey: ifAbsent: и
removeKey:.
Кроме того, протокол работы по поиску, перечислению и удалению в
словаре расширяется для взаимодействия как с самими парами, так и с их
ключами и значениями. Обратите внимание на то, что возвращает каждый
из перечисленных ниже методов.
Класс Dictionary Протокол экземпляра
at: aKey ifAbsent: aBlock Возвращает значение ассоциативной пары получателя c
заданным ключом aKey; если пары с таким ключом нет, возвращает ре зультат
выполнения блока aBlock.
associationAt: aKey Возвращает ассоциативную пару с заданным ключом aKey; ес-
ли ключ не найден, сообщает об ошибке.
associationAt: aKey ifAbsent: aBlock Возвращает ассоциативную пару с заданным
ключом aKey; если ключ не найден, возвращает результат выполнения блока
aBlock.
associationsDo: aBlock Возвращает получателя. Для каждой ассоциативной пары
выполняет одноаргументный блок aBlock с этой парой как аргументом.
includesKey: aKey Возвращает true, когда получатель содержит ассоциативную па-
ру с ключом, равным аргументу aKey; иначе возвращает false.
keyAtValue: value Возвращает первый ключ, найденный по значению value; если
такового нет, возвращает nil.
1
Ассоциативные пары — это деталь, зависящая от реализации, и некоторые но-
вые реализации содержат словари, использующие другие техники хранения. Там
весь протокол, имеющий дело с ассоциативными парами, отсутствует.