漂亮的代码1:计算器

看到一个代码问题:

seven(times(five())); // must return 35
four(plus(nine())); // must return 13
eight(minus(three())); // must return 5
six(dividedBy(two())); // must return 3

自己写成了这样:

function zero() {
	if(arguments.length === 0){
  	return 0;
  } else {
    var result = arguments[0];
    return result.op(0);
  }
}
function one() {
  if(arguments.length === 0){
  	return 1;
  } else {
    var result = arguments[0];
    return result.op(1);
  }
}
function two() {
  if(arguments.length === 0){
  	return 2;
  } else {
    var result = arguments[0];
    return result.op(2);
  }
}
function three() {
  if(arguments.length === 0){
  	return 3;
  } else {
    var result = arguments[0];
    return result.op(3);
  }
}
function four() {
  if(arguments.length === 0){
  	return 4;
  } else {
    var result = arguments[0];
    return result.op(4);
  }
}
function five() {
  if(arguments.length === 0){
  	return 5;
  } else {
    var result = arguments[0];
    return result.op(5);
  }
}
function six() {
  if(arguments.length === 0){
  	return 6;
  } else {
    var result = arguments[0];
    return result.op(6);
  }
}
function seven() {
  if(arguments.length === 0){
  	return 7;
  } else {
    var result = arguments[0];
    return result.op(7);
  }
}
function eight() {
  if(arguments.length === 0){
  	return 8;
  } else {
    var result = arguments[0];
    return result.op(8);
  }
}
function nine() {
	if(arguments.length === 0){
  	return 9;
  } else {
    var result = arguments[0];
    return result.op(9);
  }
}

function plus() {
   return {
      op:function(left){
         return left + this.right;
      },
      right:arguments[0]
   }
}
function minus() {
   return {
      op:function(left){
         return left - this.right;
      },
      right:arguments[0]
   }
}
function times() {
   return {
      op:function(left){
         return left * this.right;
      },
      right:arguments[0]
   }
}
function dividedBy() {
   return {
      op:function(left){
         return left / this.right;
      },
      right:arguments[0]
   }
}

看到别人是如何解决的,真是漂亮:

var n = function(digit) {
  return function(op) {
    return op ? op(digit) : digit;
  }
};
var zero = n(0);
var one = n(1);
var two = n(2);
var three = n(3);
var four = n(4);
var five = n(5);
var six = n(6);
var seven = n(7);
var eight = n(8);
var nine = n(9);

function plus(r) { return function(l) { return l + r; }; }
function minus(r) { return function(l) { return l - r; }; }
function times(r) { return function(l) { return l * r; }; }
function dividedBy(r) { return function(l) { return l / r; }; }

自己写成了一堆屎,好好学习。

posted @ 2016-05-25 20:00  htoooth  阅读(617)  评论(0编辑  收藏  举报