Курс 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 тест за змістом цієї теми.

Навігація курсом

Адверби індексів 🆕   |   Тест — Адверби індексів


💪 Або перейдіть одразу до вправ цього розділу.