技術卡片 - 不要使用 else

心智極客發表於2019-12-23

這條規則帶有爭議性。實際上, if - else 的程式碼結構本身就很直觀,只是說減少 else 的使用可以讓程式碼顯得更加的簡潔。以下幾個方法可以減少 else 的使用

提前返回

protected function getStoredRole($role)
{   

    if (is_numeric($role)) {
        return self::find($role);
    }

    if (is_string($role)) {
        return self::where('name', $role)->first();
    }

    return $role;
}

丟擲異常

public function toJson($options = 0)
{
    $json = json_encode($this->jsonSerialize(), $options);

    if (JSON_ERROR_NONE !== json_last_error()) {
        throw JsonEncodingException::forModel($this, json_last_error_msg());
    }

    return $json;
}

手工捕獲異常

function inverse($x) {
    if (!$x) {
        throw new Exception('除數為 0');
    }
    return 1/$x;
}

try {
    inverse(0) . "\n";
} catch (Exception $e) {
    return  $e->getMessage();
}

使用工廠方法重構業務邏輯

function singUp($subscription)
{
    if($subscription == 'monthly')
    {
        $this->createMonthlySubscription();
    } 
    else if ($subscription == 'forever')
    {
        $this->createForeverSubscription()
    }
}

重構

function singUp(Subscription $subscription)
{
    $subscription->create();
}

// 工廠方法
function getSubscriptionType($type)
{
    if($type == ' forever')
    {
        return new ForeverSubscription;
    }

    return new MonthlySubscription;
}

$subscription = getSubscriptionType($type);
signUp($subscription)
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章