Курс языка программирования Raku / Продвинутый уровень / Контейнеры / Наречия индексации

Существование и удаление

Наречие :exists превращает обращение по индексу в вопрос: есть ли значение по данному ключу или индексу? Оно возвращает булево значение, не извлекая сами данные:

my %h = apple => 1, pear => 2;

say %h<apple>:exists; # True
say %h<plum>:exists;  # False

Это правильный способ проверить наличие ключа, потому что простое чтение %h<plum> вернуло бы неопределённое значение или, в зависимости от данных, скрыло бы разницу между «отсутствует» и «присутствует, но не определён».

Наречие :delete удаляет запись и возвращает значение, которое она содержала:

my %h = apple => 1, pear => 2;

say %h<apple>:delete; # 1
say %h.keys;          # (pear)
say %h;               # {pear => 2}

Запись apple удалена, а удалённое значение 1 возвращается обратно, чтобы вы могли его использовать.

Оба наречия работают и с массивами — по индексу:

my @a = 10, 20, 30;

say @a[1]:exists; # True
say @a[5]:exists; # False

say @a[1]:delete; # 20
say @a[1]:exists; # False

Если вам интересно, как будет выглядеть массив после удаления элемента из середины, вот ответ:

say @a; # [10 (Any) 30]

Таким образом, единая согласованная нотация позволяет запрашивать и изменять контейнеры на месте, не прибегая к отдельным методам.

Практика

Пройдите 1 тест по содержанию этой темы.

Навигация по курсу

Наречия индексации   |   Тест — Наречия индексации


💪 Или перейдите сразу к упражнениям этого раздела.