Императивный стиль программирования практиковался в веб-разработке с 2005 года до 2013 года.
С императивным программированием мы выписали код, который перечислял, что именно должно делать наше приложение, шаг за шагом.
Стиль функционального программирования создает абстракцию с помощью умных способов объединения функций.
В ответах упоминается декларативное программирование, и в связи с этим я скажу, что декларативное программирование перечисляет некоторые правила, которым мы должны следовать. Затем мы предоставляем то, что мы называем некоторым начальным состоянием нашего приложения, и мы позволяем этим правилам как бы определять поведение приложения.
Теперь, эти быстрые описания, вероятно, не имеют большого смысла, поэтому давайте пройдемся по различиям между императивным и декларативным программированием, пройдя по аналогии.
Представьте, что мы не создаем программное обеспечение, а вместо этого выпекаем пирожки для жизни. Возможно, мы плохие пекари и не знаем, как испечь вкусный пирог так, как должны.
Итак, наш босс дает нам список направлений, которые мы знаем как рецепт.
Рецепт расскажет нам, как сделать пирог. Один рецепт написан в императивном стиле примерно так:
- Смешайте 1 стакан муки
- Добавить 1 яйцо
- Добавьте 1 стакан сахара
- Вылейте смесь в кастрюлю
- Поставить сковороду в духовку на 30 минут и 350 градусов по Фаренгейту.
Декларативный рецепт будет делать следующее:
1 стакан муки, 1 яйцо, 1 стакан сахара - начальное состояние
правила
- Если все смешано, поместите в кастрюлю.
- Если все перемешано, поместите в миску.
- Если все в сковороде, поставить в духовку.
Поэтому императивные подходы характеризуются пошаговыми подходами. Вы начинаете с шага 1 и переходите к шагу 2 и так далее.
В конечном итоге вы получите какой-то конечный продукт. Таким образом, делая этот пирог, мы берем эти ингредиенты, смешиваем их, помещаем в кастрюлю и в духовку, и вы получаете конечный продукт.
В декларативном мире все по-другому. В декларативном рецепте мы должны разделить наш рецепт на две отдельные части, начнем с одной части, которая перечисляет начальное состояние рецепта, как переменные. Итак, наши переменные здесь - это количество наших ингредиентов и их тип.
Мы берем начальное состояние или исходные ингредиенты и применяем к ним некоторые правила.
Поэтому мы берем исходное состояние и пропускаем их через эти правила снова и снова, пока не получим готовый к употреблению клубничный пирог из ревеня или что-то еще.
Таким образом, в декларативном подходе мы должны знать, как правильно структурировать эти правила.
Таким образом, правила, которые мы могли бы хотеть изучить наши ингредиенты или состояния, если смешаны, положить их в кастрюлю.
С нашим начальным состоянием это не совпадает, потому что мы еще не смешали наши ингредиенты.
Итак, правило 2 гласит: если они не смешаны, смешайте их в миске. Хорошо, да, это правило применяется.
Теперь у нас есть миска смешанных ингредиентов в нашем штате.
Теперь мы снова применяем это новое состояние к нашим правилам.
Итак, правило 1 гласит: если ингредиенты смешаны, поместите их в кастрюлю, хорошо, да, теперь правило 1 действительно применяется, давайте сделаем это.
Теперь у нас есть это новое состояние, где ингредиенты смешиваются и в кастрюле. Правило 1 больше не актуально, правило 2 не применяется.
Правило 3 гласит: если ингредиенты находятся в сковороде, поместите их в духовку, прекрасно, что это правило относится к этому новому состоянию, давайте сделаем это.
И мы получаем вкусный горячий яблочный пирог или что-то еще.
Теперь, если вы похожи на меня, вы можете подумать, почему мы до сих пор не занимаемся императивным программированием. Это имеет смысл.
Да, для простых потоков да, но большинство веб-приложений имеют более сложные потоки, которые нельзя должным образом отразить при проектировании императивного программирования.
В декларативном подходе мы можем иметь несколько начальных ингредиентов или начальное состояние, например textInput=“”
, одну переменную.
Возможно, ввод текста начинается с пустой строки.
Мы берем это начальное состояние и применяем его к набору правил, определенных в вашем приложении.
Если пользователь вводит текст, обновите ввод текста. Ну, сейчас это не относится.
Если шаблон отображается, рассчитайте виджет.
- Если textInput обновлен, перерисовать шаблон.
Ну, ничего из этого не применимо, поэтому программа просто будет ждать события.
Поэтому в какой-то момент пользователь обновляет ввод текста, и тогда мы можем применить правило № 1.
Мы можем обновить это до “abcd”
Таким образом, мы только что обновили наши обновления text и textInput, правило № 2 не применяется, правило № 3 говорит, что если ввод текста является обновлением, которое только что произошло, затем повторно отображаем шаблон, а затем мы возвращаемся к правилу 2, которое говорит, что шаблон отображен , рассчитать виджет, ладно, давайте посчитаем виджет.
В целом, как программисты, мы хотим стремиться к более декларативным проектам программирования.
Императив кажется более ясным и очевидным, но декларативный подход очень хорошо масштабируется для больших приложений.