使用 "switch(true)" 代替大量if

渣渣120發表於2021-02-05

最近研究 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 協議》,轉載必須註明作者和本文連結

相關文章