Императивное и декларативное программирование


В статье Пишем полноценное приложение на React с нуля за час встретилась фраза "Иногда нам нужно добавить императивный код. React-код обычно декларативен"

Так чем же отличается императивный и декларативный код?

Императивный подход предполагает пошаговую инструкцию по достижению нужного результата.

Декларативный подход описывает желаемый результат, а как он будет достигнут не важно.

Примеры из жизни:

1. Вы решили пригласить свою половинку на свидание.
Вы пришли в ресторан, подошли к администратору и сказали…

Императивный подход: Я вижу, что тот угловой столик свободен. Мы пойдём туда и сядем там.

Декларативный подход: Столик для двоих, пожалуйста.

2. Ваш друг прислал вам смс: "Я  у Ашана. Как мне пройти до твоего дома?"

Императивный подход: Сядь на автобус 678 и выйди на остановке “Улица Победы”. Поверни направо у первого светофора. На следующем светофоре поверни налево. Номер моего дома — 134.”

Декларативный подход: Мой адрес: Энск, улица Победы, дом 134.

Пример из программирования:

Дан массив чисел, надо написать функцию, которая вернет массив чисел, где каждое число из исходного массива удваивается. 

Императивный подход

function double (arr) { 
   let results = []; 
   for (let i = 0; i < arr.length; i++){ 
     results.push(arr[i] * 2); 
   } 
   return results; 
}

Декларативный подход:

const double = arr.map(item => item * 2);
double

Декларативный подход предполагает, что исполнитель знает все шаги, необходимые для выполнения инструкции: официант в курсе как предоставить столик на двоих, ваш друг может по адресу найти нужный дом, а js-интерпретатор знает как работает метод map