Локальні імена (let)

Дайте ім'я проміжному значенню і використовуйте його кілька разів усередині одного виразу.

Навіщо це потрібно

Коли той самий підвираз з'являється двічі, формула стає довшою і працює повільніше. Порівняйте:

if(len(trim(lower([Name]))) > 0, trim(lower([Name])), "unknown")

За допомогою let ви обчислюєте очищене ім'я один раз, називаєте його s і посилаєтеся двічі:

let s = trim(lower([Name])) in
  if(len(s) > 0, s, "unknown")

Той самий результат — коротше, зрозуміліше, а trim(lower(...)) виконується лише раз.

Синтаксис

let ІМ'Я = ЗНАЧЕННЯ in ТІЛО
  • let починає оголошення.
  • ІМ'Я — локальне ім'я, яке ви обираєте (літери, цифри, підкреслення).
  • ЗНАЧЕННЯ — будь-який вираз: літерал, посилання на колонку, виклик функції.
  • in відділяє оголошення від тіла.
  • ТІЛО — вираз, який може використовувати це ім'я.

Результат усієї конструкції let — це результат ТІЛА.

Кілька імен одразу

Розділяйте оголошення комами. Кожне наступне може посилатися на попереднє:

let
  gross = [Price] * [Quantity],
  tax = gross * 0.2,
  total = gross + tax
in total

Читається зверху вниз як короткий рецепт: обчислити gross, потім tax через gross, потім total через обидва.

Перекриття назв колонок

Якщо ім'я збігається з назвою колонки, усередині тіла let «виграє» оголошення. Зовні колонка зберігає своє значення.

let sales = 0 in sales + [Cost]

Усередині тіла sales — це 0, а не колонка.

Робота з помилками

Оголошення передають значення помилок «як є», тож ви можете їх розпізнати й замінити в тілі:

let n = parse_int([Raw]) in
  is_error(n) ? 0 : n

Або коротше за допомогою ??:

let n = parse_int([Raw]) in n ?? 0

Вкладені let

Один let можна писати всередині іншого:

let x = let y = [Sales] in y * 2 in x - [Cost]

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

let
  y = [Sales],
  x = y * 2
in x - [Cost]

Правила й обмеження

  • Імена оголошень — звичайні ідентифікатори, не [Імена В Дужках].
  • Не можна використовувати імена функцій (trim, if, len, …) як оголошення.
  • Оголошення бачиме лише в тілі свого let, більше ніде.
  • let не є обов'язковим: усе, що пишеться з let, можна написати й без нього — він просто робить деякі формули зрозумілішими.

Коли доречно використати let

Добре підходить, коли:

  • Той самий підвираз трапляється два й більше разів.
  • У формулі є кілька логічних «кроків», які варто підписати.
  • Проміжне значення коштовне (парсинг, регулярний вираз, пошук) і ви хочете обчислити його один раз.

Зайвий для:

  • Простих формул на кшталт [Price] * [Quantity].
  • Випадків, коли окремий крок трансформації буде зрозумілішим за довгий вираз.