Курс Raku / Розширені / Контейнери / Контексти 🆕

Числовий, рядковий та логічний контекст

Три дуже поширені контексти просять значення повестися як число, як рядок або як булеве значення. Кожен має префіксний оператор, що задає його явно:

  • + — числовий контекст
  • ~ — рядковий контекст
  • ? — булевий контекст

Застосовані до масиву, вони дають його довжину, його елементи, з’єднані пробілами, і те, чи є в ньому взагалі елементи:

my @a = 1, 2, 3;

say +@a; # 3
say ~@a; # 1 2 3
say ?@a; # True

Порожній масив у числовому контексті дорівнює 0, а в булевому — False:

my @empty;
say +@empty; # 0
say ?@empty; # False

Писати ці оператори вручну щоразу не потрібно, бо мова може накинути потрібний контекст за вас. Арифметика ставить свої операнди в числовий контекст, конкатенація — у рядковий, а if, while та and/or ставлять свою умову в булевий контекст:

my @a = 1, 2, 3;

say 10 + @a;              # 13, тут @a це його довжина: 3
say 'items: ' ~ @a;       # items: 1 2 3
if @a { say 'not empty' } # not empty

Тож if @array { … } працює саме так, як ви й сподівалися: непорожній масив є істинним. Префіксні оператори — це явний спосіб попросити те саме перетворення.

У поєднанні з постфіксним if це дозволяє писати справді виразний код:

say "{+@a} items are there" if @a; # 3 items are there

Практика

Виконайте 1 тест за змістом цієї теми.

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

Контексти 🆕   |   Тест — Контексти


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