В чем отличие процедурного от функционального программирования?

Как типичный "динозавр" задумался над вопросом в чем отличие двух стилей программирования. С моей динозаврской точки зрения одно и тоже.

Или все такие отличия есть?
  • Вопрос задан
  • 1924 просмотра
Пригласить эксперта
Ответы на вопрос 4
rockon404
@rockon404
Frontend Developer
Пример в контексте JavaScript:

Процедурный стиль:
const array = ['first', 'second'];

let output;

function allOdd(words) {
  let result = true;

  for (let i = 0; i < words.length; ++i) {
    const len = words[i].length;

    if (len % 2 !== 0) {
      result = false;
      break;
    }
  }

  return result;
}

output = allOdd(array);

alert(output);

Функциональный стиль:
function length(string) {
  return prop('length', string);
}

function odd(number) {
  return equals(modulus(number, 2), 0); 
}

function allOdd(...words) {
  return every(compose(odd, length), words);
}

alert(allOdd('first', 'second'));

Реализации prop, modulus, equals, every и compose оставлены за кадром. Думаю, из их названия легко понять какой результат они возвращают.
Ответ написан
@EvgeniiR
https://github.com/EvgeniiR
ФП не предполагает наличия изменяемого состояния.
Процедуры же меняют какое-то общее состояние.
Ответ написан
daruvayc0
@daruvayc0
В декларативном программировании, Вы разъясняете: я хочу, чтобы факториал n был n раз факториалом n-1(как в определении факториала в математике). 061936c90772779b902414ec897902cc4b61ca06Декларативное - это что.
const factorial = (n) => {
  return (n === 0) ? 1 : n * factorial(n-1);
}


В императивном, Вы приказываете четко передвигаться по шагам - умножать это на это, пока идет отсчет и запоминаются какие-то числа.
const factorial = (n) => {
  const iter = (counter, acc) => {
    return (counter === 0) ? acc : iter(counter - 1, counter * acc);
  }
  return iter (n, 1);
}

Императивное - это как.
Ответ написан
BojackHorseman
@BojackHorseman
...в творческом отпуске...
разница в том, что процедурный стиль - это использование операторов последовательного исполнения, ветвления и безусловного перехода (все остальное в процедурных языках просто синтаксический сахар), а функциональный стиль - это использование только суперпозиции функций. писать на процедурном языке в функциональном стиле можно, но это не делает язык чисто функциональным.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
САТУРН Санкт-Петербург
от 100 000 до 130 000 руб.
CORE Москва
До 110 000 руб.
HTML Academy Санкт-Петербург
от 150 000 до 180 000 руб.
24 июн. 2019, в 17:46
5000 руб./за проект
24 июн. 2019, в 17:44
700 руб./за проект
24 июн. 2019, в 16:55
5000 руб./за проект