Виртуальные методы в PROScript
Виртуальные методы — это встроенные функции, которые позволяют работать с данными напрямую: изменять строки, фильтровать массивы, получать значения из объектов и другое. Методы можно применять неоднократно, вызывая их один за другим.
Методы вызываются через . после значения или переменной. Например:
[% name = ‘Sendsay’ %]
[% name.length() %]
Результат:
7
Виртуальные методы делают код компактнее и понятнее, а также позволяют выполнять операции без дополнительных циклов и проверок.
В этой статье собраны часто используемые методы для разных типов данных.
Виртуальные методы для работы со строками
Эти методы помогают анализировать и изменять текстовые значения.
list
Преобразует строку в массив из одного элемента. В примере используется функция dump() — она выводит значение полностью, чтобы можно было увидеть структуру данных.
[% dump('qwerty'.list()) %]
[% 'qwerty'.list().size() %]
Результат:
[ "qwerty" ]
1
hash
Возвращает хеш-объект, где строка хранится как значение.
[% dump('aaaa'.hash()) %]
Результат:
{ "value" : "aaaa" }
length
Возвращает длину строки.
[% 'aaaa'.length() %]
Результат:
4
size
Всегда возвращает 1 для любой строки или переменной с типом "строка" (string).
[% 'text'.size() %]
Результат:
1
defined
Проверяет, определена ли переменная. Возвращает true или false.
[% name = 'Sendsay' %]
[% name.defined() %]
Результат:
true
match
Ищет в строке совпадения по регулярному выражению. Регулярное выражение — это специальный шаблон для поиска текста. Используя его, можно находить слова, цифры, фрагменты текста по определённым правилам. В примере используется регулярное выражение (\w+) (\w+) — две группы слов, разделённые пробелом.
[% name = 'Larry Wall' %]
[% matches = name.match('(\w+) (\w+)') %]
[% matches.1 %], [% matches.0 %]
Результат:
Larry, Wall
Если совпадений нет, метод вернёт false.
repeat
Повторяет строку указанное количество раз.
[% name = 'foo' %]
[% name.repeat(3) %]
Результат:
foofoofoo
replace
Заменяет все подходящие фрагменты на новое значение.
[% name = 'foo, bar & baz' %]
[% name.replace('\W+', '_') %]
Результат:
foo_bar_baz
remove
Удаляет все части строки, соответствующие заданному фрагменту.
[% name = 'foo, bar & baz' %]
[% name.remove('\W+') %] # foobarbaz
Результат:
foobarbaz
split
Разделяет строку на массив по указанному в функции символу.
[% dump('2018-09-06'.split('-')) %]
Результат:
[ "2018", "09", "06" ]
chunk
Превращает строку в массив указанной длины.
[% ccard_no = "1234567824683579";
dump(ccard_no.chunk(4));
ccard_no.chunk(4).join()
%]
Результат:
1234 5678 2468 3579
substr (p,l)
Возвращает подстроку указанной длины (l) начиная с определённой позиции (p).
[% str='foo bar baz wiz waz woz' %]
[% str.substr(4, 3) %]
Результат:
bar
Виртуальные методы для работы с массивами
Эти методы применяются к массивам — чтобы получать, изменять или сортировать элементы.
Перед началом работы массив нужно инициализировать:
[% array = [] %]
В примерах используются следующие массивы:
[% a1=[1,3,5,223,44,322,404,2,25] %]
[% a2=[1,3,5,223,44,322,44,2,2,44,3,33,44543,443] %]
[% a3=[44,322,44,2,2,44,33,33,443,443] %]
Нумерация элементов массива начинается с 0.
Методы, изменяющие массивы, не изменяют данные подписчика, а работают только с переменными внутри письма.
join
Выводит элементы массива в строку с указанным разделителем (по умолчанию — пробел).
[% items = ['foo','bar','baz'] %]
[% items.join(', ') %]
Результат:
foo, bar, baz
Обратиться к элементу массива по индексу
[% a3.item(1) %]
[% a3[1] %]
[% a3.1 %]
Результат:
322
first и last
Возвращают первый и последний элементы массива.
[% a2.first() %]
[% a3.last() %]
Или более короткий вариант:
[% a2.[0] %]
[% a3.[-1] %]
Результат:
1
443
Можно указать количество элементов:
[% a2.first(3) %]
[% a1.last(5) %]
Результат:
1 3 5
44 322 404 2 25
hash
Преобразует массив в объект, где чётные элементы становятся ключами, а нечётные — значениями.
[% list = ['pi', 3.14, 'e', 2.718] %]
[% dump(list.hash()) %]
[% list.hash().pi %]
[% list.hash().e %]
Результат:
{ "pi": 3.14, "e": 2.718 }
3.14
2.718
push и unshift
Добавляют элементы в конец (push) или в начало (unshift) массива. Исходный массив изменяется.
[% array = [1,2,3,4,5] %]
[% array.push(6,7) %]
[% array.unshift(-2,-1) %]
Результат:
-2 -1 1 2 3 4 5 6 7
shift и pop
Удаляют первый (shift) или последний (pop) элемент массива. Методы возвращают удалённый элемент.
Пример для (shift):
[% array = [1,2,3,4,5] %]
Удалённый: [% array.shift() %]
После удаления: [% array.join() %]
Результат:
Удалённый: 1
После удаления: 2 3 4 5
Пример для (pop):
[% array = [1,2,3,4,5] %]
Удалённый: [% array.pop() %]
После удаления: [% array.join() %]