XDM, как функциональное программирование JS? Смотрите, хватит! (один)

внешний интерфейс JavaScript
XDM, как функциональное программирование JS? Смотрите, хватит! (один)

Слепая догадка: если вы видели

В этих двух статьях вас точно больше заинтересует [функция] JS!

Если вам не интересно? Тогда я пойду?

image.png

image.png

Скиньте его, это очень удобно~ Верно!JS — это легкое функциональное программирование!

Разберите это предложение и попробуйте его~

Бенгуа будет использоватьОблегченное функциональное программирование на JavaScriptКнига ведет вас к анализу ее точки опорыфункциональное программирование, а затем посмотрите, почему JS называется"легкий"!

Эта статья «Как функциональное программирование JS? Смотрите, хватит! "сериипервый раз, Нравится 👍 Подписывайтесь 👀 Продолжайте следить!

Обзор FP

важность

Функциональное программирование (ФП) — понятие не новое, оно использовалось на протяжении почти всей истории программирования. Только в последние несколько лет функциональное программирование стало основной концепцией во всем мире разработки.

Функциональное программирование имеет хорошо зарекомендовавшие себя и четкие принципы, Зная эти принципы, мы сможем быстрее читать код и находить проблему. Вот почему функциональное программирование так важно!

Например: Возможно, вы написали некоторые изимперативный код, такие операторы, как операторы if и циклы for. Эти операторы предназначены для того, чтобы проинструктировать компьютер, как именно делать то или иное действие. а такжедекларативный код, а код, который мы написали, чтобы следовать принципам функционального программирования, больше ориентирован на описание конечного результата.

Функциональное программирование — это еще один способ подумать о том, как должен быть организован код.Сделайте поток данных более заметными позволяет читателям быстро понять ваши мысли.

Помните, что каждая строка кода, которую вы пишете, должна поддерживаться кем-то, кто может быть членом вашей команды или вами в будущем.

оригинальная функция

Функциональное программирование — это не просто программирование с ключевым словом function, точно так же, как объектно-ориентированное программирование — это не просто использование объектов.

Каково истинное значение функции?

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

f(x) = 2x2 + 3, что является математически истинной функцией. Так какое это имеет отношение к функциональному программированию?

Суть функции — это [карта]. Элегантным образом опишите отношение отображения между одним набором значений и другим набором значений, то есть отношение между входным значением и выходным значением функции.

В программировании он может иметь или не иметь много входных значений. Он может иметь выходное значение (возвращаемое значение), а может и не иметь.

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

Здесь входное значение — это параметр функции, а выходное значение —returnс вещами. (Если вы не возвращаете значение или используете return;, то неявно возвращается значение undefined.)

Думай "вернуться"

  • Рассмотрим следующий код:
function foo(x) {
    if (x > 10) return x + 1;

    var y = x / 2;

    if (y > 3) {
        if (x % 2 == 0) return x;
    }

    if (y > 1) return y;

    return x;
}

Что возвращает foo(2)? Что возвращает foo(4)? Как насчет foo(8), foo(12)?

  • Вариация приведенного выше кода, рассмотрите:
function foo(x) {
    var retValue;

    if (retValue == undefined && x > 10) {
        retValue = x + 1;
    }

    var y = x / 2;

    if (y > 3) {
        if (retValue == undefined && x % 2 == 0) {
            retValue = x;
        }
    }

    if (retValue == undefined && y > 1) {
        retValue = y;
    }

    if (retValue == undefined) {
        retValue = x;
    }

    return retValue;
}

Было бы легче понять, если бы это было написано так?

В каждой ветке, где можно установить retValue, естьзащитникЧтобы убедиться, что retValue не было установлено перед выполнением. (?)

Вместо того, чтобы использовать возврат в начале функции, мы должны использовать обычное управление потоком (если это логика) для управления назначением retValue. В конце мы возвращаем retValue.

Использование возврата для реализации управления потоком создает больше последствий.

  • Рассмотрим еще раз следующий код:
// 通过一个函数修改变量 y 的值
var y;

function foo(x) {
    y = (2 * Math.pow( x, 2 )) + 3;
}

foo( 2 );

y;    

Но мы также можем написать:

function foo(x) {
    return (2 * Math.pow( x, 2 )) + 3;
}

var y = foo( 2 );

y; 

Является ли последний вариант более выгодным?

Ответ: да: да!

Возврат в последней версии представляет собой явный вывод, а присваивание y в первой — неявный вывод.

Обычно разработчики предпочитают явный режим неявному.

Почему сказано, что последний возврат является явным? И первое назначение y является неявным?

Этот пример может дать вам ответ:

function sum(list) {
    var total = 0;
    for (let i = 0; i < list.length; i++) {
        if (!list[i]) list[i] = 0; // list 使用了 nums 的引用,不是对 [1,3,9,..] 的值复制,而是引用复制。

        total = total + list[i];
    }

    return total;
}

var nums = [ 1, 3, 9, 27, , 84 ];

sum( nums );            // 124

Есть ли в этом коде, помимо вывода return, какой-либо другой вывод, который может изменить значение внешнего параметра функции nums?

Есть! Именно в закомментированной строке мы случайно изменили nums .

console.log(nums) // [1, 3, 9, 27, 0, 84]

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

Этот неявный вывод функции имеет специальное название в функциональном программировании: побочные эффекты.

Функции без побочных эффектов также имеют специальное название:чистая функция, эта концепция очень важна, позже будет больше обсуждений!

Функции высшего порядка

Функция, которая принимает или возвращает одну или несколько функций, называется функцией высшего порядка.

Наиболее сильным из них является: [закрытие].

Мы будем широко использовать замыкания в последующих примерах. Вероятно, это самая важная основа всего функционального программирования.

Вот небольшой пример:

Предположим, вам нужно добавить два значения, одно из которых вы уже знаете, а другое вам нужно будет узнать позже, вы можете использовать замыкание дляЗаписыватьПервое входное значение:

function makeAdder(x) {
    return function sum(y){
        return x + y;
    };
}

//我们已经分别知道作为第一个输入的 10 和 37
var addTo10 = makeAdder( 10 );
var addTo37 = makeAdder( 37 );

// 紧接着,我们指定第二个参数
addTo10( 3 );            // 13
addTo10( 90 );            // 100

addTo37( 13 );            // 50

Это указание ввода в последовательных вызовах функций является очень распространенной формой функционального программирования.

Его можно разделить на две категории:Применение частичных функцийа такжекарри. Позже расширится.

именованная функция

Мы выступаем за использование именованных функций вместо анонимных, что больше подходит для нашего семантического кода, такого какgetPreferredName(..), цель операции очень ясна, и она может хорошо отследить проблему и предотвратить ее появление.(anonymous function).

Но, за исключением => стрелочных функций, стрелочные функции по-прежнему должны использоваться эффективно.

=> Самое интересное в стрелочных функциях то, что они почти точно следуют математической записи функций, особенно в функциональных языках программирования, таких как Haskell. Это упрощает и оптимизирует пространство во фрагментах кода.

брось "это"

Правила связывания this в JavaScript действительно трудно запомнить, но хорошая новость заключается в том, что мы собираемся их выбросить и проигнорировать.

Основная причина этого в том, что это неявный входной параметр функции. Ранее мы упоминалиОбычно разработчики предпочитают явный режим неявному., такой неявный ввод нарушает наш принцип.

резюме этапа

Функции мощные!

  1. Вся причина, по которой мы изучаем функциональное программирование, заключается в том, чтобы писать более читаемый код.

  2. В программе функция — это не просто набор операторов или операций, она требует одного или нескольких входных данных (в идеале только одного!) и выходных данных. Разработчики предпочитают явный ввод-вывод неявному вводу-выводу.

  3. Функции внутри функций могут принимать переменные вне замыкания и запоминать их для последующего использования. Это одна из самых важных концепций во всем программировании и основа функционального программирования.

  4. Будьте осторожны с анонимными функциями, особенно => стрелочными функциями. Хотя его удобно использовать в программировании, он увеличивает нагрузку на чтение кода.

  5. Не используйте чувствительные к этому функции. Это не нуждается в причине.

Спасибо за прочтение

Я Наггетс Энтони, публичный номер [Наггетс Энтони], обратите внимание на переднюю часть, но также обратите внимание на жизнь, продолжайте выводить инг......