TGViewer
Журнал инженера-программиста Журнал инженера-программиста @software_engineer_notes · 248 subscribers
Post #192 134
В начале статьи дается глоссарий и не зря. Дело в том, что автор в духе классического "#Define TRUE FALSE" переопределяет базовые концепции из сферы Компьютерных Наук. Он называет процедурный (императивный) стиль программирования - Функциональное Программирование. И далее начинается треш и угар.
Вторая остановка. Поясню терминологию.

Процедурное программирование - это когда мы говорим какую последовательность действий нужно выполнить и ожидаем при этом определенное изменение состояния. Пример - приготовление еды по рецепту. На старте выполнения у нас есть рецепт блюда (наша программа), пустая тарелка и набор ингредиентов. Мы по строго по рецепту выполняем серию операций. По окончанию работы у нас становится меньше ингредиентов, но зато на тарелке появляется готовое блюдо. Ингредиенты становятся блюдом.

Функциональное программирование - это подход программирования, когда вы оперируете множеством математическими функциями, но не храните никаких состояний и не изменяете данные. Пример - заказ еды онлайн. Вы через сайт просто сообщаете какое блюдо хотите получить и именно его через какое-то время получаете. При этом внутри процесса есть свои независимые функции - полученный от вас заказ относят на кухню, там повара что-то делают, далее еду отдают курьеру. Но последовательность не строгая - если вам срочно, то после заказа и при наличии вашу еду сразу отдадут на доставку, а потом на кухню передают заказ на готовку для клиента, который заказал раньше, но на более позднее время. Или вообще не будет никакого готовки на кухне, если вы последний клиент и вам отдали заказ, от которого ранее был отказ. А еще отдельно есть функция списания оплаты с прикрепленной карты, которую могут активировать или во время получения заказа или после вручения курьером (причем в разные дни по разному, в зависимости от людей на смене). Т.е. главное отличие от процедурного стиля, что нет четкого списка шагов выполнения, а есть только описание взаимосвязей выполняемых функций, последовательность выполнения которых может изменяться, а некоторые по ненадобности вообще могут быть проигнорированы.

Объектно-ориентированное программирование - это что-то среднее, когда мы описываем множество объектов, которые взаимодействуют между собой самим фактом своего существования, но у которых внутри есть состояния и есть методы для изменения этих состояний. С одной стороны мы на верхнем уровне описываем как объекты между собой взаимодействуют, а внутри методов размещаем детальные пошаговые инструкции. Пример - кухня. У кухни есть свойства размера, наличия канализации и вытяжки, но еще есть состав из других объектов - плита, блендер, чайник и так далее, на которые передаются входящие инструкции. Для описания кухонной утвари можно описать шаблон - имеет вес, может быть включена, может быть выключена. Для конкретного экземпляра утвари уточняем возможности: для блендера добавляем наличие насадок, регулировка скоростью помола. Когда на кухню приходит задача приготовить стакан морковный смузи, тогда на холодильник дается команда выдать морковку; результат передается в блендер, который после выставления скорости включается; полученный результат помещается в стакан и кухня завершает работу по приготовлению.


Далее с примерами на известном автору языке TypeScript он приводит ряд спорных тезисов, которые очень аргументированно опровергаются в комментариях, среди которых отмечу комментарий от markelov69 и от WhtsPoint.

Но знаете, что тут самое забавное? TypeScript - это далеко не чистый функциональный язык (и не чистый процедурный язык, если следовать подмене понятий автора)! TypeScript - это типизированный диалект JavaScript, в котором ООП уже изначально присутствовало на прототипах, а с ECMAScript 2015 классы уже объявили официально (по факту все те же прототипы). Т.е. ООП-язык использовался для противопоставления практикам ООП 🤦

(окончание)
  • 👍 1
More from @software_engineer_notes
  1. Oct 3, 2026"Вы автоматизируете хаос" - этим страхом любят пугать своих бизнес-заказчиков консалтеры,…
  2. Sep 28, 2026Уже второй проект на работе делаю в методике "парного программирования" с Claude Code. И с…
  3. Sep 13, 2026За последний месяц произошло много событий, но наиболее интересным является использование…
  4. Sep 1, 2026Самая обычная бумажная книга учета - это пока лучший инструмент фиксации проектных изменен…
  5. Aug 31, 2026Очень показательная причина моей нелюбви реализации сравнения/объединения конфигураций в 1…
  6. Aug 29, 2026О концепции LLM-Wiki я впервые прочитал на X (Twitter). Чтобы позже ознакомится детальнее,…
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 →