美文网首页
认识函数式编程

认识函数式编程

作者: friendshi洛初Udo邭 | 来源:发表于2020-11-09 09:37 被阅读0次

    认识函数式编程

    函数式编程,缩写 FP,是一种编程风格,与面向对象、面向过程等编程范式并列。

    函数式编程中的函数不是 function,而是 Y 与 X 的关系这一数学层面中的函数关系。

    ————相同的输入始终都等于相同的输出。

    函数式编程用来描述(函数)之间的映射。

    例:

    //非函数式

    let num1 = 1;

    let num2 = 2;

    let sum = num1 + num2;

    console.log(sum);

    //函数式

    function add(num1, num2) {

    return num1 + num2;

    }

    let sum = add(2, 3)

    console.log(sum);

    1、函数是一等公民:函数可以储存在变量中、可以作为参数、可以作为返回值。

    //示例

    const Control = {

        index(post){return View.index(post)},

        show(post){return View.show(post)},

        create(post){return View.create(post)},

    }

    //优化

    const Control = {

        index: View.index,

        show: View.show,

        create: View.create,

    }

    2、高阶函数

    我们可以把函数作为参数传递给另一个函数。

      function forEach(array, fn) {

        for (let i = 0; i < array.length; i++) {

          fn(array[i])

        }

      }

      // 测试

      //   let arr = [1, 3, 4, 7, 8]

      //   forEach(arr, function (item) {

      //     console.log(item)

      //   })

      function filter(array, fn) {

        let results = []

        for (let i = 0; i < array.length; i++) {

          if (fn(array[i])) {

            results.push(array[i])

          }

        }

        return results

      }

      // 测试

      //   let arr = [1, 3, 4, 7, 8]

      //   let r = filter(arr, function (item) {

      //     return item % 2 === 0

      //   })

      //   console.log(r)

    我们也可以把函数作为另一个参数的返回结果。

      // 高阶函数-函数作为返回值

      function makeFn () {

        let msg = 'Hello function'

        return function () {

          console.log(msg)

        }

      }

      const fn = makeFn()

      //测试

      // fn()

      // makeFn()()

      // once

      function once(fn) {

        let done = false

        return function () {

          if (!done) {

            done = true

            return fn.apply({}, arguments)

          }

        }

      }

      let pay = once(function (money) {

        console.log(`支付: ${money} RMB`)

      })

      //测试

      // pay(5)

      // pay(5)

      // pay(5)

    常用的高阶函数。

      // map

      const map = (array, fn) => {

        let results = []

        for (let value of array) {

          results.push(fn(value))

        }

        return results

      }

      // 测试

      // let arr = [1, 2, 3, 4]

      // arr = map(arr, v => v * v)

      // console.log(arr)

      // every

      const every = (array, fn) => {

        let result = true

        for (let value of array) {

          result = fn(value)

          if (!result) {

            break

          }

        }

        return result

      }

      // 测试

      // let arr = [9, 12, 14]

      // let r = every(arr, v => v > 10)

      // console.log(r)

      // some

      const some = (array, fn) => {

        let result = false

        for (let value of array) {

          result = fn(value)

          if (result) {

            break

          }

        }

        return result

      }

      // 测试

      // let arr = [1, 3, 5, 9]

      // let r = some(arr, v => v % 2 === 0)

      // console.log(r)

    相关文章

      网友评论

          本文标题:认识函数式编程

          本文链接:https://www.haomeiwen.com/subject/csmdbktx.html