Многие, кто несколько раз слышал о функциональном программировании интерисуются "как это нельзя изменять переменные?" или "как это вообще нет переменных?" и вообще зачем это нужно. Данная запись является переводом записи из блога Джо Армстронга (разработчик Erlang), которая не отвечает на приведенные выше вопросы, но наталкивает на мысли почему так и почему это полезно.
Императивный подход программирования довольно сложная штука.
Когда вы ложите что-нибудь куда-то, то ожидаете в следующий раз найти это в том месте где вы его оставили.
"Кто забрал мой сыр?" - вы спросите.
Когда вы ложите в холодильник кусок сыра, то было бы хорошо найти его там же в следующий раз. Вы оставляете вещи с определенных местах и ожидаете в будущем найти их там на этом же месте. В программировании это сводится к идее и представлению переменных.
В императивных языках программирования переменные являются именами мест куда вы можете что-то положить.
Например:
int x; x = 7;
В языке C это означает, что есть место x куда можем положить целое число. То есть я ложу мое число 7 в место x и хочу, чтобы оно осталось навсегда, где я его оставил.
"Почему навсегда?" - вы спросите.
"Да потому что другие альтернативы хуже."
Если я могу позже изменить x, тогда мою программу будет тяжело понять, т.к. значение в x может меняться множество раз и приходится вникать во всю историю работы программы для того, чтобы понять какое сейчас значение в x.
Ситуация становится еще хуже в случае параллельных вычислений. Допустим несколько параллельных потоков могу изменить значения x в любой момент - с этих пор понять что происходит в программе становится на порядок сложнее.
Функциональные языки программирования не имеют этой проблемы. Если вы оставляете 7 в x, тогда 7 там останется навсегда. И это очень хорошо!
Источник: where's my heese
Комментариев нет:
Отправить комментарий