Новые лямбда-операторы для больше гибкости в разработке шаблонов
06.05.19
Недавно в была заметка с описанием новых операторов и выражений Blogger, позволяющих использовать в шаблоне математические/логические выражения и некоторые другие конструкции. Это позволяло более гибко настраивать внешний вид и логику работы вашей темы. Данное нововведение было тепло принято продвинутыми разработчиками, поэтому создатели платформы решили внедрить еще одну вещь.
Новая фишка получила название лямбда-выражения. С ее помощью сможете применять те или иные правила ко всем наборам данных: комментариям, меткам, постах блога и т.п., а не только определенным конкретным объектам.
Проще понять это будет на примере. Допустим, вам понадобилось добавить изображение/превью цветка для всех записей, где встречается соответствующая метка (Flower). Применяя лямбда-выражения сначала определяете имя переменной, которая будет соответствовать каждому элементу в наборе, а затем выполняете с ней какое-то действие словно делаете его с каждым из элементов.
Звучит не особо понятно. По логике мне отдаленно напоминает переобход массива через foreach в PHP. Вот как выглядит соответствующий код для лямдба-выражения «any» в Blogger:
<!-- Show a Flower image if the post has the label flower -->
<b:if cond='data:post.labels any (l => l.name == "Flower")'>
<img src=’/img/flower.jpg’ />
<b:if/>
Здесь видим, что в переменная l соответствует меткам (data:post.labels), и для их имени l.name проводится сравнение с фразой «Flower». На сайте отобразится что-то вроде:
С помощью этой фишки вы можете делать абсолютно разные вещи: отображать количество постов с определенными числом комментариев (нулевых или нет, например); выводить в RSS фид только посты с определенной меткой, фильтруя нежелательный контент.
Синтаксис и лямбда операторы
[set of items] [lambda operator] ([lambda expression])
Сначала определяете набор элементов, зачем сам лямбда-оператов, а дальше выражение/действие. На самом деле кроме any тут есть много других вариантов:
- any — возвращает любой объект из списка, для которого справедливо выражение;
- all — справедливо, если все элемент набора отвечают вашему правилу;
- none — противоположная фишка предыдущей — true, когда ни один объект не соответствует заданной формуле;
- count — возвращает общее число элементов, где заданное выражение = true;
- filter — отдает набор объектов, у которых лямбда-вырежение правдиво;
- map — если я правильно понял, содержит список всех результатов;
- first — первый элемент, для которого формула = true.
После такой информации, думаю, вам стало чуть понятнее что да как. Как видите, инструмент с этими лямбдами получился весьма интересный. Это может однозначно добавить гибкости при разработке Blogger шаблонов и добавлении оригинальных функций в них.