Ограничение области видимости блока с with
Сужайте точку до поддерева и учитывайте подводные камни
«Ограничение области видимости блока с with» — бесплатный урок Helm Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Helm Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Helm Academy содержит 4 уроков всего.
Перестаньте повторять длинные пути
Постоянное повторение .Values.image.repository делает шаблон перегруженным. Действие with сужает область действия точки до поддерева, позволяя записывать более короткие пути.
Действие with
Блок with начинается с {{ with SOMETHING }} и завершается {{ end }}. Внутри него точка сбрасывается на переданное значение.
{{ with .Values.image }}
repository: {{ .repository }}
tag: {{ .tag }}
{{ end }}Точка перемещается внутрь
Внутри блока .repository означает .Values.image.repository. Ключевое слово with заново привязывает точку к поддереву, сокращая все пути внутри него.
image:
repository: nginx
tag: "1.27"Одновременно это защита
Если значение является пустым или отсутствует, with пропускает весь свой блок. Таким образом, with одновременно задаёт область видимости точки и работает как if. 🛡️
Добавление ветви else
Как и if, with принимает ветвь else. Ветвь else отображается, когда значение пусто, предоставляя аккуратный запасной вариант для необязательной конфигурации.
{{ with .Values.resources }}
resources:
{{ toYaml . | indent 2 }}
{{ else }}
# no resources set
{{ end }}Проблема с областью видимости
Вот ловушка: внутри with точка больше не обозначает корень. Поэтому .Release.Name не работает: Release находится не в этом поддереве.
Обращение к корню через $
Чтобы использовать корневые значения внутри with, добавляйте перед ними $. Символ доллара всегда указывает на исходный корневой контекст, независимо от глубины вложенности.
{{ with .Values.image }}
name: {{ $.Release.Name }}
image: {{ .repository }}
{{ end }}Делайте блоки небольшими
Поскольку with перехватывает точку, большие блоки быстро становятся непонятными. Делайте разделы with короткими, чтобы было очевидно, на что указывает точка.
with и if
Используйте if, когда нужно только проверить флаг, а with — когда нужно также перейти внутрь этого значения. with изменяет точку, а if оставляет её без изменений.
Просмотр области видимости
Не уверены, что содержит точка? Выполните рендеринг с помощью helm template и изучите результат или выведите область видимости при отладке сложного блока with.
helm template ./mychartВложенные блоки with
Можно вложить with в другой with, чтобы перейти на более глубокий уровень. Каждый уровень перемещает точку ещё на один шаг вниз, поэтому следите за текущим контекстом.
{{ with .Values.image }}
{{ with .pullSecrets }}
# . is now pullSecrets
{{ end }}
{{ end }}Быстрая проверка
Внутри блока {{ with .Values.image }} вы пытаетесь прочитать .Release.Name, но значение оказывается пустым.
Итоги
Теперь вы умеете задавать область видимости точки с помощью with, автоматически проверять пустые значения, добавлять запасной вариант else и обращаться к корню через $. Более чистые шаблоны! 🎯
Часто задаваемые вопросы
Урок «Ограничение области видимости блока с with» бесплатный?
Да — полный текст урока «Ограничение области видимости блока с with» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Helm Academy, подпишись на CoddyKit PRO. Курс Helm Academy содержит 4 уроков всего.
Чему я научусь в уроке «Ограничение области видимости блока с with»?
Сужайте точку до поддерева и учитывайте подводные камни Ты практикуешь Helm Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Helm Academy?
Предыдущий опыт не требуется. Helm Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Ограничение области видимости блока с with»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Helm Academy?
Да. Каждый урок Helm Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Условные блоки с if и else
- Истинность и операторы в условиях
- Циклы по спискам и отображениям с range
- Ограничение области видимости блока с with