Декларативный и императивный стиль
Чем отличается
MongoDB от
PostgreSQL, а
jQuery от
React? Отличий можно насчитать сотни. Но сегодня поговорим об особенном, про стиль общения разработчика с технологией.
Возьмем
MongoDB, давайте представим что у нас есть коллекция
job_offers и мы хотим выбрать топ 3 с самой большой заработной платой.
db.job_offers.find().sort({salary:-1}).limit(3)
А теперь у нас есть табличка
job_offers в
PostgreSQL и мы тоже хотим выбрать топ 3 по заработной плате.
SELECT * from job_offers ORDER BY salary DESC LIMIT 3
Заметили разницу? В простых примерах она едва уловима, но все-таки видна. В
MongoDB мы говорим технологии, что она должна сделать (
императивный стиль). В
PostgreSQL мы говорим что мы хотим получить (
декларативный стиль). Это важно.
Из этого вытекают особенности каждого подхода:
1️⃣
Императивный стиль
В императивном стиле у разработчика больше контроля. Он может написать немного кода и управлять поведением технологии. Но если сама технология обновиться, то, возможно, этот код нужно будет переписывать.
2️⃣
Декларативный стиль
Здесь разработчик просто пишет что он хочет получить, свое желание, он не говорит как именно. За это отвечает сама технология. Большое преимущество, что с обновлением технологии может незаметно произойти оптимизация. Например, запрос начнет работать в 100 раз быстрее, а сам код менять не нужно.
Нельзя ответить какой стиль лучше 🤷♀️. И даже нельзя сказать, что все зависит от задачи — что по зарплатам лучше всего сортировать используя
SQL, а вот среднюю зарплату лучше считать в
MongoDB.
Все зависит от того, кто будет использовать технологию. Что этот человек умеет и что для него важно сейчас. Например, если быстро получить результат и "тяжело" по ресурсам — подойдет декларативный стиль. А если оптимизировать по ресурсам, но потратить на это больше времени, тогда лучше императивный стиль.
⬛️ Еще раз — с одними технологиями мы говорим что надо сделать, а в других — что мы хотим получить. Разрабатывать технологии которые требуют императивный стиль легче, потому что не надо выдумывать еще один уровень абстракций. А вот использовать их людям далеким от программирования — тяжелее.
Какой стиль предпочитаете вы? Пишите в комментариях.
#хардскиллы