TGViewer
artalog artalog @artalog · 4.21K subscribers
Post #194 2.25K
Декларативное программирование - паттерн ограничения семантики.

Все эти "что VS как" часто оторваны от реальности. В действительности, какая-то синтаксическая конструкция может включать в себя много семантики, имея большой контекст работы, а может мало.

Семантика, что? Не очень понятно? Когда мы пишем код - мы решаем с помощью него какую-то задачу. Проблема мейнстримных ЯП в том что в нескольких строчках их кода может содержаться много смысла и то что этот же смысл может быть записан другими строчками кода. Массив в JS можно обойти с помощью ключевых конструкций for, for of, for in и while, встроенного метода forEach или вспомогательной библиотеки, вроде R.forEach. При этом, в циклах можно использовать break и continue, а в колбеках forEach никакого break, только early return. await внутри вычисления дает разное поведение в колбеках и в цикле. Крыша уже едет, а мы просто хотели посмотреть на элементы массива.

Чем больше способов у нас есть для решения одной и той же задачи - тем проще нам будет ее решить при возникновении дополнительных условий. Но зачем ориентироваться на крайние случаи, когда в большинстве своем мы пишем однообразный код?

Под декларативным программированием обычно понимают использование таких конструкций, которые будут однозначны. Код с таким свойством действительно прост, легко пишется, легко читается и понимается. Это самое важное, на что стоит обращать внимание.

Какие есть еще способы достичь однозначности?

DSL (Domain Specific Language) - отдельный язык для описания очень ограниченного набора задач - в рамках выбранного домена. Т.к. он должен решать небольшой набор задач, то и код на нем проще и однозначнее. Причем, не обязательно такой код будет декларативен.

Бывают примеры, когда декларативный DSL оказывается чрезмерно сложным и позволяет одну задачу решать разными способами.
SQL прекрасный и, казалось бы, декларативный язык. Андрей рассказывал о его сравнении с наивной реализацией на общем языке программирования. Но как только вам нужна частая выгрузка для аналитики и перф, начинается профилирование сложности и пляски с джоинами (привет императив) вплоть до перестроения схемы. А по другому все еще не научились, оптимизация SQL до сих пор насущный вопрос.

Я бы забанил слово "декларативный" в наших комьюнити, потому что смысл оно только размазывает, а не подчеркивает. Это базворд, который считают за безусловное благо, хотя оно таковым не является.

Код должен быть однозначным - в этом заключается простота. Если глядя на код, не зная о входящих данных, можно с уверенностью сказать что он делает - это простой и однозначный код. Проектируйте API ваших библиотек с этой мыслью.
  • 👍 19
  • 👎 2
More from @artalog
  1. Oct 1, 2026Для меня главный приоритет в reatom.dev уже несколько лет - универсальность. Он должен реш…
  2. Sep 30, 2026https://t.me/synaptic_garden/1370 (уж извините за частый постинг, тем более про ИИ, но важ…
  3. Sep 30, 2026Post #2011
  4. Sep 30, 2026Очень круто! Композиты сильно упрощают работу с иммутабельными данными, точнее с их equali…
  5. Sep 29, 2026Bun там с AOT экспериментирует!
  6. Sep 25, 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 →