漂亮的代码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; }; }
自己写成了一堆屎,好好学习。