Математики придумали функции:
Три нужных нам свойства
Полная определенность
Детерменированность
Отсутствие побочных эффектов
Что не скорми — всё прожуёт
На самом деле секрет в том, чтобы не кормить лишним
Всегда возвращает одинаковый результат на одинаковые значения аргументов
Если бы random был чистой функцией, то жить пришлось несладко
Не лезет куда не надо
Математики такого явно не говорили, но мы такое придумали: взять что-то не из аргументов, сходить в API, мутировать аргумент
В идеале чистая функция:
def divide(a: float, b: float):
if b == 0.0:
raise DivideByZeroException("потому что жизнь тлен")
return a/b
def divide(a: float, b: float):
if b == 0:
raise DivideByZeroException("Я почти чистая")
return a/b
assert divide(6.0, 2.0) == 3.0
assert divide(1.0, 0.0) exception raised
import coeff
import external_api
def divide(a: float, b: float):
return external_api.call(a, b, coeff)
assert divide(6.0, 2.0) == ???
assert divide(1.0, 0.0) ???
mock coeff as 0
mock external_api as return 3.0
assert divide(6.0, 2.0) == 3.0
mock external_api as raise exception
assert divide(1.0, 0.0) raised exception
Сначала мы писали страницу модулями — блоками вёрстки, которую кусочно генерировали на сервере
Потом мы поняли, что блоки одни и те же, и вынесли их в компоненты
Которые зависели только от данных
Если блоки зависят только от данных, то можно пользоваться единым хранилищем данных
Придумываем механизм общения и делим компоненты
Просматриваем состояния и придумываем то что входит
Просматриваем состояния и придумываем что выходит
Находим косяки, проверяем что стили совпадают с дизайн-макетом, находим улучшения и несоответствия
Декомпозируем на компоненты, пишем истории и для них
У всех разработчиков, менеджеров и дизайнеров есть реальный интерактивный набор компонентов
Историями легко показать как компонент ведёт себя в граничных случаях, как выводит ошибки и как ведёт себя на тёмном фоне
Мало того что видно как выглядит, так ещё и видно что делает. Можно дёргать ручки и смотреть что поменяется.
Специальный вид тестирования, когда специальная утилита делает скриншот каждой истории и сравнивает их между релизами
Не будьте занудами