ну насчет метода filter в js могу сказать, что он является декларативным. Возможно, если сравнивать SQL и JS, то это и неверно, но сам по себе метод вполне декларативен
Да, метод декларативно описывает НАМЕРЕНИЕ ;) Но сам код остается кодом. Но вы правы - лучше было бы написать полноценный цикл for (let i = 0; i < ...; i++) { ... } чтобы код был совсем императивен
@@JavaScriptNinja я правильно понимаю, что претензия к фильтру как к декларативному коду, именно потому что реализацию самого метода фильтр как то может оптимизировать браузер, и фактически он так же является каким то более высшим представлением того же фор?
@@life_on_fire это не претензия :) фильтр снаружи декларативен, внутри императивен Я согласен что этот пример можно было бы улучшить. Я об этом расскажу в рамках "работы над ошибками" в следующем лайве
@@JavaScriptNinja либо же сам фильтр как метод декларативный, а код в целом остаётся императивным) я немного запутался) было бы неплохо показать на js разницу, а то поверхностно у людей останется что html декларативный а js императивный, хотя вью написан на js, и за счёт шаблонов позволяет реализовывать декларативный подход, вообщем, это что то взбудоражило мой мозг)
@@life_on_fire js императивный. Мы когда пишем шаблон - мы пишем его не на js. И в этом как раз суть - вью превратит его в императивные инструкции как ему удобно
@@ni55an а где у меня сказано о как? :) мне в голову уже более абстрактно не приходит. Как, при декларативном подходе нас и не волнует, я согласна, поэтому и отметила, что как это произойдёт, совершенно не важно, и какие средства и инструменты использует исполнитель, заказчика не волнует. Мне очень нравится пример с яичницей, и в стриме кто-то его по этому поводу как раз и приводил. Декларативно: приготовь яичницу, императивно: возьми из холодильника яйца,....., пожарь на сковороде. Изменила немного свой предыдущий комментарий, видимо не очень чётко выразилась.
Я уже давно middle dev по vue, Но Ваш курс всё равно смотрю! Лучшее объяснение, что я видел. Жаль, что его не было полтора года назад, когда я начинал. Успехов!!!
Просто замечательное объяснение, что такое декларативность и императивность, всё так четко и подробно и главное - реально понятно, прям кайф, очень полезный курс не только для изучение vue, но и для понимания фундаментальных понятий
Я запомнил лично так (простыми словами), что императивный - это ты как император :D, ты диктуешь определенные правила(алгоритм действий), пишешь тот код, который необходим для выполнения задачи. Декларативный, простыми словами, это то, что уже есть, не изменить. Тот же самый в html. И в конце ясно сказано, что есть люди, которые на основании императивного стиля делают декларативный, тем самым, помогая в разработке. На нем вся основа) Старался понятно объяснить)
Не люблю прописывать все пошаговые действия, а лишь то, что хочу увидеть в результате. Как это будет сделано движком браузера меня уже особо не парит. Как движок браузера display: flex; превращает в гибкий блок не волнует, хотя по факту даже V8 превращается в С+, Си код в ассамблерский, а он уже в машинный. Т е абстракция на абстракции и абстракцией абстрагируется! 😃🔥
Отличное видео, спасибо. Хорошо было бы ещё пару слов сказать о происхождении этих терминов, потому что я например знал что они обозначают и до просмотра, но, поскольку пользовался ими редко, постоянно забывал что из них что.
Декларативно - "Сделай пиццу" Императивно - "возьми помидор, разрежь его слайсами, достань из холодильника продукти и т.д по схеме приготовления пиццы")
спасибо тебе огромное! Отличный материал. Разобрать как написать можно и нужно по документации - она не требует интерпретации. Не понимаю обучалок пересказывающих текст. Но очень не хватало материалов на философию того или иного метода. когда и почему тот или иной способ применять. Спасибо еще раз тебе огромное!
на самом деле это хорошо что вы рассказываете все эти вещи, ибо сразу писать код как то слишком глупо, нужно сначала понять что к чему, зачем, почему и т.д
Закралась крамольная мысль, что данный курс и был создан, чтобы показать Минину и его аудитории другую альтернативу по самому заваленному его курсу. А выводы каждый сделает свои.
Т.е. если мы используем какую-нибудь абстрактную функцию arr.sort, которая сортирует массив по своему усмотрению в зависимости от каких-то переменных, это декларативный стиль? А если мы пишем свою собственную конкретную реализацию это императивный? Но ведь сама функция sort внутри вполне императивна. Получается все относительно, и термины императивный и декларативный имеют свою силу только относительно текущего уровня абстракции?
Если подумать то банальные инструкции js вроде const a = 1; так же декларативны, поскольку выражает наше намерение объявить именованную область памяти с начальным значением 1. Далее js движок v8 распарсит нашу инструкцию, сам выделит память, сам переложит в эту память исходное значение и вернёт ссылку на значение, не говоря уже всяких паралельных микрооптимизациях над нашим js кодом.
Нет. Рассматриваем не конкретную команду, а среду в которой она "живёт" (находится) наравне с другими командами. В этом и предыдущем видео говорится о ШАБЛОНИЗАТОРЕ Vue (как среде где есть команды). Вот он как раз пишется в декларативном стиле. Если мы возьмём как рассматриваемую среду МЕТОДЫ в том же Vue, то они пишутся в императивном стиле. Одиночные команды нельзя рассматривать.
@@vladimirzaguliaev9857 да просто уровни абстракции разные, вот и все. И не важно, будь это шаблоны Vue, либо декларативные команды для процессора, которые уже он выполняет императивно относительно другого уровня абстракции)) Ну, в каком-то смысле, тут есть связь
получается что это различие условно? то есть более высокоуровневый слой мы называем декларативный, а менее - императивный? Например, мы пишем foo(f, c), как в примере, и подразумеваем, что это императивный стиль, но под капотом там осуществляется ряд команд, а значит это уже декларативный?
Тоже непонятен этот момент. Запись в константу const x = 3 императивная команда, но если мыслить "запиши 3 в переменную х, и мне не важно какую область памяти ты для этого возьмешь и какой индекс присвоишь и как ты сделаешь её неизменяемой" звучит декларативно.
Написал свой коммент, потом прочитал ваш) Ну да философия какая-то. Получается верх декларативности - это текст в редакторе ""Сделать сайт как у компании Х, с моими данными и котиками"
Я избегал бы слова "сахар". Все таки декларативность - это не сахар а именно более высокоуровневое представление. Про конфиги согласен. "Сахар" же - это более "краткая и удобная" форма записи чего-либо
Получается, что императивность и декларативность в программировании это всего-лишь уровень абстракции? И то что было декларативным на одном уровне может стать императивным для более высокого уровня? К примеру, страница, сверстанная компонентами, более декларативна чем голый html, в который она преобразуется.
Нет, не так. В императивном подходе мы в явном виде манипулируем состоянием системы, чтобы получить нужный результат где-то в состоянии. при этом можно сколько угодно пользоваться вызовами других процедур. Но фокусировка внимания программиста происходит на так называемых побочных эффектах - изменении состояния мира (значения переменных, ввод, вывод). В чисто декларативном стиле мы описываем нужный результат. Т.е. наша программа должна описывать результат в каком-то виде. Допустим, как SQL-запрос, или как композиция функций, т.е. f(g(x, y), z). При этом подходе у нас нет в явном виде состояния, которым мы манипулируем. Чтоб это понять лучше, надо почитать код на prolog или scheme, например. Код может быть при этом относительно низкоуровневым (например, вычисление факториала). Т.е. декларативность и императивность не обязаны образовывать иерархию. Промышленный код обычно представляет собой смесь из этих двух подходов. Сейчас считается хорошим тоном писать многие функции без побочных эффектов (чистые), т.е. она берёт на вход данные и возвращает результат, никак не влияя на окружающий мир. Такие легко тестировать и использовать. Но строго говоря код пишут именно ради побочного эффекта - активное взаимодействие с UI, автопилот авто, итд, так что одними чистыми функциями не обойдёшься.
@@igelko Может я коряво выразился в предыдущих ответах. Имел в виду то, что обычно декларативный стиль является "надстройкой" (в кавычках!!!) над императивным как следствие повышения абстракции, а не наоборот. Считаю, что ты прав на все 100%. Сам пишу пром. код на Vue около 4-х лет.
когда я просто пишу код императивный, я же не говорю куда премещатся битам или электронам в процессоре, они сами как-то решают исходя из вшитых инструкций в процессор. У каждого проца свои инструкции, будь то arm или х86. Электроны пепемещаются и получается результат. Это декларативность?
Илья, как експерт javascript скажите свое мнение, стоит ли использовать оператор optional chaining currentCompany?.name вместо currentCompany && currentCompany.name так как в нем используется больше проверок после компиляции, скажется ли это как то на произвольности приложения?
Всегда думал что filter декларативный. Просто интересно, как будет выглядеть именно декларативный фильтр на JS? P.S В Python-e есть списковые включения, насколько я понимаю они декларативны. Но в JS такого синтаксиса нет. courses.filter(c => c.id> 10); filteredCourses(courses, `id > 10`); ?
Это для людей, которые пробовали работать с реактом или хотя бы читали документацию. Мне эти объяснения помогли понять фундаментальную разницу вью и реакта. И отсюда осознать 2 разных подхода к разработке.
Не согласен) Декларативность: const f = 3; let c = f + 2; foo(f, c); (Под капотом много оптимизаций и даже результат не всегда очевиден) Императивность: move rdi, 3 move rsi, rdi add rsi, 2 call foo Хотя и тут нужно перевести в опкоды да еще учесть оптимизации процессора, работа с памятью, и далее мы спускаемся на уровень электроники и тд. Я к тому что все есть абстракция и нужно еще обозначить какой уровень абстракции можно считать императивным. Или какую абстракцию считать императивной html отдельная абстракция от js. html декларативен в контексте js если из js создавать html. ....createElement('div'); ..... Или ....innerHTML = 'foo bar';
Для SQL может быть много движков. Для HTML может быть много движков. А для JS - нет что ли? Он ведь тоже в браузере выполняется. И каждый движок браузера по-своему может его выполнить. По такой логике JS тоже декларативный.
vue быстрее react только в случае когда react разработчик не может его грамотно настроить? или в любом случае быстрее? если да - насколько? и стоит ли на этом акцентировать внимание? ведь в многих чатах уже пишут что react отстой, не реактивный, не декларативен, медленный и т.д.
React с MobX ничем ни хуже Vue, а то и лучше в плане отличной поддержки TS и гибкости. А медленным код можно на чем угодно сделать, если не понимать базовые вещи в программировании
Императивность и декларативность... Используется во всех языках (наверное). Эта философия очень сложно мне даётся. Вроде более-менее стало понятно. Особенно с чаем )))
Спасибо за видео! Правильно ли я понял, что мы можем назвать код декларативным или императивным ТОЛЬКО если упомянем относительно чего он таким является. Например, JS императивен относительно Vue и декларативен относительно v8/c++ (как тут правильнее)
спасибо за видео, можно ли сравнивать ети концепции на одном и том же примере js без html или на оборот, как по мне ето разние технологии, для разних целей и получаю кашу в голове. Тот же декларативний подход из Vue wqerty очень похож на JSX из императивного реакта if (true) { qwerty }, только разница в том что Vue програмируем в html, а React програмируем в js.
В первом случае ты "говоришь" что желаешь видеть div при таких-то условиях. Во втором случае ты по условию "командуешь" вставить div. Чуешь разницу? ;)
HTML - декларативен. Тогда получается что модуль bootstrap-vue - декларатив поверх декларатива. Кстати как Вам подобные модули вообще по вкусу? Возможно это в курс надо, так как народ часто тащит их с npm