使用 "switch(true)" 代替大量if
最近研究 Laravel 时发现有个写法是 switch(true), 就稍微研究了一下
这里假设我们有一个商场折扣程序
大于5件给0.9折
大于10件给0.8折
传统写法
function sumDiscount($count) {
if ($count > 10) {
return 0.8;
} else if ($count > 5) {
return 0.9;
} else {
return 1;
}
}
echo sumDiscount(4); //1
echo sumDiscount(8); //0.9
echo sumDiscount(12); //0.8
switch写法
function sumDiscount($count) {
switch(true) {
case $count > 10:
return 0.8;
case $count > 5:
return 0.9;
default:
return 1;
}
}
echo sumDiscount(4); //1
echo sumDiscount(8); //0.9
echo sumDiscount(12); //0.8
甚至也可以反着写
function sumDiscount($count) {
switch(false) {
case $count < 10:
return 0.8;
case $count < 5:
return 0.9;
default:
return 1;
}
}
echo sumDiscount(4); //1
echo sumDiscount(8); //0.9
echo sumDiscount(12); //0.8
这样写的话个人认为结构层次更清晰了 (?)
本作品采用《CC 协议》,转载必须注明作者和本文链接
这样写的好处是什么呢,感觉不出来
@究极管理员
个人认为结构层次更清晰了(?)
代码是不是有点问题?不加break么??😂
@李铭昕 加了break就会在第一个case结束
例子:
如果加上了break则
$a
就永远是1
嗯,感觉结构更清晰了些