Сложности в понимании основ, part 1.

к данной статье стоит относиться с осторожностью, писалась совсем новичком

Во время изучения программирования, возникает очень много ступоров при понимании различных концепций, решил агрегировать список понятий, которые мне даются с трудом и попытаться их объяснить.
Прежде всего для хорошего понимания любого кода, который был связан с данными понятиями мне очень пригодилась Подстановочная модель вычислений, которая опирается на Стратегию вычисления конкретной среды.
Каррирование функций – концепция пришедшая из функциональных языков программирования, позволяет частичную передачу аргументов функции, то есть не одновременно несколько аргументов, а как бы по очереди. При декларировании функции например в js мы при этом каждый раз возвращаем анонимную функцию, которая принимает следующий аргумент. В понимании этого мне очень помогла вот эта статья, там на примерах разбирается подробное понимание этого понятия.
Вот пример каррирования функций для самодельной реализации If, true, false:

const If = (bool) => bool;
const True = (x) => (y) => x;
const False = (x) => (y) => y;

If(True)('good')('bad'); // good
If(False)('good')('bad'); // bad

По сути функция просто выбирает первый или второй аргумент в зависимости от переданной функции. Данный пример вводит еще два понятия, они не так сложны в понимании, но упомянуть стоит.
Функция высшего порядка и Функции первого класса (лямбда функции) – ФВП это функция, которая может в качестве аргумента принимать и другие функции (так как в js все функции являются объектами первого рода, то по сути это любая функция в js), ну а ФПК это какая либо анонимная функция(не именованная), записанная в переменную для передачи в качестве аргумента.
Рекурсивный и итеративный процессы, реализованные через рекурсию – написанное выглядит как полнейший бред, но на самом деле это вполне реальные концепции, так же имеющие место быть при функциональном стиле программирования. О различиях этих процессов есть просто великолепная заметка. В целом для себя я обозначил прежде всего то, что рекурсия это вызов самого себя(к примеру функции), но уже как реализовать подход вычисления при вызове самого себя это как раз и есть данные процессы. Рекурсивный процесс начинает вначале разворачивать вашу рекурсию и как только она будет развернута до конца начинает вычисление значений (отложенное вычисление). Итеративный же процесс занимается вычислением значений на каждом шаге рекурсии (для этого используется отдельная переменная – аккумулятор). По ссылке выше есть отличные примеры в виде факториала.

Чуть позже вернусь с Замыканием и Концепциями ООП

Share
Send
2017   it   js   programming   study
1 comment
Vasily Kolesnikov

ПоДстановочная.
P.S.: Прикрути disqus.

Dmitrii Pashutskii

Спасибо! Я хочу перенести все на другой блог там уже прикручу.

Your comment
won’t be published

HTML will not work

Ctrl + Enter