TGViewer
DON'T STOP AND CODE DON'T STOP AND CODE @start_py · 100 subscribers
Post #645 123
[Какие пред- и пост-условия должны быть? И почему это вообще важно?]

Продолжаю рассматривать данную тему. Она правда крайне интересна в практическом применении.
Слышали рекомендации "ослабляй предусловия и усиливай постусловия"?

1) Предусловия (Preconditions): Будьте либеральны на входе
- Какими должны быть: Максимально слабыми (широкими).
- Пример: Вместо "принимаю только массив строк", скажите "принимаю массив, одиночную строку или даже null".
- Почему это важно: Это делает ваш код удобным. Другим разработчикам (и вам через месяц) не нужно обкладывать вызов вашей функции кучей проверок if (x !== null && Array.isArray(x)). Вы берете эту рутину на себя, делая систему устойчивой к "грязным" данным.

2) Постусловия (Postconditions): Будьте строги на выходе
- Какими должны быть: Максимально сильными (узкими и точными).
- Пример: Вместо "возвращаю объект и null", гарантируйте "возвращаю валидный объект".
- Почему это важно: Это дает уверенность. Вызывающий код точно знает, чего ожидать. Ему не нужно гадать "а что, если вернется undefined?". Это снижает когнитивную нагрузку и количество багов.

Оказывается есть золотое правило:
"Будь строг к тому, что производишь, и либерален к тому, что принимаешь."
(Закон Постела)

Советую почитать об этом законе подробнее.

Этот принцип работает не только в протоколах интернета, но и в архитектуре любой надежной программы.

Но есть один нюанс.
Всегда ли нужно быть "либеральным" и принимать любые данные? Где именно нужно ослаблять предусловия? Неужели во всех функциях проекта?

В следующем посте разберем, где нужно ослаблять предусловия, а где этого делать не следует.
  • 👍 8
More from @start_py
  1. Sep 25, 2026[Скорость моделей] Стал обращать исключительное внимание в работе на скорость ответа ии-мо…
  2. Aug 16, 2026[Санкции] Failed to load URL https://www.nvidia.com/ru-ru/geforce/billboards/displaydriver…
  3. Jul 29, 2026[Будни вайбкодера. Или как ИИ не мог выключить проверку SSL] Сейчас была очередная забавна…
  4. Jul 20, 2026[Про впн, прокси и первый опыт с живыми пользователями] Этой весной, когда начались массов…
  5. Jul 7, 2026Наше время ограничено. "На экзистенциальном уровне :) у нас не так уж и много времени на э…
  6. Jul 2, 2026"если вам нужно прочитать исходный код функции, чтобы понять, что она делает (в частности,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →