Как написать строку вычисления
Здесь описаны основы блоков вычислений: разбор строк, пояснения рядом с формулами, имена значений и их повторное использование, а также условия. Начните с этого раздела, если только знакомитесь с вычислениями Varlig, и возвращайтесь, когда имя или комментарий ведёт себя неожиданно.
Одно выражение на строку
Вычисления располагаются в специальном блоке внутри заметки. Введите ограждение ```calc или нажмите ⌘Y, чтобы вставить блок. Каждая его строка — отдельное вычисление с результатом сбоку.
£3.40 * 5 даёт £17.0045 min + 1 hour 20 min даёт 2 hours 5 min1.5 litres in ml даёт 1,500 mLПустые строки и комментарии не имеют результата. Ими можно разделять блок и пояснять расчёт.
Сначала Varlig пытается вычислить строку целиком, включая выражения вроде £45 with 20% VAT. Если это не удаётся, незнакомые слова пропускаются: 5 apples + 3 oranges всё ещё равно 8. Это удобно для быстрых записей, но описание может совпасть с выражением или единицей. Для пояснения назначения строки используйте комментарий или метку, описанные ниже. Подробнее — Как Varlig читает выражения.
Нераспознанное слово на месте значения вызывает ошибку с этим словом, а не неверный результат. Сообщение предлагает ближайшее из определённых вами имён:
rent = £1,150rnt + £200 даёт Unsupported: unrecognized calculation at "rnt"; did you mean "rent"?То же относится к именам с цифрами и подчёркиваниями, например rent2 и rent_2. Они не отбрасываются как описание и не превращаются в содержащуюся в них цифру. Скобки, вызов функции и перевод единиц тоже не скрывают ошибку. Цифры допустимы в метке — поместите описание туда:
rent = £1,150rent2 + £200 даёт Unsupported: unrecognized calculation at "rent2"; did you mean "rent"?(rnt + £200) * 2 даёт Unsupported: unrecognized calculation at "rnt"; did you mean "rent"?Flat 2: rent + £200 даёт £1,350.00Строки с маркером списка
Маркер в начале строки обозначает пункт списка покупок: описание перед суммой пропускается, и строка вычисляется. Используйте -, *, •, +, – или — с пробелом:
- flowers 1,200 даёт 1,200* coffee $4.50 даёт $4.50- 12 mugs даёт 12- 6 bananas @ 18p даёт £1.08- 500g pasta 3 packs at £1.10 each даёт £3.30Дефис перед отдельной величиной остаётся минусом: - 1,200 равно -1,200, а - 12 kg равно -12 kg. Для измерений в списке начинайте строку с * или •: они считаются маркерами перед любым содержимым.
Слова рядом с суммой
Описание делает строку понятнее, не меняя число. Слова, соединённые через +, & или per, остаются частью описания, а не вычислением. Минус вплотную к сумме относится к ней, а номер после слова не участвует в расчёте:
basin + pedestal £145 даёт £145.00food cost per head £14.20 даёт £14.20milk, bread, eggs £12.40 даёт £12.40Netflix -£10.99 даёт -£10.99DIRECT DEBIT REF 4471 £62.40 даёт £62.40Invoice #123: £250 даёт £250.00double cream 600 mL даёт 600 mLchlorine 3 ppm даёт 3 ppmt-shirt £12 даёт £12.00on the day 60 at £28 даёт £1,680.00Это охватывает большинство строк из выписок, подтверждений заказов и списков деталей: прописной текст, перечисления через запятую, слова с дефисами и описания, начинающиеся с известных Varlig слов вроде double, per или on the day.
Подпись с номером, например Year 2, Room 12 или ISA 2026, а также период с годом вроде Q4 2026, July 2026 или week 40 2027 тоже относится к описанию, где бы она ни стояла, если за ней следует величина. Это сумма с валютой, единицей или знаком процента либо отдельное число перед следующим оператором. Номер подписи никогда не прибавляется:
Year 1 £5,000 + Year 2 £6,000 даёт £11,000.00Year 1 5,000 + Year 2 6,000 даёт 11,000ISA 2025 £20,000 + ISA 2026 £20,000 даёт £40,000.00Room 12 £40 + Room 14 £50 даёт £90.00Q3 2026 £5,000 + Q4 2026 £6,000 даёт £11,000.00July 2026 £500 + August 2026 £600 даёт £1,100.00Единственное число после слова считается величиной, как в rent 1200 + 300; количество по-прежнему учитывается, как в tickets 2 £40 each. Единицы hour, week и day измеряют число перед ними. Перед числом они подписывают строку: hour 2 — второй час, а не час и две минуты. Если далее идут валюта, единица или процент, пробел после номера подписи начинает величину: Week 2 150 hours означает 150 часов, а не 2 150:
hour 1 £40 + hour 2 £50 даёт £90.00hours 8 + hours 7 даёт 15Week 2 150 hours + Week 3 160 hours даёт 310 hoursКомментарии
Комментарий — текст, который калькулятор игнорирует. Его можно записать четырьмя способами:
| Форма | Пример | Что игнорируется |
|---|---|---|
| Комментарий с решёткой | rent * 12 # per year или # Budget |
Всё от # с пробелом до конца строки |
| Комментарий с косыми чертами | rent * 12 // per year |
Всё от // до конца строки |
| Примечание в кавычках | "flat whites" £3.40 * 5 |
Всё внутри двойных кавычек в любом месте строки |
| Примечание в скобках | $999 (for iPhone 16) |
Слова в скобках в любом месте строки |
# Weekly shopmilk = £1.45bread = £1.20 // sourdougheggs = £2.30 "free range"milk + bread + eggs # without the extras даёт £4.95Решётка или косая черта комментирует остаток строки, а кавычки и скобки могут находиться посередине. Это позволяет пояснить сумму и продолжить вычисление:
$999 (for iPhone 16) даёт $999.00laptop £899 (refurbished) + £49 case даёт £948.00Boing "747" is $386.8M даёт $386.8MДля текста, похожего на число, надёжнее кавычки: так 747 выше не попадает в вычисление. Скобки, содержащие только число, являются частью арифметики, поскольку число рядом со скобками означает умножение:
$999 (3) даёт $2,997.00Поэтому выносите количество за скобки или указывайте внутри, что именно считаете, например $999 (3 handsets). Любое содержимое, кроме отдельного числа, остаётся комментарием — в том числе слово с дефисом или процент:
£134 (25% discount already applied) даёт £134.00£10 (mother-in-law) даёт £10.00Строка с решёткой и пробелом в начале целиком считается комментарием. Это удобно для заголовков внутри блока.
Именно пробел превращает решётку в комментарий. Знак # вплотную к слову, например #food, — тег: он помечает строку, не участвует в вычислении и позволяет суммировать все строки с этим тегом в любом месте блока.
£12.50 lunch #food даёт £12.50£8 coffee #food даёт £8.00total of #food даёт £20.50Решётка с цифрами — ни комментарий, ни тег. Она задаёт номер предмета строки и не участвует в расчёте, поэтому номера счетов, заказов и деталей можно сохранять как есть.
Invoice #123: £250 даёт £250.00part #4 weighs 20 g даёт 20 gПодписи
Метка — несколько слов с двоеточием и пробелом в начале строки. Она описывает результат, не участвуя в вычислении:
rent = £1,250bills = £180Rent and bills: rent + bills даёт £1,430.00Café bill: £12.50 + £4 даёт £16.50Метки могут содержать буквы, в том числе с диакритикой, цифры, пробелы и подчёркивания, например Flat 2: или Q3 rent:.
Метка не создаёт имя. После Rent and bills: rent + bills значения с именем Rent and bills не существует. Для повторного использования результата применяйте =. Не ставьте метку перед присваиванием: Housing: rent = £1,250 покажет сумму, но не сохранит rent.
Присваивание
Знак = задаёт имя значению. Строка также показывает само значение, чтобы его можно было проверить.
price = £85 даёт £85.00price + 20% даёт £102.00Для изменения уже определённого имени используйте +=, -=, *= или /=:
holiday fund = £400holiday fund += £150 даёт £550.00holiday fund -= £85 даёт £465.00servings = 4servings *= 3 даёт 12flour = 750 gflour /= 3 даёт 250 gЕсли правая часть вызывает ошибку, имя сохраняет эту ошибку. Все строки, использующие его, показывают её, пока вы не присвоите новое значение:
guests = 0per head = £120 / guests даёт Error: divide by zeroper head + £5 даёт Error: divide by zeroСохраняемое значение может сопровождаться описанием, как в отдельной строке. Но случайные слова вокруг одного имени в правой части неоднозначны: при rent = £1,150 запись x = spent excl rent сообщит об ошибке spent excl rent, а не молча сохранит аренду.
paid rent = £1,150daily spend = paid rent / 16 даёт £71.88Имена
Имя может состоять из нескольких слов и содержать буквы с диакритикой, нелатинские буквы, цифры, подчёркивания и эмодзи:
flat white = £3.40flat white * 5 даёт £17.00crème brûlée = £6.50crème brûlée * 2 даёт £13.00🍎 price = £0.45🍎 price * 6 даёт £2.70q1 sales = £12,400q2 sales = £14,100q1 sales + q2 sales даёт £26,500.00bedroom_width = 3.2 mbedroom_width * 2 даёт 6.4 mИмя может включать служебные слова Varlig, например to, in или needed, и совпадать с именем функции, например floor. Там, где оно используется как значение, Varlig читает вашу переменную:
time to work = 25 mintime to work * 10 даёт 4 hours 10 minpaint needed = 12.44 Lpaint needed to 1 dp даёт 12.4 Lfloor = 12 m²floor * 2 даёт 24 m²floor(3.7) даёт 3Со скобками, например floor(3.7), функция по-прежнему выполняет обычное действие.
Имя может даже заканчиваться числом прописью — например, чтобы цена читалась как в меню:
table for four = £96table for four / 4 даёт £24.00Если два имени начинаются одинаково, выбирается более длинное. Поэтому имя с номером читается целиком:
batch = £8.01batch 2 = £8.21batch 2 - batch даёт £0.20Имена чувствительны к регистру: eggs и Eggs — разные значения.
Чтобы имя, например почасовая ставка или налог, было доступно в любой заметке, добавьте его в общие определения в настройках, а не повторяйте в каждой заметке.
Имена, совпадающие со встроенными словами
Определённое вами имя имеет приоритет перед единицей, числом прописью или константой с тем же написанием. Однако обычные имена не меняют запись количества: число непосредственно перед существительным во множественном числе или единицей задаёт количество, а процент перед tip или tax — чаевые или налог. Поэтому значения с именами hours, nights или tip не меняют следующие строки:
rate = £14 / hourhours = 7.5rate * 7.5 hours даёт £105.00nights = 14£118/night * 14 nights даёт £1,652.00tip = $12.69$84.60 + 18% tip даёт $99.83Наведите указатель на слово, чтобы увидеть его трактовку. В rate * 7.5 hours подсказка сообщает: «Counts hours here, not the variable hours = 7.5.» — здесь считаются часы, а не используется переменная. В других позициях имя означает ваше значение, как в split £90 among people.
Перевод работает аналогично: после in, to или as единица имеет приоритет перед именем с числом без единиц. При miles = 12 выражение 20 km in miles всё ещё даёт 12,4274238447 мили. Имя перед единицей масштабирует её, а не задаёт цель перевода: 15.2 m in scale miles при scale = 76.2 сообщает Unsupported: conversion to scale miles, не выбирая одну из неоднозначных трактовок.
Составная единица без пробелов вокруг косой черты читается как единица независимо от других значений её букв. Поэтому плотность или скорость, вставленная из технической таблицы, сохраняет смысл:
g = 9.81 m/s²2 g даёт 19.62 m/s²2.7 g/cm³ даёт 2.7 g/cm³50 kg * g даёт 490.5 NВ некоторых случаях ваше определение всё же меняет смысл строки:
- Одна буква всегда означает ваше значение: после
m = 3запись2 mравна 6, а не двум метрам. - Число перед именем в единственном числе умножает его: после
width = 3запись2 widthравна 6. То же относится к однобуквенному имени перед единицей или оператором. Подсказка объясняет это и предлагает явное2 * width. - Числа прописью и константы тоже заменяются: после
one = 7выражениеone times twoравно 14.
Две привычки помогут избежать большинства неожиданностей:
- Не используйте отдельные обозначения единиц
m,s,hилиinкак имена и не переопределяйте константы и числа прописью вродеpi,oneилиi. - Выбирайте понятные имена, например
hours worked,day rateилиrun distance.
Порядок строк в документе
Каждая строка видит имена, определённые выше. Они также доступны в последующих блоках вычислений той же заметки: исходные значения можно задать один раз и использовать ниже.
price = £20quantity = 3cost = price * quantity даёт £60.00price = £25price * quantity даёт £75.00cost даёт £60.00Новое определение price не изменяет предыдущую строку cost: значение cost было рассчитано по цене, действовавшей в тот момент. Чтобы изменить старый результат, отредактируйте исходное определение его входного значения.
Ответ выше
Слово prev означает ближайший результат выше. ans равнозначно ему, если только вы не определили собственное значение ans. Они удобны для быстрого продолжения расчёта:
£1,250 * 12 даёт £15,000.00prev / 52 даёт £288.46ans + £20 даёт £308.46Для суммы группы строк напишите sum или total отдельной строкой. См. Суммирование строк выше.
Ссылка на строку по номеру
Имена line1, line2 и далее ссылаются на вычисление по его позиции в заметке; все блоки считаются последовательно:
price = £100 даёт £100.00line1 * 2 даёт £200.00Ссылка остаётся привязана к исходной строке. Если вставить строку выше или переместить строки командами Format › Move Line Up и Move Line Down, вычисление продолжит использовать ту же строку. Varlig обновит номера в тексте отдельным отменяемым действием, чтобы запись соответствовала результату.
Если удалить целевую строку, ссылка покажет Error: line2 refers to a deleted line, а не начнёт использовать другое число. Отмена восстановит обе строки.
Ссылки сохраняются при копировании и вставке
При копировании или вырезании и вставке строк вычислений ссылки line2 и ↑ продолжают указывать на прежние значения:
- Ссылка на скопированную строку следует за её копией; номер обновляется по новому положению.
- Ссылка на нескопированную строку сохраняет исходную цель при вставке в ту же заметку.
- При вставке в другую заметку ссылка превращается в имя, определённое целевой строкой, например
rentдляrent = $1,200. Оно заработает, когда новая заметка определит его или импортирует. Строка без имени превращается в ссылку вродеline2_of_Budget, которая сообщает о проблеме до замены:
5 + line2_of_Budget даёт Unsupported: line2_of_Budget is a line of another noteБуфер обмена содержит только выделенный текст, поэтому другие приложения получают именно его. Вставка отменяется одним действием. Строки из защищённой паролем заметки вставляются без изменения записи.
Превращение текста в вычисление
Вставили счёт или написали строки, которые нужно посчитать? Выделите их и выберите Format › Convert to Calculation Block либо нажмите ⌘Y. Varlig обрамит текст блоком вычислений одним отменяемым действием, и сбоку появятся результаты.
Без выделения ⌘Y вставляет пустой блок. Текст вне блока никогда не вычисляется: числа, даты и номера счетов во вставленном письме остаются как есть.
Сброс области видимости
Отдельная строка --- начинает новую область видимости. Имена, собственные единицы и функции, определённые выше, ниже неё больше недоступны. Так удобно сравнивать два сценария в одной заметке, не смешивая их значения.
# Option A: the flat in townrent = £1,250travel = £60rent + travel даёт £1,310.00---# Option B: the flat further outrent = £980travel = £210rent + travel даёт £1,190.00Ниже --- имя travel нужно определить заново. Иначе использующей его строке не на что будет сослаться.
Условные выражения
Выражение if … then … else … выбирает одно из двух значений по условию. Его можно использовать отдельно или присвоить результат имени:
basket = £34.50delivery = if basket >= £40 then £0 else £3.99 даёт £3.99basket + delivery даёт £38.49Для нескольких исходов объединяйте ветви через else if:
basket = £34.50if basket < £20 then £4.99 else if basket < £40 then £2.99 else £0 даёт £2.99Вычисляется только выбранная ветвь, поэтому другая может содержать выражение, которое вызвало бы ошибку:
guests = 0if guests > 0 then £120 / guests else £0 даёт £0.00if и unless после выражения
Условие можно поставить после значения. Форма value if condition показывает значение при выполнении условия, а value unless condition — при его невыполнении. В остальных случаях строка ничего не показывает.
basket = £34.50£3.99 if basket < £40 даёт £3.99£3.99 unless basket >= £40 даёт £3.99Значением может быть текст в двойных кавычках. Тогда проверка выводит понятное сообщение при нужном условии и остаётся пустой в остальное время:
conversion = 0.667%"on target" if conversion > 0.5% даёт on targetПрисваивание внутри условного выражения
Обе ветви могут присваивать значение одному имени:
basket = £34.50if basket >= £40 then shipping = £0 else shipping = £3.99 даёт £3.99shipping даёт £3.99Если есть только ветвь then, присваивание происходит при истинном условии; иначе имя сохраняет прежнее значение:
basket = £34.50points = 0if basket > £30 then points = 50 даёт 50points даёт 50Сравнения вроде >= и операторы && и || описаны в разделе Операторы, сравнения и условия.
Всё вместе
Вот небольшой счёт фрилансера в виде обычной заметки:
# March invoiceday rate = £420days worked = 6travel = £86.40 // train faresfees = day rate * days worked даёт £2,520.00subtotal = fees + travel даёт £2,606.40vat registered = truevat = if vat registered then subtotal * 20% else £0 даёт £521.28Total due: subtotal + vat даёт £3,127.68У каждого исходного значения есть имя. В следующем месяце достаточно изменить days worked и travel, и остальная часть счёта пересчитается. Комментарии и метка делают блок понятнее, а условие позволяет использовать одну заметку независимо от того, начисляете ли вы НДС.