函数式编程

2020-04-01  本文已影响0人  阿凯_8b27

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

*给函数起正确的变量

**/

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,
};

/*

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) //播放歌

/*

*/


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

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

上一篇下一篇

猜你喜欢

热点阅读