Перейти к содержимому
FastOffice

Примеры F1

Двадцать три маленьких проекта: от минимального листа до миллиона строк, совместной работы и связей между книгами.

Каждый пример — работающий маленький проект, а не выдержка из кода. Но считает в них не ядро: на его месте стоит дублёр, а сами проекты собраны из пакетов @f1/* — они идут пакетами движка (Состав поставки) и в открытый реестр npm не публикуются. Поэтому смотреть здесь нужно на объём кода — сколько его нужно написать вокруг листа для каждой задачи, — а не на числа в ячейках.

Настоящее ядро с настоящим пересчётом — в живом примере: там книга открыта в отдельном процессе, и правка ячейки меняет итоги по-честному.

Смотреть их стоит по порядку: первые отвечают на вопрос «сколько нужно написать, чтобы получить лист», дальше идут отдельные умения, а в конце — предельные случаи вроде миллиона строк и работы без экрана.

Примеры показывают оболочку — то, что видит и трогает пользователь. Считает не она: за вычисления, формулы, историю и сохранение отвечает ядро, и разговаривают они через одно-единственное место — транспорт.

В примерах на месте ядра стоит дублёр: createMockTransport возвращает придуманные значения, чтобы лист было на чём показать. Поэтому цифры в них ничего не значат — важно, сколько кода нужно написать вокруг.

В вашем продукте меняется ровно эта строка: вместо дублёра ставится настоящий транспорт — сборка ядра в браузере или мост к процессу рядом. Остальной код примера остаётся как есть.

Что именно умеет ядро по ту сторону транспорта, описано в справочнике Compute Contract: это те самые операции, которые оболочка и вызывает.

Комментарии в примерах часто объясняют решение ссылкой на правило: «второй владелец книги не заводится (инвариант №2)». Правил всего пять, они общие для всех примеров и звучат так.

Правило О чём оно
№1 Считает ядро, оболочка только показывает. Ни формул, ни истории, ни записи файла на стороне интерфейса нет.
№2 Второй владелец книги не заводится: любая правка идёт той же дорогой, что и ввод с клавиатуры, — своей у неё нет.
№3 Не показывать несделанное сделанным. Нарисовать в примере то, чего продукт не умеет, нельзя даже картинкой; в комментариях это названо fake-green.
№4 Реестр команд принадлежит листу. Команды встраивающего в него не попадают — они живут своей стороной и не смешиваются с нашими.
№5 Событие ничего не применяет и ничего не требует: лист поднимает намерение, а решает хозяин страницы.

Файлы каждого примера показаны на его странице целиком. Проект лежит в examples/f1/<имя примера> — можно взять его как заготовку и заменить книгу на свою.

Ассистент документации

Ответ собран из документации и может быть неточным — сверяйтесь с источниками.