Курс языка программирования 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, here @a is its length: 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 тест по содержанию этой темы.

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

Контексты   |   Тест — Контексты


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