我在日常coding中,有时候会遇到一些让我眼前一亮的代码,在此小记。
减少条件嵌套
此节暂不考虑三元表达式。
if...else...
在代码中使用的频率非常高,每写一次if...else...
就增加了一层代码嵌套,如果存在多层嵌套,会让代码看起来非常不整洁,也不便于理解。
其实在条件允许情况下,我们可以使用一个小技巧来减少嵌套的层级数。
比如原始代码是这样的:
function setName(value) {
if (value) {
this.name = value;
} else {
this.name = 'Bob';
this.hasInput = false;
}
}
上述代码是可以简化的,使用return
截断函数,可以省去else
的嵌套如下:
function setName(value) {
if (value) {
this.name = value;
return;
}
this.name = 'Bob';
this.hasInput = false;
}
当然,这样的写法是有条件的,那就是else
后面没有其他代码。如果原始代码是下面这样,那就无法使用这个小技巧:
function setName(value) {
if (value) {
this.name = value;
} else {
this.name = 'Bob';
this.hasInput = false;
}
this.lastName = 'Mr.' + this.name;
}
参考:代码重构实践
短路原则
如果存着这样的场景,当某个变量为true
的时候,展示<div>
,否则就不展示。
可能我们会这样写:
<div>
{
hasChild
?
<div>……</div>
:
null
}
</div>
这样写也能实现,但是还有更简洁的写法,那就是运用短路原则:
<div>
{
hasChild && (
<div>……</div>
)
}
</div>
这样写是不是要简洁多了~~😚
连续柯里化
官方释义:
把接受多个参数的函数变换成接受一个单一参数的函数,并且返回(接受余下的参数而且返回结果的)新函数的技术
比如,我们需要完成如下功能:
add(1)(2)(3); // 6
比较麻烦点的方法是不断地嵌套函数:
const add = function(x) {
return function(y) {
return function(z) {
return x + y + z;
};
};
};
虽然这样写也能实现效果,但总是麻烦了些。可以利用箭头函数完成代码优化:
const add = x => y => z => x + y + z;
这样是不是代码量大幅度减少了呢。嗯,ES6真香!
干掉你的switch
switch case
是应用非常广的语句,但是有时候我们能有更好的替换方法。
原代码:
let res = '';
switch(type) {
case 'waiting':
res = 'haha';
break;
case 'success':
res = 'heihei';
break;
case 'fail':
res = function() {
return 'NO!';
};
break;
default:
}
其实上面的代码可以换一种写法:
const obj = {
waiting: 'haha',
success: 'heihei',
fail: function() {
return 'NO!'
},
};
const res = obj[type];
实现了同样的效果,但是代码量却少了不少哦。是不是很妙啊,我第一次看到这样的写法是在antd的源码中,自从看到了这美妙的代码,我几乎就没怎么写过switch case
了。