美文网首页
函数式编程

函数式编程

作者: 阿凯_8b27 | 来源:发表于2020-04-01 10:22 被阅读0次

// 函数式编程思想
/**

  • 把函数当成普通数据类型来看待,可以存放再数组里,当做参数传递,赋值给变量

*给函数起正确的变量

**/

const BlogController = {
  index(posts) { return Views.index(posts); },
  show(post) { return Views.show(post); },
  create(attrs) { return Db.create(attrs); },
  update(post, attrs) { return Db.update(post, attrs); },
  destroy(post) { return Db.destroy(post); },
};

//优化
const BlogController1 = {
  index: Views.index,
  show: Views.show,
  create: Db.create,
  update: Db.update,
  destroy: Db.destroy,
};

/*

  • 纯函数,相同的输入,永远返回相同的输出,注意 数组和Json 对象的处理
  • 建立缓存,优化性能
  • 可移植性/自文档化
  • 可测试性
  • 合理性
    */
var memoize = function(f) {
  var cache = {};

  return function() {
    var arg_str = JSON.stringify(arguments);
    cache[arg_str] = cache[arg_str] || f.apply(f, arguments);
    return cache[arg_str];
  };
};

/*

  • 函数柯里化
  • 通过函数返回函数,
  • 可以缓存参数
  • 高阶函数
    */
function curryMain(append) {
    var arr = [];
    return function reply() {
        var arg = Array.prototype.slice.call(arguments);
        arr = arr.concat(arg);
        if (arg.length === 0) { // 递归结束条件,修改为 传入空参数
            return append(arr);
         } else {
             return reply;
         }

/*

  • 函数组合,通过将多个纯函数进行拼接组合,从右到左或者从左到右,依次调用
    */
var compose = (...args) => x => args.reduceRight((value, item) => item(value), x);

/**

*/

简单例子

 /** 刷新事件
         * @param {Object}  val 视图信息
         * @returns {null} 无
         */
        getRefreshData(val){
            const refresh = (number) => {
                return 1;
            }
            this.pageChange(val, refresh)
        },
        /** 向前翻页
         * @param {Object}  val 视图信息
         * @returns {null} 无
         */
        getPrePageData(val){
            const getPre = (number) => {
                return number - 1;
            }
            this.pageChange(val, getPre)
        },
        /** 向后翻页
         * @param {Object}  val 视图信息
         * @returns {null} 无
         */
        getNextPageData(val){
            console.log(val)
            const getNext = (number) => {
                return number + 1;
            }
            this.pageChange(val, getNext)
        },
  /**基于页数变化函数,来进行检索
         * @param {Object} val 视图信息
         * @param {Function} fn 处理页数的函数
         * @returns {null} 无
         */
        pageChange(val, fn){
            const { code } = val;
            const num = this.manuScriptData.find(manuScript => manuScript.code == code);
            num.pageData.currentPage = fn(num.pageData.currentPage);
            this.searchManuScript(code, num.pageData.currentPage - 1);
        },
----------------------------------------------------------------------
比如: 现在有个音乐播放器,要放歌 具体实现函数省略
var player = getplayer();  //找到播放者
var gedan = compose(getGedan(),player ) //找到歌单
var ge = compose(getGe(), gedan)//找到歌
var bofa = compose(getBofa(), ge) //播放歌

/*

  • 声明式编程 通过函数组合,curry等高级函数,依次返回自己想要的结果,使得代码整洁

*/


// 声明式
var makes = cars.map(function(car){ return car.make; });
ENUM_NO1_TAG_GROUP_KEY.map(key => result[key])
                .filter(Boolean)
                .join()

尾递归优化
递归中返回函数,占用内存空间少

相关文章

  • RxSwift初探(1)

    一、前提:函数响应式编程思想 简单来说 函数响应式编程 = 函数式编程 + 响应式编程 (1)函数式 函数式编程是...

  • iOS 函数编程 & 链式编程

    函数式(链式)编程 函数式编程概念 函数式编程是种编程范式 函数式编程 Functional Programmin...

  • 函数式编程(一)—— 前置知识

    为什么要学函数式编程? 什么是函数式编程?函数式编程和面向对象编程的不同对于函数式编程思维方式的理解: 函数式编程...

  • 二十二、函数式编程、面向协议式编程

    函数式编程(Functional Prigramming) 函数式编程 函数式编程(Functional Prig...

  • Python中的函数式编程

    函数式编程 说到函数式编程,我们的重点在于为什么要采用函数式编程,而不是什么是函数式编程。 函数式编程的优点:一、...

  • RxSwift-初探

    函数响应式编程 一:函数式 函数式编程简称FP(Functional Programming),函数式编程就是一种...

  • 《Kotlin入门实战》CH5 | 函数与函数式编程

    函数与函数式编程 函数式编程与命令式编程最大的不同是:函数式编程的焦点在于数据的映射,命令式编程(imperati...

  • 函数响应式编程思想 & RxSwift 核心逻辑(一)

    函数响应式编程思想 函数响应式编程思想即是将函数式编程和响应式编程相结合。 函数式编程 顾名思义,就是像函数一样的...

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 了解C# 函数式编程

    什么是函数式编程 函数式编程是一种编程范式,维基百科对函数式编程定义如下: 函数式编程(英语:functional...

网友评论

      本文标题:函数式编程

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